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

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

注: 所谓连接, 指的是把两张表的字段“连接”起来, 放在一个结果集里,即连接的是两张表的字段!

 

有三张表,person_info学生信息;class_schedule选课信息;class_size班级人数。

如下:

image

 

 

格式:

SELECT table_name1.field1 table_name2.field1 … FROM table_name1 JOIN_TYPE table_name2 ON 连接条件

 

一、内部连接。(只输出相同字段中的匹配记录)

意义:只有两个表相匹配的行才能在结果集中出现 。

问题:对person_info和class_size表,内连接查找学生姓名对应的班级人数。

分析:zhangsan是个奇葩,TA不属于任何班级,即表class_size里没有行和TA匹配,因此zhangsan这一行是不会出现在结果集里的;同理class_size里的class 3班也没有学生与之匹配,因此可以预见结果集里有两行lisi和wangwu.

这里的内连接即,先找到person_info和class_size表中相同的字段class,再输出字段class中相匹配的1和2,如下图:

 

解答:

INNER JOIN:

当然,where也可实现上面的结果:

小技巧,若表名多次被用到,可以使用别名简化:

 

 

二、左外连接。

意义:左表全部输出,然后输出右表与左表想匹配的行。

问题:查找person_info表中学生所在班级的人数,虽然zhangsan不属于任何班级,也要输出

TA。

解答:

 

 

三、右外连接。

意义:右表全部输出,然后输出左表与右表想匹配的行。

问题:输出class_size的班级人数,以及1,2,3个班级的学生姓名。

解答:

 

完全外连接FULL OUTER JOIN。

 

 

四、自连接。

是一张表!把一个表的某一行与同一表中的另一行连接起来。

如我们想在person_info表中找出和zhangsan相同gender的学生。

当然可以用子查询复合语句完成,如下:

也可用自连接(相比子查询更高效)完成,如下:

 

 

五、自然连接。

有时候连接查询会出现重复的列,如上面的内部连接改为下面就会出现重复的列:

 

如何消除重复的列呢,没什么高招,只有手动消除了(一般是对一张表使用通配符,其他表的列使用明确的子集),改为下面的语句就行了:

转载于:https://www.cnblogs.com/helloweworld/p/3351692.html

你可能感兴趣的文章
ext4.0 代理 的使用
查看>>
数据检查约束类型和语法
查看>>
AngularJS实战之路由ui-view
查看>>
使用jQuery+huandlebars防止编码注入攻击
查看>>
C#的托管与非托管大难点
查看>>
[转]HTTPS简谈
查看>>
(图片)jsp上传图片,进行缩放处理
查看>>
集合类List,set,Map 的遍历方法,用法和区别
查看>>
HDU-2577-How to Type
查看>>
java日志框架之logback——布局详细说明书地址
查看>>
Java Selenium (十二) 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素...
查看>>
Scala入门系列(十):函数式编程之集合操作
查看>>
pulseaudio的交叉编译
查看>>
win7 环境安装Python + IDE(vs2010)开发
查看>>
(Problem 7)10001st prime
查看>>
Cracking The Coding Interview 1.1
查看>>
mysql安装linux_二进制包安装
查看>>
POJ 3280 Cheapest Palindrome
查看>>
Python学习笔记之Python的多重继承和MixIn
查看>>
POJ 2481-Cows(BIT)
查看>>