1 小时 SQL 极速入门(一)

栏目: 数据库 · 发布时间: 5年前

内容简介:前几天,我在论坛溜达。看到一个人发帖说做了6年的企业级开发,总是被互联网行业的人认为没技术含量,不就是CRUD么 先解释下 CRUD 是什么。CRUD 就是我们常说的增删改查(Create,Retrieve,Update,Delete)其实,对这个问题,我也思考过。我们所有的业务流程,最终都会抽象出数据模型,保存到数据库中。把业务之间的联系抽象成数据库中表与表,字段与字段之间的联系。实际上,企业的各种系统,在技术层面上确实是在 CRUD。

前几天,我在论坛溜达。看到一个人发帖说

做了6年的企业级开发,总是被互联网行业的人认为没技术含量,不就是CRUD么 先解释下 CRUD 是什么。CRUD 就是我们常说的增删改查(Create,Retrieve,Update,Delete)

其实,对这个问题,我也思考过。我们所有的业务流程,最终都会抽象出数据模型,保存到数据库中。把业务之间的联系抽象成数据库中表与表,字段与字段之间的联系。实际上,企业的各种系统,在技术层面上确实是在 CRUD。

不过话说回来了,互联网的系统不是 CRUD 吗?只不过 CRUD 的姿势不同罢了,互联网可能是面对高并发的 CRUD, 我们是面对的是复杂业务流程的 CRUD。这些业务逻辑还需要一定的行业积淀才能捋清楚。所以在企业级开发上业务和技术基本是五五开,业务比重甚至要大于技术。

所以,今天我们就花很短的时间,来学学简单的 SQL.了解下 CRUD 的姿势。 假如我们有下面一个订单表 ORDER_HEADER,不要在意表里的数据,为了方便说明,瞎填的。

1 小时  <a href='https://www.codercto.com/topics/18630.html'>SQL</a>  极速入门(一)

查询

查询是我们平日使用最多的,下面着重说一下: 查询使用 SELECT 关键字,基本结构如下

SELECT <列名> FROM <表名> WHERE <条件>

假如我们想查找所有已经完工的订单信息,那么 SQL 怎么写呢?

SELECT * FROM order_header WHERE order_status = '完工'
复制代码

执行后会看到我们需要的结果

1 小时 SQL 极速入门(一)

SELECT * 代表查询所有列,一般我们会关注我们需要的字段,比如我们要找到订单类型为 1 的并且完工的订单号,我们可以这么写

SELECT order_no FROM order_header WHERE order_status = '完工' AND order_type = 1
复制代码

我们可以看到只有下面两个符合条件的订单号被选中。在写 SQL 中我们要尽量避免 SELECT * ,我们需要哪个字段就取哪个字段,可以节省 SQL 查询的时间。

1 小时 SQL 极速入门(一)

如果要查询订单类型为 1 的或者处于下达状态的订单,SQL 怎么写呢?

SELECT order_no FROM order_header WHERE order_type = 1 OR order_status = '下达'
复制代码

如果要查找开工,下达和完工状态的订单,我们可以用 IN 关键字

SELECT
    order_no,
    order_type,
    order_status
FROM
    order_header
WHERE
    order_status IN ( '开工', '完工', '下达' )
复制代码

除了 IN 我们可以使用 LIKE 进行模糊查询,比如我们要查询订单状态中包含 “工” 的所有订单

SELECT order_no FROM order_header WHERE  order_status LIKE '%工%'
复制代码

这里的 "%" 表示通配符,"%工"表示以工结尾的所有匹配,"工%"表示以工开头的所有匹配。 此外,我们可以用 NOT IN , NOT LIKE 来取相反的逻辑。

通过 GROUP BY 可以进行分组,比如我们按照订单状态来分组,就可以很方便的查看当前有几种状态的订单

SELECT order_status FROM order_header GROUP BY order_status
复制代码

结果如下图

1 小时 SQL 极速入门(一)

如果我们想看到每个分组中有多少订单,那个我们可以使用 COUNT() 函数

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status
复制代码

结果如下图,可以看到每个分组中订单的数量。除了COUNT(),还有 MAX(),MIN(),SUM()等函数

1 小时 SQL 极速入门(一)

如果我们只想看到数量大于 2 的分组,该怎么写?

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status HAVING COUNT(1) > 2
复制代码

可以看到,只有数量大于2的分组被查到了。

1 小时 SQL 极速入门(一)

如果仅仅想去重,比如想知道总共有几种订单类型,那么我们只需要对此列用 DISTINCT 即可。

SELECT DISTINCT order_type FROM order_header
复制代码

结果中的订单类型列已经被去重了。

1 小时 SQL 极速入门(一)

CASE WHEN ,有时我们会需要简单的判断逻辑,就可以用 CASE WHEN 了。比如我们想让 订单类型为1 的表示生产订单,订单类型为2 的表示更改订单,订单类型为3 的表示废弃订单。那么我们可以这么写

SELECT
    order_no,
    order_type,
    order_status,
CASE
    WHEN order_type = 1 THEN '生产订单'
    WHEN order_type = 2 THEN '更改订单'
    WHEN order_type = 3 THEN '废弃订单'
    ELSE '未知类型'
    END AS type_desc
FROM
order_header
复制代码

结果如下图

1 小时 SQL 极速入门(一)

子查询,有时候我们需要从一个结果集中再次查找,就会用到子查询。比如下面这样写

SELECT
    order_no,
    type_desc
FROM
    (
SELECT
    order_no,
    order_type,
    order_status,
CASE
    WHEN order_type = 1 THEN '生产订单'
    WHEN order_type = 2 THEN '更改订单'
    WHEN order_type = 3 THEN '废弃订单'
    ELSE '未知类型'
    END AS type_desc
FROM
    order_header
) t
复制代码

下节课我们说一下 连接查询和常用到的分析函数,在企业中,单表查询情况是很少的,要关联查询。

插入数据

插入数据我们使用 INSERT 语句

INSERT INTO order_header ( order_no, order_type, order_status, order_date, createdon )
VALUES
    ( '2018102109', 2, '下达', sysdate( ), sysdate( ) )
复制代码

看到,最下面就是我们新插入的一行

1 小时 SQL 极速入门(一)

更新数据

更新数据使用 UPDATE 语句,我们更新一下刚才插入的数据的订单号

UPDATE order_header SET order_no = '112109' WHERE order_no = '2018102109'
复制代码

我们把 订单号为'2018102109'的一行数据更新为了'112109',在update时一定要写好 WHERE 条件,如果没有 WHERE 条件,会更新表中所有数据。

删除数据

我们删除刚才加入的一条数据

DELETE FROM order_header WHERE order_no = '112109'
复制代码

运行后,订单号为'112109'的订单就被删除了,DELETE 时同样要写好 WHERE 条件,如果没有 WHERE 条件,会删除表中所有数据。

下节重点说说 多表连接,常用分析函数。不要走开哦。


以上所述就是小编给大家介绍的《1 小时 SQL 极速入门(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

瞬间之美

瞬间之美

[美] Robert Hoekman, Jr. / 向怡宁 / 人民邮电出版社 / 2009-7 / 45.00元

本书特色: 本书通过重现用户面对Web应用时由始至终的完整情境,主要针对Web应用中几乎所有相关元素,例如Search、Screencast、Blog 、Wizard、 RSS、 Rate 、TagCloud 以及Form的布局、交互甚至客服等都提出了值得借鉴的解决方案。具体通过30多个故事轻松自然地带领读者领会设计者如何百分之百地用心传达以创造美好的用户体验。 本书适用于信息架构设计......一起来看看 《瞬间之美》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具