序言
由于博主换了新工作,到了我们当地的县医院信息科工作,信息科嘛,万能杂工。必不可少的肯定需要对医院的his系统数据库进行增删改查(CRUD),至于为什么?你猜!
CRUD = Create Retrieve Update Delete
那么作为一个程序员,你真的能把CRUD玩的得心应手吗?你是否能把你吃饭的手艺
用的和你吃饭的筷子
一样不用思考,条件反射呢?
所以,今天我们就花很短的时间,来学学简单的 SQL.了解下 CRUD 的姿势。
假如我们有下面一个订单表 ORDER_HEADER
。
注意:横着的是一行,竖着的是一列!请想像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的所有数据,执行之后你会看到查找出了以下三条数据
*
号是通配符,代表所有、全部。
SELECT * 代表查询所有列,一般我们会关注我们需要的字段,比如我们要找到订单类型为 1 的并且order_no是10006的订单号,我们可以这么写:
SELECT order_status FROM order_header WHERE order_type=1 AND order_no=10006
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
如果我们想看到每个分组中有多少订单,那个我们可以使用 COUNT() 函数
SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status
如果我们只想看到数量大于 1 的分组,该怎么写?使用HAVING来筛选
SELECT order_status, COUNT(1) FROM order_header GROUP BY order_status HAVING COUNT(1) > 1
以上就是我们在日常工作中使用到的最多的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')
sql之更新
更新数据也是我们在日常工作中使用的比较多的命令,很多操作都需要更新数据,如:用户的最新登录时间、用户的积分、库存数量等等
*UPDATE <表名> SET <更新数据的表达式> WHERE <定位需要更新数据的表达式>
我们来把刚刚插入的order_no为22222的数据更新为20210109
UPDATE order_header SET order_no=20210109 WHERE order_no=22222
特别注意:我们一定不要忘记写WHERE后面的表达式,如果不写定位条件,那么就会默认将整个order_header表中的所有order_no都修改为20210109,这种噩梦级别的错误,会让公司直接开除你的!
sql之删除
删除的作用我们就不用说了吧!删除废弃数据。
*DELETE FROM <表名> WHERE <需要删除的数据定位条件>
我们来删除刚刚修改order_no为20210109的数据。
DELETE FROM order_header WHERE order_no=20210109
这里也要特别注意的是定位条件表达式,一定一定一定要写准确!
总结
到这里,我们的CRUD的初步学习就已经结束了!数据库可谓是企业的核心,也是我们程序员的核心基础。基础不扎实,再牛逼的操作都是白扯!
所以,你学废了吗?