sql where中用case_SQL常用语句总结

21ae9bd2141a4aaaba06f27fc4e39c64.png

一.简单查询

1.表的创建的数据的插入

sql语句:①INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

c51063aaf27a14a5c362b860f8682c86.png

1).若数据为null则直接写null,若为空记为’’即可

2).句尾一定加;

3).注意区分0001和’0001’的区别

2.查找数据

sql语句:①select列名 from 表名 where 条件

e4145e445a6e6895f2e289cb7a542b36.png

1).列名不加引号

2).用%代替随机字符串

二.汇总分析

①select列名 from 表名 where 条件

cf03d7f669f089a67573405965962260.png

②select distinct 列名 From 表名

d5b9b878f3f7277fc1f71f50f4324643.png

③select 列名from 表名group BY 列名

b7aec2c6f5c294edefd4d71695eeb851.png

④select 列名from 表名group BY 列名having 条件 order by 列名 顺序

6cf185fde41c2e28ee2e276de0677f1e.png

1).在select后 使用distinct来消除列中重复值

2).select列名后加 as 加新列名可以重命名

3).在select后可以对列名调用函数,但是要注意列名返回的是一列值还是一个值

4).where后不能使用汇总函数,并且要在group by后面

5).round()函数用来控制单个数的位数,第一个值为目标数字,第二个值为保留的位数

6).having在group by后用来筛选掉不服合条件的分组

7).group by实质上是把一个表分为了多个表进行处理

8).在分过组并选取组以后可用order by 加列名(可多列)排序,desc降序,asc升序

9).实际运行顺序应为from where group by having select order by limit

三.复杂查询

子查询①select 列名 from 表名 where 列名 in ( select 列名 from 表名 where 条件);

关于时间的函数表②

b293418ed71a915ea638c027d44d3a98.png

关联子查询③select * from score as a where 成绩 = ( select max(成绩) from score as b where b.课程号 = a.课程号);

每组最大的N条记录④(select * from score where 课程号 = '0001' order by 成绩 desc limit 2)

union all

(select * from score where 课程号 = '0002' order by 成绩 desc limit 2)

union all

(select * from score where 课程号 = '0003' order by 成绩 desc limit 2);

1).子查询可以嵌套子查询,但是尽量最多三层

2).in 的运用要熟悉,where 列名1 in 列名2,指的是选取出列名1中,存在于列名2的数据行

3). 关联子查询的执行逻辑完全不同于正常的SELECT语句。关联子查询执行逻辑如下:

(1)先从主查询的表中列取出第一个值,进入子查询中,得到子查询结果,然后返回父查询,判断父查询的where子句条件,则返回整个语句的第1条结果。

(2)重复上述操作,直到所有主查询中的表中列记录取完为止。得出整个语句的结果集,就是最后的答案。

4).关联子查询的好处是可以在子查询里查询按某列分组后的整个表,而不是group by 后只能返回固定的列

5).关联子查询的关键点在子查询的where里

6).通常在order by 排序后,可以通过添加 limit n 来固定返回前n行数据,limit为select语句中最后执行的部分

7).具有相同列名的数据可以使用union all 来上下拼接

四.多表查询

表连接①selecta.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩

from student as a left join score as b

on a.学号 = b.学号

group by a.学号;

case表达式②case when 条件 then 执行1 else 执行2 end

1).多表查询需要表连接,表连接语句在from 后

2).一般为左连接居多(主表在左),各个连接的主要原理都是笛卡尔积

3).三表连接:表1 join 表2 on 表1.列=表2.列 join 表三 on 表2.列= 表3.列

4).case表达式可对一列数值处理,多用在分段处理结果上,一般化为0或者1后用sum计数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值