数据库--内连接、外连接、自连接

语法:
内连接 [x inner join y on...]
右外连接 [x right outer join y on...]
左外连接 [x left outer join y on...]
全外连接 [x full outer join y on...]
交叉连接 [x cross join y on...]
自连接代表连接的表是同一个表,同样可使用内外连接等组合。

表1:teacher
+----+--------+
| id | name |
+----+--------+
| 1 | 刘德华 |
| 2 | 张学友 |
| 4 | 黎明 |
+----+--------+
表2:student
+----+------+--------+
| id | name | tea_id |
+----+------+--------+
| 1 | 张三 | 1 |
| 2 | 李四 | 1 |
| 3 | 王五 | 1 |
| 4 | 赵六 | 2 |
| 5 | 孙七 | 2 |
+----+------+--------+

1.内连接:在每个表中找出符合条件的共有记录。[x inner join y on...]
select t.,s. from teacher t inner join student s on t.id=s.tea_id;

+----+--------+----+------+--------+
| id | name | id | name | tea_id |
+----+--------+----+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
+----+--------+----+------+--------+

2.外连接有三种方式:左连接,右连接和全连接。
2.1 左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配找不到与左表匹配的,用null表示。[x left [outer] join y on...]
select t.,s. from teacher t left outer join student s on t.id=s.tea_id;
+----+--------+------+------+--------+
| id | name | id | name | tea_id |
+----+--------+------+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
| 4 | 黎明 | NULL | NULL | NULL |
+----+--------+------+------+--------+

2.2 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,
select t.,s. from teacher t right outer join student s on t.id=s.tea_id;

+------+--------+----+------+--------+
| id | name | id | name | tea_id |
+------+--------+----+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
+------+--------+----+------+--------+

2.3 全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)
select t.,s. from teacher t full outer join student s on t.id=s.tea_id;

3 交叉连接(结果是笛卡尔积)
select t.,s. from teacher t cross join student s;

+----+--------+----+------+--------+
| id | name | id | name | tea_id |
+----+--------+----+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 2 | 张学友 | 1 | 张三 | 1 |
| 4 | 黎明 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 2 | 张学友 | 2 | 李四 | 1 |
| 4 | 黎明 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 3 | 王五 | 1 |
| 4 | 黎明 | 3 | 王五 | 1 |
| 1 | 刘德华 | 4 | 赵六 | 2 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 4 | 黎明 | 4 | 赵六 | 2 |
| 1 | 刘德华 | 5 | 孙七 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
| 4 | 黎明 | 5 | 孙七 | 2 |
+----+--------+----+------+--------+

4自连接:连接的表都是同一个表,同样可以由内连接,外连接各种组合方式,按实际应用去组合。
SELECT a.,b. FROM table_1 a,table_1 b WHERE a.[name]=b.[name] --连接的两表是同一个表,别称不一样

SELECT a.,b. FROM table_1 a LEFT JOIN table_1 b ON a.[name]=b.[name] --左连接写法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,721评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 9,307评论 0 11
  • (一)Oracle数据库 1.oracle中row_id理解 ORACLE的row_id是一个伪列,其个是为18个...
    独云阅读 10,964评论 0 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • 今天早晨起的蛮早,6:50,wh和yyc把我叫起来。主席也和我同时起来了。定的时间是7:30在二食堂广场集合,把收...
    谜一样的未来家阅读 3,596评论 0 1

友情链接更多精彩内容