博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表联接
阅读量:5317 次
发布时间:2019-06-14

本文共 3041 字,大约阅读时间需要 10 分钟。

表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...]
第一种写法:(相当于多表查询,用的是where!)
select t.*,s.* from teacher t,student s where t.id=s.tea_id;
第二种写法:(inner省略了)
select t.*,s.* from teacher t join student s on t.id=s.tea_id;
第三种写法:
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 join student s on t.id=s.tea_id;
第二种写法:
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 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,
找不到匹配的,用null填充。[x right [outer] join y on...]
第一种写法:
select t.*,s.* from teacher t right join student s on t.id=s.tea_id;
第二种写法:
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 join student s on t.id=s.tea_id;
第二种写法:
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;
等效于:
select t.*,s.* from teacher t,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 |
+----+--------+----+------+--------+
5自连接:连接的表都是同一个表,同样可以由内连接,外连接各种组合
方式,按实际应用去组合。
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] --左连接写法

转载于:https://www.cnblogs.com/yaoxiaodan/p/5285723.html

你可能感兴趣的文章
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
Atitit.进程管理常用api
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
怎么在windows7系统我的电脑中添加快捷方式
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>
原生JavaScript第六篇
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
大数据学习
查看>>
简单工厂模式
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>