Mysql数据库-DQL数据查询语言

DQL数据查询语言

  • 1. 单表查询
    • 1.1 语法
    • 1.2 where子句
      • 1.2.1 条件关系运算符
      • 1.2.2 条件逻辑运算符
    • 1.3 like子句
    • 1.4 对查询结果处理
      • 1.4.1 设置查询列
      • 1.4.2 计算列
      • 1.4.3 as取字段别名
      • 1.4.4 distinct去重
    • 1.5 order by 排序
      • 1.5.1 升序
      • 1.5.2 降序
      • 1.5.3 单字段排序
      • 1.5.4 多字段排序
    • 1.6 聚合函数
      • 1.6.1 count()总数
      • 1.6.2 min()最小值
      • 1.6.3 max()最大值
      • 1.6.4 sum()求和
      • 1.6.5 avg()平均值
    • 1.7 日期函数
      • now()函数
      • sysdate()函数
    • 1.8 字符串函数
      • 1.8.1 concat 拼接
      • 1.8.2 upper 大写
      • 1.8.3 lower 小写
      • 1.8.4 substring 截取
    • 1.9 分组查询 group by...having
    • 1.10 分页查询limit
  • 2. 多表联查
    • 2.1 数据准备
    • 2.2 内连接 inner join
    • 2.3 左链接 left join
    • 2.4 右链接 right join
    • 2.5 子查询

1. 单表查询

1.1 语法

select * from where 条件

1.2 where子句

1.2.1 条件关系运算符

关系运算符符号
等于=
不等于!= 或 <>
大于>
小于<
大于等于>=
小于等于<=
介于v1和v2之间between v1 and v2
# 查询students表中,20-28岁之间的数据,并进行升序排列,包含20和28岁。
mysql> select * from students where stu_age not between 20 and 28  order by stu_age;
+----------+----------+------------+---------+-------------+---------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq  | stu_datetime        |
+----------+----------+------------+---------+-------------+---------+---------------------+
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291 | NULL                |
| 20211215 | 周一     ||      17 | 13511111111 | 223233  | NULL                |
| 20211221 | 周小     ||      18 | 13563764832 | 2112233 | 2021-12-17 14:31:53 |
| 20211222 | 李小小   ||      18 | 13563764833 | 2112233 | 2021-12-17 14:34:59 |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293 | NULL                |
+----------+----------+------------+---------+-------------+---------+---------------------+

1.2.2 条件逻辑运算符

逻辑运算符符号
and
or
not

1.3 like子句

模糊查询:select * from where column like '[eg]';

在like关键字后的eg表达式中
% 表示任意多个字符  【%S% 包含字母S】
_ 表示任意一个字符  【_S% 第二个字母为S】1. 查询students表中,stu_name中含有“小”的数据
mysql> select * from students where stu_name like '%小%';
+----------+----------+------------+---------+-------------+---------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq  | stu_datetime        |
+----------+----------+------------+---------+-------------+---------+---------------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL    | NULL                |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456  | NULL                |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456  | NULL                |
| 20211221 | 周小     ||      18 | 13563764832 | 2112233 | 2021-12-17 14:31:53 |
+----------+----------+------------+---------+-------------+---------+---------------------+2. 查询students表中,stu_name中第一个字是“小”的数据
mysql> select * from students where stu_name like '小%';
+----------+----------+------------+---------+-------------+--------+--------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq | stu_datetime |
+----------+----------+------------+---------+-------------+--------+--------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL   | NULL         |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456 | NULL         |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456 | NULL         |
+----------+----------+------------+---------+-------------+--------+--------------+3. 查询students表中,stu_name中第二个字是“小”的数据mysql> select * from students where stu_name like '_小%';
+----------+----------+------------+---------+-------------+---------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq  | stu_datetime        |
+----------+----------+------------+---------+-------------+---------+---------------------+
| 20211221 | 周小     ||      18 | 13563764832 | 2112233 | 2021-12-17 14:31:53 |
| 20211222 | 李小小   ||      18 | 13563764833 | 2112233 | 2021-12-17 14:34:59 |
+----------+----------+------------+---------+-------------+---------+---------------------+

1.4 对查询结果处理

1.4.1 设置查询列

mysql> select stu_num,stu_name,stu_age from students;
+----------+----------+---------+
| stu_num  | stu_name | stu_age |
+----------+----------+---------+
| 20211212 | 小黑     |    NULL |
| 20211213 | 小黑     |      25 |
| 20211214 | 小黑     |      25 |
| 20211215 | 周一     |      17 |
| 20211216 | 周二     |      28 |
| 20211217 | 刘备     |      30 |
| 20211218 | 刘依     |      16 |
| 20211219 | 周五     |      20 |
| 20211220 | 周六     |      20 |
| 20211221 | 周小     |      18 |
| 20211222 | 李小小   |      18 |
+----------+----------+---------+

1.4.2 计算列

## 计算students表中,stu_age列年龄总和
mysql> select sum(stu_age) from students;
+--------------+
| sum(stu_age) |
+--------------+
|          217 |
+--------------+
1 row in set (0.00 sec)

1.4.3 as取字段别名

## 计算students表中,stu_age列年龄总和,显示字段取名为“年龄总和”
mysql> select sum(stu_age) as 年龄总和 from students;
+----------+
| 年龄总和 |
+----------+
|      217 |
+----------+
1 row in set (0.00 sec)

1.4.4 distinct去重

## 去掉年龄重复值,并按照年龄大小进行升序
mysql> select distinct(stu_age) from students order by stu_age;
+---------+
| stu_age |
+---------+
|    NULL |
|      16 |
|      17 |
|      18 |
|      20 |
|      25 |
|      28 |
|      30 |
+---------+
8 rows in set (0.00 sec)

1.5 order by 排序

数据表中按照指定的列进行排序,降序或升序,默认为升序。

语法:
select * from where 条件 order by asc|desc

  • asc 按照指定的列升序 (默认)
  • desc 按照指定的列降序

1.5.1 升序

#按照stu_gender进行升序排列
select * from students where stu_age > 10 order by stu_gender asc;

在这里插入图片描述

1.5.2 降序

# 按照stu_gender列进行降序排列
select * from students where stu_age > 10 order by stu_gender desc;

在这里插入图片描述

1.5.3 单字段排序

# 按照stu_gender列单字段进行降序排列
select * from students where stu_age > 10 order by stu_gender desc;

在这里插入图片描述

1.5.4 多字段排序

# 先按照stu_gender升序排列,在此基础上在按照stu_age降序排列。
select * from students where stu_age > 10 order by stu_gender asc,stu_age desc; 

在这里插入图片描述

1.6 聚合函数

1.6.1 count()总数

# 统计students表中年龄大于20岁的人数select count(1) as 年龄大于20人数统计  from students where stu_age >20;
+--------------------+
| 年龄大于20人数统计 |
+--------------------+
|                  4 |
+--------------------+

1.6.2 min()最小值

# 获取students表中,男生最小年龄
mysql> select min(stu_age) as 获取男生中最小年龄 from students where stu_gender = '男';
+--------------------+
| 获取男生中最小年龄 |
+--------------------+
|                 25 |
+--------------------+
1 row in set (0.00 sec)

1.6.3 max()最大值

# 获取students表中,女生最大年龄
mysql> select max(stu_age) as 获取女生中最大年龄 from students where stu_gender = '女';
+--------------------+
| 获取女生中最大年龄 |
+--------------------+
|                 30 |
+--------------------+
1 row in set (0.00 sec)

1.6.4 sum()求和

mysql> select sum(stu_age) as 男女年龄总和, min(stu_age) as 年龄最小值, max(stu_age) as 年龄最大值, avg(stu_age) as 平均年龄 from students;
+--------------+------------+------------+----------+
| 男女年龄总和 | 年龄最小值 | 年龄最大值 | 平均年龄 |
+--------------+------------+------------+----------+
|          141 |         16 |         30 |  23.5000 |
+--------------+------------+------------+----------+

1.6.5 avg()平均值

mysql> select sum(stu_age) as 男女年龄总和, min(stu_age) as 年龄最小值, max(stu_age) as 年龄最大值, avg(stu_age) as 平均年龄 from students;
+--------------+------------+------------+----------+
| 男女年龄总和 | 年龄最小值 | 年龄最大值 | 平均年龄 |
+--------------+------------+------------+----------+
|          141 |         16 |         30 |  23.5000 |
+--------------+------------+------------+----------+

1.7 日期函数

now()函数

mysql> insert into students values ('20211219','周五','女',20,'13562738283','222999333',now());
Query OK, 1 row affected (0.01 sec)mysql> select * from students;
+----------+----------+------------+---------+-------------+-----------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq    | stu_datetime        |
+----------+----------+------------+---------+-------------+-----------+---------------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL      | NULL                |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211215 | 周一     ||      17 | 13511111111 | 223233    | NULL                |
| 20211216 | 周二     ||      28 | 13511111112 | 293992    | NULL                |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293   | NULL                |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291   | NULL                |
| 20211219 | 周五     ||      20 | 13562738283 | 222999333 | 2021-12-17 11:01:51 |
+----------+----------+------------+---------+-------------+-----------+---------------------+
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2021-12-17 11:06:55 |
+---------------------+
1 row in set (0.00 sec)

sysdate()函数

mysql> insert into students values ('20211220','周六','女',20,'13562738284','222999334',sysdate());
Query OK, 1 row affected (0.05 sec)mysql> select * from students;
+----------+----------+------------+---------+-------------+-----------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq    | stu_datetime        |
+----------+----------+------------+---------+-------------+-----------+---------------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL      | NULL                |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211215 | 周一     ||      17 | 13511111111 | 223233    | NULL                |
| 20211216 | 周二     ||      28 | 13511111112 | 293992    | NULL                |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293   | NULL                |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291   | NULL                |
| 20211219 | 周五     ||      20 | 13562738283 | 222999333 | 2021-12-17 11:01:51 |
| 20211220 | 周六     ||      20 | 13562738284 | 222999334 | 2021-12-17 11:05:42 |mysql> select sysdate();
+---------------------+
| sysdate()           |
+---------------------+
| 2021-12-17 11:06:27 |
+---------------------+
1 row in set (0.00 sec)

1.8 字符串函数

通过sql指令对字符串进行处理

1.8.1 concat 拼接

concat(column1,colunm2...)

拼接students表中stu_name,stu_gender,stu_age
mysql> select concat(stu_name,'-',stu_gender,'-',stu_age,'岁') from students;
+--------------------------------------------------+
| concat(stu_name,'-',stu_gender,'-',stu_age,'岁') |
+--------------------------------------------------+
| NULL                                             |
| 小黑--25|
| 周二--28|
| Tom--18|
+--------------------------------------------------+
12 rows in set (0.00 sec)

1.8.2 upper 大写

### 将studens表中,stu_name列大写字母变成大写。
mysql> select upper(stu_name) from students ;
+-----------------+
| upper(stu_name) |
+-----------------+
| 小黑            |
| TOM             |
+-----------------+
12 rows in set (0.04 sec)

1.8.3 lower 小写

### 将studens表中,stu_name列大写字母变成小写。
mysql> select lower(stu_name) from students ;
+-----------------+
| lower(stu_name) |
+-----------------+
| 小黑            |
| tom             |
+-----------------+
12 rows in set (0.01 sec)

1.8.4 substring 截取

substring(column,strat,len) 从start开始截取,截取len位,start从1开始计算

### 在students表中,截取显示stu_tel手机号的后四位。
mysql> select * from students;
+----------+----------+------------+---------+-------------+-----------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq    | stu_datetime        |
+----------+----------+------------+---------+-------------+-----------+---------------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL      | NULL                |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211215 | 周一     ||      17 | 13511111111 | 223233    | NULL                |
| 20211216 | 周二     ||      28 | 13511111112 | 293992    | NULL                |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293   | NULL                |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291   | NULL                |
| 20211219 | 周五     ||      20 | 13562738283 | 222999333 | 2021-12-17 11:01:51 |
| 20211220 | 周六     ||      20 | 13562738284 | 222999334 | 2021-12-17 11:05:42 |
| 20211221 | 周小     ||      18 | 13563764832 | 2112233   | 2021-12-17 14:31:53 |
| 20211222 | 李小小   ||      18 | 13563764833 | 2112233   | 2021-12-17 14:34:59 |
| 20211223 | Tom      ||      18 | 13563764834 | 2112223   | 2021-12-17 15:47:45 |
+----------+----------+------------+---------+-------------+-----------+---------------------+
12 rows in set (0.00 sec)mysql> select stu_num,stu_name, substring(stu_tel,8,4) as 手机号后四位 from students;
+----------+----------+--------------+
| stu_num  | stu_name | 手机号后四位 |
+----------+----------+--------------+
| 20211212 | 小黑     | 9998         |
| 20211213 | 小黑     | 9998         |
| 20211214 | 小黑     | 9998         |
| 20211215 | 周一     | 1111         |
| 20211216 | 周二     | 1112         |
| 20211217 | 刘备     | 0000         |
| 20211218 | 刘依     | 0001         |
| 20211219 | 周五     | 8283         |
| 20211220 | 周六     | 8284         |
| 20211221 | 周小     | 4832         |
| 20211222 | 李小小   | 4833         |
| 20211223 | Tom      | 4834         |
+----------+----------+--------------+
12 rows in set (0.00 sec)

1.9 分组查询 group by…having

语法
select 分组字段/聚合函数 from 表名 [where 条件] group by 分组列名 [having 条件]

  • select 后使用 * 显示对查询结果进行分组之后,显示每组的第一条数据(无意义)
  • select 后通常显示分组字段和聚合函数
  • 语句执行顺序:先where从数据表查询记录,在group by对查询记录进行分组,然后执行having对分组后的数据进行筛选。
在students表中,查询性别为“女”的学生,按年龄进行分组,然后分别统计每组的人数,在筛选当前组人数 > 1 的组,在按照年龄升序进行显示。
mysql> select * from students;
+----------+----------+------------+---------+-------------+-----------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq    | stu_datetime        |
+----------+----------+------------+---------+-------------+-----------+---------------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL      | NULL                |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211215 | 周一     ||      17 | 13511111111 | 223233    | NULL                |
| 20211216 | 周二     ||      28 | 13511111112 | 293992    | NULL                |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293   | NULL                |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291   | NULL                |
| 20211219 | 周五     ||      20 | 13562738283 | 222999333 | 2021-12-17 11:01:51 |
| 20211220 | 周六     ||      20 | 13562738284 | 222999334 | 2021-12-17 11:05:42 |
| 20211221 | 周小     ||      18 | 13563764832 | 2112233   | 2021-12-17 14:31:53 |
| 20211222 | 李小小   ||      18 | 13563764833 | 2112233   | 2021-12-17 14:34:59 |mysql> select stu_age,count(stu_num) 
from students 
where stu_gender = '女' 
group by stu_age 
having count(stu_num) > 1 
order by stu_age asc;
+---------+----------------+
| stu_age | count(stu_num) |
+---------+----------------+
|      18 |              2 |
|      20 |              2 |
+---------+----------------+
2 rows in set (0.00 sec)

1.10 分页查询limit

语法:select * from 表名 where条件 limit (m,n)

  • limit(m,n):从第m条数据显示查询,显示n条,m从0开始计算
### students共有12条数据,
mysql> select * from students;
+----------+----------+------------+---------+-------------+-----------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq    | stu_datetime        |
+----------+----------+------------+---------+-------------+-----------+---------------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL      | NULL                |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456    | NULL                |
| 20211215 | 周一     ||      17 | 13511111111 | 223233    | NULL                |
| 20211216 | 周二     ||      28 | 13511111112 | 293992    | NULL                |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293   | NULL                |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291   | NULL                |
| 20211219 | 周五     ||      20 | 13562738283 | 222999333 | 2021-12-17 11:01:51 |
| 20211220 | 周六     ||      20 | 13562738284 | 222999334 | 2021-12-17 11:05:42 |
| 20211221 | 周小     ||      18 | 13563764832 | 2112233   | 2021-12-17 14:31:53 |
| 20211222 | 李小小   ||      18 | 13563764833 | 2112233   | 2021-12-17 14:34:59 |
| 20211223 | Tom      ||      18 | 13563764834 | 2112223   | 2021-12-17 15:47:45 |
+----------+----------+------------+---------+-------------+-----------+---------------------+
12 rows in set (0.00 sec)mysql> select * from students limit 3,4;
+----------+----------+------------+---------+-------------+---------+--------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq  | stu_datetime |
+----------+----------+------------+---------+-------------+---------+--------------+
| 20211215 | 周一     ||      17 | 13511111111 | 223233  | NULL         |
| 20211216 | 周二     ||      28 | 13511111112 | 293992  | NULL         |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293 | NULL         |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291 | NULL         |
+----------+----------+------------+---------+-------------+---------+--------------+
4 rows in set (0.00 sec)mysql> select * from students limit 3;
+----------+----------+------------+---------+-------------+--------+--------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq | stu_datetime |
+----------+----------+------------+---------+-------------+--------+--------------+
| 20211212 | 小黑     | NULL       |    NULL | 13999999998 | NULL   | NULL         |
| 20211213 | 小黑     ||      25 | 13999999998 | 123456 | NULL         |
| 20211214 | 小黑     ||      25 | 13999999998 | 123456 | NULL         |
+----------+----------+------------+---------+-------------+--------+--------------+
3 rows in set (0.00 sec)mysql> select * from students limit 3,5;
+----------+----------+------------+---------+-------------+-----------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq    | stu_datetime        |
+----------+----------+------------+---------+-------------+-----------+---------------------+
| 20211215 | 周一     ||      17 | 13511111111 | 223233    | NULL                |
| 20211216 | 周二     ||      28 | 13511111112 | 293992    | NULL                |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293   | NULL                |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291   | NULL                |
| 20211219 | 周五     ||      20 | 13562738283 | 222999333 | 2021-12-17 11:01:51 |
+----------+----------+------------+---------+-------------+-----------+---------------------+
5 rows in set (0.00 sec)mysql> select * from students limit 3,6;
+----------+----------+------------+---------+-------------+-----------+---------------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq    | stu_datetime        |
+----------+----------+------------+---------+-------------+-----------+---------------------+
| 20211215 | 周一     ||      17 | 13511111111 | 223233    | NULL                |
| 20211216 | 周二     ||      28 | 13511111112 | 293992    | NULL                |
| 20211217 | 刘备     ||      30 | 13000000000 | 0930293   | NULL                |
| 20211218 | 刘依     ||      16 | 13000000001 | 0930291   | NULL                |
| 20211219 | 周五     ||      20 | 13562738283 | 222999333 | 2021-12-17 11:01:51 |
| 20211220 | 周六     ||      20 | 13562738284 | 222999334 | 2021-12-17 11:05:42 |
+----------+----------+------------+---------+-------------+-----------+---------------------+
6 rows in set (0.00 sec)mysql> select * from students limit 3,1;
+----------+----------+------------+---------+-------------+--------+--------------+
| stu_num  | stu_name | stu_gender | stu_age | stu_tel     | stu_qq | stu_datetime |
+----------+----------+------------+---------+-------------+--------+--------------+
| 20211215 | 周一     ||      17 | 13511111111 | 223233 | NULL         |
+----------+----------+------------+---------+-------------+--------+--------------+
1 row in set (0.00 sec)

2. 多表联查

2.1 数据准备

创建学生表students,班级表classs

#学生表
create table students(stu_num char(8) primary key ,stu_name varchar(20) not null,stu_sex char(2) not null,stu_age int not null,stu_id int,CONSTRAINT FK_Students_Class foreign key(stu_id) references class(class_id)
);
# 班级表
create table class(
class_id  int primary key auto_increment,
class_name varchar(30)  unique not null,
class_remark varchar(200)
);

插入数据

#学生表插入数据
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210001','张三','男',18,1);
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210002','李四','女',26,1);
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210003','王五','女',16,1);
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210004','佳佳','女',18,2);
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210005','依依','男',18,2);
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210006','冰冰','女',22,2);
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210007','钉钉','女',30,3);
insert into students (stu_num,stu_name,stu_sex,stu_age,stu_id) values('20210008','小黑','男',35,null);#班级表插入数据
insert into class (class_id,class_name,class_remark) values(1,'java','东风校区3号楼210');
insert into class (class_id,class_name,class_remark) values(2,'python','东风校区3号楼310');
insert into class (class_id,class_name,class_remark) values(3,'C语言','东风校区3号楼410');
insert into class (class_id,class_name,class_remark) values(4,'PHP','东风校区3号楼510');
select * from students;
+----------+----------+---------+---------+--------+
| stu_num  | stu_name | stu_sex | stu_age | stu_id |
+----------+----------+---------+---------+--------+
| 20210001 | 张三     ||      18 |      1 |
| 20210002 | 李四     ||      26 |      1 |
| 20210003 | 王五     ||      16 |      1 |
| 20210004 | 佳佳     ||      18 |      2 |
| 20210005 | 依依     ||      18 |      2 |
| 20210006 | 冰冰     ||      22 |      2 |
| 20210007 | 钉钉     ||      30 |      3 |
| 20210008 | 小黑     ||      35 |   NULL |
+----------+----------+---------+---------+--------+
select * from class;
+----------+------------+------------------+
| class_id | class_name | class_remark     |
+----------+------------+------------------+
|        1 | java       | 东风校区3号楼210 |
|        2 | python     | 东风校区3号楼310 |
|        3 | C语言      | 东风校区3号楼410 |
|        4 | PHP        | 东风校区3号楼510 |
+----------+------------+------------------+

2.2 内连接 inner join

SELECT * from  students  inner join class on stu_id = class_id;
+----------+----------+---------+---------+--------+----------+------------+------------------+
| stu_num  | stu_name | stu_sex | stu_age | stu_id | class_id | class_name | class_remark     |
+----------+----------+---------+---------+--------+----------+------------+------------------+
| 20210001 | 张三     ||      18 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210002 | 李四     ||      26 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210003 | 王五     ||      16 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210004 | 佳佳     ||      18 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210005 | 依依     ||      18 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210006 | 冰冰     ||      22 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210007 | 钉钉     ||      30 |      3 |        3 | C语言      | 东风校区3号楼410 |
+----------+----------+---------+---------+--------+----------+------------+------------------+

2.3 左链接 left join

SELECT * from  students  left join class on stu_id = class_id;
+----------+----------+---------+---------+--------+----------+------------+------------------+
| stu_num  | stu_name | stu_sex | stu_age | stu_id | class_id | class_name | class_remark     |
+----------+----------+---------+---------+--------+----------+------------+------------------+
| 20210001 | 张三     ||      18 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210002 | 李四     ||      26 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210003 | 王五     ||      16 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210004 | 佳佳     ||      18 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210005 | 依依     ||      18 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210006 | 冰冰     ||      22 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210007 | 钉钉     ||      30 |      3 |        3 | C语言      | 东风校区3号楼410 |
| 20210008 | 小黑     ||      35 |   NULL |     NULL | NULL       | NULL             |
+----------+----------+---------+---------+--------+----------+------------+------------------+

2.4 右链接 right join

SELECT * from  students  right join class on stu_id = class_id;
+----------+----------+---------+---------+--------+----------+------------+------------------+
| stu_num  | stu_name | stu_sex | stu_age | stu_id | class_id | class_name | class_remark     |
+----------+----------+---------+---------+--------+----------+------------+------------------+
| 20210001 | 张三     ||      18 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210002 | 李四     ||      26 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210003 | 王五     ||      16 |      1 |        1 | java       | 东风校区3号楼210 |
| 20210004 | 佳佳     ||      18 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210005 | 依依     ||      18 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210006 | 冰冰     ||      22 |      2 |        2 | python     | 东风校区3号楼310 |
| 20210007 | 钉钉     ||      30 |      3 |        3 | C语言      | 东风校区3号楼410 |
| NULL     | NULL     | NULL    |    NULL |   NULL |        4 | PHP        | 东风校区3号楼510 |
+----------+----------+---------+---------+--------+----------+------------+------------------+

2.5 子查询

select * from students where stu_id in (select class_id from class where class_name = 'java');
+----------+----------+---------+---------+--------+
| stu_num  | stu_name | stu_sex | stu_age | stu_id |
+----------+----------+---------+---------+--------+
| 20210001 | 张三     ||      18 |      1 |
| 20210002 | 李四     ||      26 |      1 |
| 20210003 | 王五     ||      16 |      1 |
+----------+----------+---------+---------+--------+


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部