MySQL数据查询语言DQL

MySQL数据查询语言DQL

目录

  • MySQL数据查询语言DQL
    • DQL关键字
    • 数据查询语言DQL
        • 1.查询表
        • 2.子查询
        • 3.联表查询
        • 4.GROUP BY
        • 5.HAVING
        • 6.分页查询
        • 7.排序查询

DQL关键字

DQL关键字 含义
SELECT SELECT 字段列表,查询检索的列或表达式,它指定了最终结果包含的列
FROM FROM 表名,指定了要查询的列表或视图,例FROM table_name
WHERE WHERE 条件列表,筛选查询结果,通常是列(字段)的条件表达式,例:WHERE id = 10
GROUP BY GROUP BY 分组字段列表,根据一个或多个列对结果进行分组,但是通常需要满足聚合条件
HAVING HAVING 分组后的条件列表,用于在GROUP BY子句的结果上进行过滤筛选
ORDER BY ORDER BY 排序字段列表,用于按照一个或多个列对结果进行排序,它可以按升序(ASC)或降序(DESC)对查询结果进行排序
LIMIT LIMIT 分页参数,一般在语句的最后,用于限制查询结果的数量
DQL执行顺序 FROM -> WHERE -> GROUP BY -> HAVING ->SELECT -> ORDER BY -> LIMIT

数据查询语言DQL

1.查询表

查表之前首先要选择库use database_name

查看emp表全部列

select * from emp5;

查看name字段

select name from emp5

MySQL数据查询语言DQL_第1张图片

2.子查询
  • 将一个查询语句的结果当做另外一个查询语句的条件使用
+----+--------+---------------------+------+-------+
| id | name   | time                | age  | wages |
+----+--------+---------------------+------+-------+
|  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |
|  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |
|  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |
|  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |
|  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |
|  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |
|  7 | 竖八   | 2024-01-25 16:14:19 |   20 |  2200 |
+----+--------+---------------------+------+-------+
-- 查询最大工资
select max(wages) from emp5;
+------------+
| max(wages) |
+------------+
|       2200 |
+------------+
-- 将最大工资作为条件插入查询name字段的语句中
select name from emp5 where wages = (select max(wages) from emp5);
+--------+
| name   |
+--------+
| 竖八   |
+--------+
-- 多个字段同理
select name,age,wages from emp5 where wages = (select max(wages) from emp5);
+--------+------+-------+
| name   | age  | wages |
+--------+------+-------+
| 竖八   |   20 |  2200 |
+--------+------+-------+
3.联表查询
-- 查询部门表
select * from dep
+-----+--------------+
| id  | name         |
+-----+--------------+
| 200 | 技术部       |
| 201 | 人力资源     |
| 202 | 销售部       |
| 203 | 运营部       |
| 204 | 售后部       |
+-----+--------------+

-- 查询员工表
select * from emp5;
+----+--------+---------------------+------+-------+--------+
| id | name   | time                | age  | wages | dep_id |
+----+--------+---------------------+------+-------+--------+
|  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |    203 |
|  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |    201 |
|  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |    202 |
|  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |    203 |
|  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |    201 |
|  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |    200 |
|  7 | 竖八   | 2024-01-25 16:14:19 |   20 |  2200 |    205 |
+----+--------+---------------------+------+-------+--------+

-- 联表查询dep和emp5
select * from dep,emp5;
+-----+--------------+----+--------+---------------------+------+-------+--------+
| id  | name         | id | name   | time                | age  | wages | dep_id |
+-----+--------------+----+--------+---------------------+------+-------+--------+
| 204 | 售后部       |  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |    203 |
| 203 | 运营部       |  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |    203 |
| 202 | 销售部       |  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |    203 |
| 201 | 人力资源     |  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |    203 |
| 200 | 技术部       |  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |    203 |
| 204 | 售后部       |  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |    201 |
| 203 | 运营部       |  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |    201 |
| 202 | 销售部       |  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |    201 |
| 201 | 人力资源     |  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |    201 |
| 200 | 技术部       |  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |    201 |
| 204 | 售后部       |  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |    202 |
| 203 | 运营部       |  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |    202 |
| 202 | 销售部       |  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |    202 |
| 201 | 人力资源     |  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |    202 |
| 200 | 技术部       |  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |    202 |
| 204 | 售后部       |  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |    203 |
| 203 | 运营部       |  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |    203 |
| 202 | 销售部       |  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |    203 |
| 201 | 人力资源     |  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |    203 |
| 200 | 技术部       |  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |    203 |
| 204 | 售后部       |  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |    201 |
| 203 | 运营部       |  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |    201 |
| 202 | 销售部       |  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |    201 |
| 201 | 人力资源     |  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |    201 |
| 200 | 技术部       |  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |    201 |
| 204 | 售后部       |  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |    200 |
| 203 | 运营部       |  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |    200 |
| 202 | 销售部       |  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |    200 |
| 201 | 人力资源     |  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |    200 |
| 200 | 技术部       |  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |    200 |
| 204 | 售后部       |  7 | 竖八   | 2024-01-25 16:14:19 |   20 |  2200 |    205 |
| 203 | 运营部       |  7 | 竖八   | 2024-01-25 16:14:19 |   20 |  2200 |    205 |
| 202 | 销售部       |  7 | 竖八   | 2024-01-25 16:14:19 |   20 |  2200 |    205 |
| 201 | 人力资源     |  7 | 竖八   | 2024-01-25 16:14:19 |   20 |  2200 |    205 |
| 200 | 技术部       |  7 | 竖八   | 2024-01-25 16:14:19 |   20 |  2200 |    205 |
+-----+--------------+----+--------+---------------------+------+-------+--------+

-- 添加条件限制,当员工表中的部门id = 部门表中id时,如果不存在对应的部门则不打印(比如id7的205部门)
select * from dep,emp5 where emp5.dep_id=dep.id;
+-----+--------------+----+--------+---------------------+------+-------+--------+
| id  | name         | id | name   | time                | age  | wages | dep_id |
+-----+--------------+----+--------+---------------------+------+-------+--------+
| 203 | 运营部       |  1 | 张三   | 2024-01-25 15:24:19 |   18 |  2000 |    203 |
| 201 | 人力资源     |  2 | 倪哥   | 2024-01-25 15:34:11 |   20 |  1000 |    201 |
| 202 | 销售部       |  3 | 李四   | 2024-01-25 16:14:19 |   18 |  2000 |    202 |
| 203 | 运营部       |  4 | 陈五   | 2024-01-25 16:14:19 |   19 |  1000 |    203 |
| 201 | 人力资源     |  5 | 王六   | 2024-01-25 16:14:19 |   19 |  2000 |    201 |
| 200 | 技术部       |  6 | 横七   | 2024-01-25 16:14:19 |   20 |  1000 |    200 |
+-----+--------------+----+--------+---------------------+------+-------+--------+
  • 例:打印各个部门中最高工资的员工信息
mysql> select * from emp5 where wages in (select max(wages) from emp5 group by dep_id);

MySQL数据查询语言DQL_第2张图片

4.GROUP BY
  • group by 作用于where之后,order by 之前
  • 不适用group by的场景:查询后显示所有数据,且没有分组需要,例如当表中基本没有重复数据时就没必要分组

将表格emp5wages(工资)分组(2000,1000,2200)

select wages from emp5 group by wages;

MySQL数据查询语言DQL_第3张图片

  • 例:我想查询各个部门的最高工资:
select dep_id,max(wages) from emp5 group by dep_id;

MySQL数据查询语言DQL_第4张图片

  • 配合函数作用列,如summaxavgcount
select dep_id,sum(wages) from emp5 group by dep_id;
select dep_id,max(wages) from emp5 group by dep_id;
select dep_id,avg(wages) from emp5 group by dep_id;
select dep_id,count(*) from emp5 group by dep_id;
  • group_concat可以查看到组内所有人的属性
    • 根据部门(dep_id)分组,并且显示各个部门的人员
select group_concat(name), dep_id from emp5 group by dep_id;

MySQL数据查询语言DQL_第5张图片

  • group_concat也可以查看进行字符的拼接
    • 根据部门(dep_id)分组,并且显示各个部门的人员以及其工资
select group_concat(name,":",wages), dep_id from emp5 group by dep_id;

MySQL数据查询语言DQL_第6张图片

5.HAVING
  • HAVING一般紧随GROUP BY之后,一般用于限定SELECT筛选的字段
  • 查询各个部门的最高工资,并且排除薪资低于2000的
select dep_id,max(wages) from emp5 group by dep_id having max(wages)>2000;

MySQL数据查询语言DQL_第7张图片

  • 查询各个部门的最高工资,并且只要202和203部门的
select dep_id,max(wages) from emp5 group by dep_id having dep_id in (202,203);

MySQL数据查询语言DQL_第8张图片

6.分页查询
  • limit 0,2从第0页开始,往后每页2条数据
  • limit 2,2每页两条数据从第二页开始查询
select * from emp5 limit 0,2

MySQL数据查询语言DQL_第9张图片

MySQL数据查询语言DQL_第10张图片

7.排序查询
  • 升序:ASC
  • 降序:DESC
  • 按照员工的工资升序排序
select * from emp5 order by wages ASC;

MySQL数据查询语言DQL_第11张图片

  • 按照员工的部门排序,当部门相同时按照工资升序排序
select * from emp5 order by dep_id ASC, wages ASC;

MySQL数据查询语言DQL_第12张图片

你可能感兴趣的:(MySQL,mysql,数据库)