MYSQL从简单查询到高级查询(二)

1. 查询所有字段
2. 查询特定字段
3. 查询指定记录
4. 带IN关键字的查询
5. 带BETWEEN AND的范围查询
6. 带LIKE的字符匹配查询
7. 带AND的多条件查询
8. 带OR的多条件查询
9. 查询不重复的记录
10. 对查询结果进行排序
11.分组查询
12. 使用查询LIMIT进行限制数量查询
13.连接查询
14.子查询

从最简单的查询开始

1. 查询所有字段

SELECT * FROM emp;

在这里插入图片描述

2. 查询特定字段

SELECT id,name,age FROM emp; 

在这里插入图片描述

3. 查询指定记录

SELECT 字段1,字段2...字段名n FROM 表名 WHERE 查询条件

WHERE 条件判断符

操作符说明
=相等
<>,!=不等于
<小于
<小于
<=小于等于
>=大于等于
BETWEEN位于两值之间

4. 带IN关键字的查询

SELECT * FROM  emp WHERE dep_id IN(1,2) ORDER BY dep_id;
#使用dep_id排序

在这里插入图片描述

5. 带BETWEEN AND的范围查询

SELECT * FROM  emp WHERE age BETWEEN 30 AND 40 ORDER BY age;
#使用age排序

在这里插入图片描述

6. 带LIKE的字符匹配查询

SELECT * FROM emp WHERE name LIKE '周%';

在这里插入图片描述

当然通配符%可以放在不同的位置,有的情况下会影响查询效率。

7. 带AND的多条件查询

SELECT * FROM emp WHERE dep_id=16 AND age=39

8. 带OR的多条件查询

SELECT * FROM emp WHERE dep_id=16 OR age=39

使用OR时需要注意这会让索引失效

9. 查询不重复的记录

SELECT DISTINCT age,id,name FROM emp;

10. 对查询结果进行排序

SELECT * FROM emp ORDER BY age DESC; #降序
SELECT * FROM emp ORDER BY age ASC; #倒序
SELECT * FROM emp ORDER BY age,name DESC; #多列排序

进行多列排序的时候先对第一列排序后,在进行对后面的列进行排序。当排序

11. 分组查询

分组查询是对数据按照某个或多个字段进行分组。

[GROUP BY 字段][HAVING <条件表达式>]
  • 创建分组
    GROUP BY关键字通常和集合函数一起使用,比如MAX(),MIN(),COUNT(),SUM(),AVG()。
SELECT dep_id,COUNT(*) AS TOTAL FROM emp GROUP BY dep_id;
#查出并连接整个部门的员工
SELECT t2.dep_name,GROUP_CONCAT(t1.`name`) as '员工' FROM emp as t1 RIGHT JOIN dep as t2 ON t1.dep_id=t2.id GROUP BY t2.dep_name;

在这里插入图片描述
在这里插入图片描述

  • HAVING过滤分组
#分组后返回总数大于9的
SELECT dep_id,COUNT(*) AS TOTAL from emp GROUP BY dep_id HAVING(TOTAL)>9; 

在这里插入图片描述

  • 在GROUP BY语句中使用WITH ROLLUP
    使用WITH ROLLUP关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。
    在这里插入图片描述
  • 在GROUP BY语句中使用ORDER BY
SELECT dep_id,COUNT(*) AS TOTAL FROM emp GROUP BY dep_id ORDER BY TOTAL;

在这里插入图片描述

12. 使用查询LIMIT进行限制数量查询

比如分页查询

#返回前4条数据
SELECT * FROM emp LIMIT 4;
#从第8条数据开始,返回后4条数据
SELECT * FROM emp LIMIT 4 OFFSET 8;

13. 使用连接查询

  1. 内连接查询
    内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录
select emp.id,emp.age,emp.phone,t2.id as id2,t2.dep_name from emp INNER JOIN dep as t2 on emp.dep_id=t2.id;

在这里插入图片描述
2. 左连接查询
左连接的结果包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列表列均为空值。
在这里插入图片描述

SELECT emp.id,emp.name,emp.age,emp.phone,dep.dep_name FROM emp LEFT JOIN dep ON emp.dep_id=dep.id LIMIT 4;

在这里插入图片描述

  1. 右连接查询
    右连接的结果包括RIGHT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果右表的某行在左表中没有匹配行,则在相关联的结果行中,左表的所有选择列表列均为空值。和上面的左连接同理。
SELECT emp.id,emp.name,emp.age,emp.phone,dep.dep_name FROM emp RIGHT JOIN dep ON emp.dep_id=dep.id;

14. 使用子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,即一个查询以另一个查询的结果为条件。

SELECT dep_name from dep WHERE id=(SELECT dep_id from emp WHERE id =4);

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值