序言

由于博主换了新工作,到了我们当地的县医院信息科工作,信息科嘛,万能杂工。必不可少的肯定需要对医院的his系统数据库进行增删改查(CRUD),至于为什么?你猜!

CRUD = Create Retrieve Update Delete

那么作为一个程序员,你真的能把CRUD玩的得心应手吗?你是否能把你吃饭的手艺用的和你吃饭的筷子一样不用思考,条件反射呢?

所以,今天我们就花很短的时间,来学学简单的 SQL.了解下 CRUD 的姿势。

假如我们有下面一个订单表 ORDER_HEADER

image-20210109214320496

注意:横着的是一行,竖着的是一列!请想像EXCEL

Sql之查询

查询命令SELECT是我们在日常工作中使用频率最高的命令之一,所以我们需要着重的介绍SELECT命令!

工作是否高效,全靠SELECT命令!那么SELETC命令该怎么写?先来介绍一下命令格式

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

首先SELECT命令是以SELECT关键字开头跟着列名,然后是FROM关键字跟着表名,最后是WHERE关键字跟着条件(WHERE以及条件表达式可以省略)

SELECT * FROM order_header WHERE order_type = 1

以上Sql命令翻译成中文就是:从order_header表格中查找order_type是1的所有数据,执行之后你会看到查找出了以下三条数据

image-20210109215209796

*号是通配符,代表所有、全部。

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

SELECT order_status FROM order_header WHERE order_type=1 AND order_no=10006

image-20210109215650689

AND关键字是并且的意思。

可以看到上面我们查出来的数据就很简单了。只有一个字段order_status,一条数据。我们在日常工作当中要尽量少使用 *通配符,而是我们需要什么字段的数据就查询什么字段。因为使用*通配符会让我们查出一些对你无意义的数据,浪费系统资源。

如果要查询订单类型为 1 的或者处于付款状态的订单,SQL 怎么写呢?可以使用OR关键字

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

image-20210109220355541

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

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status

image-20210109220430629

如果我们只想看到数量大于 1 的分组,该怎么写?使用HAVING来筛选

SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status HAVING COUNT(1) > 1

image-20210109220534590

以上就是我们在日常工作中使用到的最多的sql查询相关命令,熟用以上命令,你就能玩转你的数据库啦!当然,这只是单表查询,其实在企业级应用中,我们很少会有单表查询的,一般都是多表联动的存储数据。这个我们稍后再介绍。

sql之插入

单表的插入数据就很简单了。我们先来讲一讲语法:

INSERT INTO <表名> (字段1,字段2,字段3....) VALUES (值1,值2,值3....)

这个就不做解释了,很直观。但是要注意的是 字段 和 值 要一一对应。

我们来测试一下:

INSERT INTO order_header (order_no, order_type, order_status, order_date, oreatedon) VALUES (22222,4,'测试内容','2021-01-09 21:36','2021-01-09 21:36')

image-20210109221302139

sql之更新

更新数据也是我们在日常工作中使用的比较多的命令,很多操作都需要更新数据,如:用户的最新登录时间、用户的积分、库存数量等等

*UPDATE <表名> SET <更新数据的表达式> WHERE <定位需要更新数据的表达式>

我们来把刚刚插入的order_no为22222的数据更新为20210109

UPDATE order_header SET order_no=20210109 WHERE order_no=22222

image-20210109221759578

特别注意:我们一定不要忘记写WHERE后面的表达式,如果不写定位条件,那么就会默认将整个order_header表中的所有order_no都修改为20210109,这种噩梦级别的错误,会让公司直接开除你的!

sql之删除

删除的作用我们就不用说了吧!删除废弃数据。

*DELETE FROM <表名> WHERE <需要删除的数据定位条件>

我们来删除刚刚修改order_no为20210109的数据。

DELETE FROM order_header WHERE order_no=20210109

image-20210109222213178

这里也要特别注意的是定位条件表达式,一定一定一定要写准确!

总结

到这里,我们的CRUD的初步学习就已经结束了!数据库可谓是企业的核心,也是我们程序员的核心基础。基础不扎实,再牛逼的操作都是白扯!

所以,你学废了吗?

最后修改:2021 年 01 月 10 日 11 : 25 AM
如果觉得我的文章对你有用,请随意赞赏