【十一】【SQL】外连接(左外连接,右外连接)

数据库中的外连接(Outer Join)用于连接两个表,并包括两个表中的匹配行以及左表(LEFT JOIN)或右表(RIGHT JOIN)中未匹配的行。外连接分为两种主要类型:

左外连接(LEFT OUTER JOIN):返回左表(FROM子句中第一个表)的所有行,即使在右表中没有匹配的行。如果右表中没有匹配的行,则结果集中右表的部分将包含NULL值。

右外连接(RIGHT OUTER JOIN):返回右表(JOIN子句中指定的表)的所有行,即使在左表中没有匹配的行。如果左表中没有匹配的行,则结果集中左表的部分将包含NULL值。

表的初始化

 
mysql> create table stu (id int ,name varchar(30));
Query OK, 0 rows affected (0.02 sec)

mysql> desc stu;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into stu values(1,'Jack'),(2,'Tom'),(3,'Kity'),(4,'Nono');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select*from stu;
+------+------+
| id   | name |
+------+------+
|    1 | Jack |
|    2 | Tom  |
|    3 | Kity |
|    4 | Nono |
+------+------+
4 rows in set (0.00 sec)

mysql> create table exam (id int ,grade int );
Query OK, 0 rows affected (0.02 sec)

mysql> desc exam;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| grade | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into exam values(1,56),(2,76),(11,82);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select*from exam;
+------+-------+
| id   | grade |
+------+-------+
|    1 |    56 |
|    2 |    76 |
|   11 |    82 |
+------+-------+
3 rows in set (0.00 sec)

mysql> 

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

 
mysql> select *from stu;
+------+------+
| id   | name |
+------+------+
|    1 | Jack |
|    2 | Tom  |
|    3 | Kity |
|    4 | Nono |
+------+------+
4 rows in set (0.00 sec)

mysql> select *from exam;
+------+-------+
| id   | grade |
+------+-------+
|    1 |    56 |
|    2 |    76 |
|   11 |    82 |
+------+-------+
3 rows in set (0.00 sec)

mysql> select *from stu left join exam on stu.id=exam.id;
+------+------+------+-------+
| id   | name | id   | grade |
+------+------+------+-------+
|    1 | Jack |    1 |    56 |
|    2 | Tom  |    2 |    76 |
|    3 | Kity | NULL |  NULL |
|    4 | Nono | NULL |  NULL |
+------+------+------+-------+
4 rows in set (0.00 sec)

mysql> select *from stu inner join exam on stu.id=exam.id;
+------+------+------+-------+
| id   | name | id   | grade |
+------+------+------+-------+
|    1 | Jack |    1 |    56 |
|    2 | Tom  |    2 |    76 |
+------+------+------+-------+
2 rows in set (0.00 sec)

mysql> 

左外连接(LEFT JOIN)的查询结果显示了stu表中所有的学生,包括那些在exam表中没有成绩的学生。对于没有成绩的学生(如Kity和Nono),成绩列

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妖精七七_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值