链接:https://pan.baidu.com/s/1YfFPvWPay_Ysabt77DeXwQ 提取码:xbic
复制这段内容后打开百度网盘手机App,操作更方便哦
一、基础查询
注意:所有查询出来的都是一个虚拟表
语法:SELECT 列名 FROM 表名;
1.查询部分列
2.查询所有列
SELECT 所有列的列名 FROM 表名
SELECT * FROM 表名
注意:生产环境下,优先使用列名查询,*的方式需转换成全列名,效率低、可读性差。
队列中的数据进行运算
+、-、*、/
注意:%是占位符,而非模运算符。
列的别名
列名 as ‘列名’
查询结果去重
distinct 列名
语法:SELECT distinct 列名 FROM 表名;
二、排序查询
语法: SELECT 列名 FROM 表名 ORDER BY 排序列 [排序规则]
排序规则
ASC 升序;DESC 降序
依据单列排序
SELECT 列名1,列名2,列名3 FROM 表名 ORDER BY 列名2 DESC;
依据多列排序
SELECT 列名1,列名2,列名3 FROM 表名 ORDER BY 列名2 DESC,列名1 ASC;
注意:按列名2的大小从大到小排序,列名2相同时,按列名1的从小到大排序。
三、条件查询
语法:SELECT 列名 FROM 表名 WHERE 条件;
WHERE 条件:在查询结果中,筛选符合条件的查询结果,条件为布尔表达式
等值判断(=)
SELECT 列名1 ,列名2 ,列名3 FROM 表名 WHERE 列名2=100;
注意:与java不同(==),mysql中等值判断使用=。
不等值判断(>、<、>=、<=、!=、<>)
注意:!= 和 <>都表示不等于
逻辑判断(and、or、not)
SELECT 列名1 ,列名2 ,列名3 FROM 表名 WHERE 列名2=100 AND 列名3=20;
区间判断(between and)
SELECT 列名1,列名2,列名3 FROM 表名 WHERE 列名2 BETWEEN 500 AND 10000;
注意:闭区间,包含区间边界的两个值;在区间判断语法中,小值在前,大值在后,反之,得不到正确结果
NULL值判断(IS NULL 、 IS NOT NULL)
SELECT 列名1 ,列名2 ,列名3 FROM 表名 WHERE 列名2 IS NULL;
枚举查询(IN(值1,值2,值3…))
SELECT 列名1 ,列名2 ,列名3 FROM 表名 WHERE 列名2 IN(70,80,90);
注意:IN的查询效率较低,可通过多条件拼接
模糊查询(:单个任意符;%:任意长度的任意字符)
语法:SELECT 列名1 ,列名2 ,列名3 FROM 表名 WHERE 列名1 LIKE ‘张’;
注意:模糊查询只能和LIKE关键字结合使用
分支结构查询
格式:
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
WHEN 条件3 THEN 结果3
ELSE 结果
END AS ‘列名’
语法:
SELECT 列名1 ,列名2 ,列名3
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
WHEN 条件3 THEN 结果3
ELSE 结果
END AS ‘列名’
FROM 表名;
注意:通过使用CASE END 进行条件判断,每条数据对应生成一个值。(查询只有一个结果)
经验:类似java中 的switch。
四、时间查询
语法:SELECT 时间函数([参数列表])
经验:执行时间函数查询,会自动生成一张虚表(一行一列)
获取当前系统时间
#查询当前时间
SELECT SYSDATE();
#查询当前时间
SELECT NOW();
#获取当前日期
SELECT CURDATE();
#获取当前时间
SELECT CURTIME();
字符串查询
语法:SELECT 字符串函数([参数列表])
字符串应用
#拼接内容
SELECT CONCAT(‘My’,’S’,’QL’);
应用:例如表中的姓和名进行拼接处理
#字符串替换
SELECT INSERT(‘这是一个数据库’,3,2,’MySql’);#结果为:这是MySql数据库
注意:MYSQL中的字符串下标是从1开始。
#指定内容转换为小写
SELECT LOWER(‘MYSQL’);#mysql
#指定内容转换为大写
SELECT UPPER(‘mysql’);#MYSQL
#指定内容截取
SELECT SUBSTRING(‘JAVAMySQLOracle’,5,5);#MySQL
聚合函数
语法:SELECT 聚合函数(列名) FROM 表名;
经验:对多条数据的单列进行统计,返回统计后的一行结果。
注意:聚合函数自动忽略null值,不进行统计。
分组查询
语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据(列);
分组过滤查询
语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组列 HAVING 过滤规则
限定查询
语法:SELECT 列名 FROM 表名 LIMIT 起始行,查询行数
#查询前5行记录
#查询表中前五名员工的所有信息
SELECT * FROM 表名 LIMIT 0,5;
注意:起始行是从0开始,代表了第一行。第二个参数代表的是从指定行开始查询几行。
#查询范围记录
#查询表中从第三条开始,查询10行
SELECT * FROM 表名 LIMIT 3,10;
#LIMIT 典型应用
分页查询:一页显示10条,一共查询三页
#思路:第一页是从0开始,显示10条
SELECT * FROM LIMIT 0,10;
#第二页是从10开始,显示10条
SELECT * FROM LIMIT 10,10;
#第三页是从20开始,显示10条
SELECT * FROM LIMIT 20,10;
经验:在分页应用场景中,起始行是变化的,但是一页显示的条数是不变的
查询总结
SQL语句编写顺序
SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组 HAVING 过滤条件 ORDER BY 排序列(ASC|DESC) LIMIT 起始行,总条数
SQL 语句执行顺序
1.FROM:指定数据来源表
2.WHERE:对查询数据做一次过滤
3.GROUP BY:分组
4.HAVING:对分组后的数据第二次过滤
5.SELECT:查询各字段的值
6.ORDER BY:排序
7.LIMIT:限定查询结果
查询进阶
子查询(作为条件判断)
语法:SELECT 列名 FROM 表名 WHRER 条件(子查询结果)
查询工资大于Bruce的员工信息
子查询(作为枚举查询条件)
语法:SELECT 列名 FROM 表名 WHERE 列名 IN(子查询结果)
查询与名为“King”同一部门的员工信息
子查询(作为一张表:多行多列)
语法:SELECT 列名 FROM (子查询的结果集) WHERE 条件;
合并查询(了解)