MySQL的连接查询
- 内连接
- 外连接
- 交叉连接
内连接
内连接使用比较运算符进行表之间的某些列数据的比较操作,并列出这些表中连接相匹配的数据行。根据所使用的比较的方式不同,内连接又分为等值连接,自然连接,和不等值连接三种。
【等值连接】
在连接条件中使用等于号(=)运算符比较被连接列的列值,其中查询结果中列出被连接表中所有的列,包括其中的重复列。
select * from studio inner join class on studio.cl_id = class.cl_id
等值连接.png
【自然连接】
有选择的显示列
select st_id as '编号',st_name as '学生姓名',cl_class as '班级名称'
from studio inner join class
on studio.cl_id = class.cl_id
order by st_id
-- 有选择的列进行显示
+------+----------+----------+
| 编号 | 学生姓名 | 班级名称 |
+------+----------+----------+
| 2 | 林黛玉 | 百杰二班 |
| 3 | 陆小凤 | 千星一班 |
| 4 | 西门吹水 | 千星二班 |
| 5 | 刘小琴 | 百杰一班 |
| 6 | 黄平 | 百杰二班 |
| 9 | 陈小春 | 百杰一班 |
+------+----------+----------+
6 rows in set (0.00 sec)
【连接多个表进行查询】
对于添加多个表的时候需要注意的是只要使用 inner join 表名 on(匹配条件即可)
SELECT
st_id AS '编号',
st_name AS '学生姓名',
cl_class AS '班级名称',
ho_coding AS '宿舍编号'
FROM
studio
INNER JOIN class ON studio.cl_id = class.cl_id
INNER JOIN hostel ON studio.ho_id = hostel.ho_id
多表联查.png
外连接
内连接: 返回结果查询集合中符合查询条件和连接条件的行。
外连接: 不仅仅包含符合条件的行,而且还包括左表(左外连接时Left outer join或者Left join)、右表(右外连接Right outer join或者Right join)、和完全连接(Full outer join 或Full join)MySQL中不支持全连接可以使用联合查询左连接右连接实现。
总结: 外连接不只列出与连接条件相匹配的行,而且列出左表,右表,或两个表所有符合的数据行
- 左外连接
以左表为主,显示出主表中所有的数据行,如果右边从表中没有之匹配的数据则显示NULL.
select st.st_id as '学生编号', st.st_name as '学生姓名',
cl.cl_id as '班级编号',cl.cl_class as '班级名称'
from studio as st left outer join class as cl
on st.cl_id=cl.cl_id
左外连接.png
- 右外连接
右外连接和左外连接对应,以右边为主表,左边为从表,其他一样
select st.st_id as '学生编号', st.st_name as '学生姓名',
cl.cl_id as '班级编号',cl_class as '班级名称'
from studio as st right outer join class as cl
on st.cl_id=cl.cl_id
右外连接.png
自连接
对于自连接其实笼统的说就是连接关键字的两边都是同一个表
select a.z_zone,b.z_zone
from zone as a inner join zone as b
on a.z_id=b.id
group by b.z_zone
-- 输出结果
+--------+--------+
| z_zone | z_zone |
+--------+--------+
| 成都 | 四川 |
| 绵阳 | 四川 |
| 北京 | 北京 |
| 南京 | 江苏 |
| 苏州 | 江苏 |
| 常州 | 江苏 |
+--------+--------+
---
+------+--------+
| 地名 | 辖区数 |
+------+--------+
| 北京 | 1 |
| 四川 | 2 |
| 江苏 | 3 |
+------+--------+
网友评论