赞
踩
目录
上一篇:
MySQL基础(一)-MySQL的概述及数据定义语言DDL的基本操作
(3条消息) MySQL基础(二)-数据的基本操作【增删改查】_five小点心的博客-CSDN博客
在实际开发中,大部门的情况下都不是从单表中查询数据,一般都是多张表联合查询,取出最终的结果。
在实际开发中,一般一个业务会对应多张表。如:学生和班级。如果将学生和班级信息存储到一张表中数据会存在大量的重复,导致数据的冗余。
根据语法出现的时间来划分
SQL92:较老的语法
SQL99:比较新的语法
根据表的连接方式来划分,包括:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接(左连接)
右外连接(右连接)
全连接(使用较少)
案例:找出每一个学生的成绩,要求显示学生姓名和成绩。
- student表
- +--------+
- | sname |
- +--------+
- | 赵雷 |
- | 钱电 |
- | 孙风 |
- | 李云 |
- | 周梅 |
- | 吴兰 |
- | 郑竹 |
- | 王菊 |
- +--------+
- 8 rows in set (0.00 sec)
-
-
- sc成绩表
- +-------+
- | score |
- +-------+
- | 80 |
- | 90 |
- | 99 |
- | 70 |
- | 60 |
- | 80 |
- | 80 |
- | 80 |
- | 80 |
- | 50 |
- | 30 |
- | 20 |
- | 76 |
- | 87 |
- | 31 |
- | 34 |
- | 89 |
- | 98 |
- +-------+
- 18 rows in set (0.00 sec)
-
-
- select sname,score from student,sc;
- +--------+-------+
- | sname | score |
- +--------+-------+
- | 赵雷 | 80 |
- | 钱电 | 80 |
- | 孙风 | 80 |
- | 李云 | 80 |
- | 周梅 | 80 |
- | 吴兰 | 80 |
- | 郑竹 | 80 |
- | 王菊 | 80 |
- | 赵雷 | 90 |
- | 钱电 | 90 |
- | 孙风 | 90 |
- ...................
- 144 rows in set (0.00 sec)
笛卡尔积现象:当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。
关于表的别名:
select stu.sname,s.score from student stu ,sc s;
表别名的好处:
1、执行效率高
2、可读性好
需要注意的是,加条件进行限制之后,记录的匹配次数不变,仍为144次,只不过显示的是有效记录。
我们将上面的代码进行修改。
- select
- stu.sname,s.score
- from
- student stu,sc s
- where
- stu.s=s.s
- ; // SQL92语法
等值连接最大的特点是:条件是等量关系。
语法(SQL99):
- ......
- A
- join
- B
- on
- 连接条件
- where
- ......
左图为SQL92,右图为SQL99。
SQL92中,表连接和过滤的条件融合在一起,导致where后面的结构不清晰。
SQL99中,把表连接条件和过滤条件进行了分离,结构更清晰。。
非等值连接最大的特点是:连接条件中的关系是非等量关系。
- select
- e.ename,e.sal,s.grade
- from
- emp e
- (inner) join
- salgrade s
- on
- e.sal between s.losal and s.hisal;
自连接最大的特点是:一张表看做两张表。自己连接自己。
- 员工的领导编号 = 领导的员工编号
- select
- a.ename,b.ename
- from
- emp a
- inner join
- emp b
- on
- a.mgr=b.empno;
内连接:假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。
外连接:假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表。主要查询主表中的数据,捎带查询副表。当副表中的数据没有和主表中的数据匹配上,副表自动模拟出null与之匹配。
左外连接(左连接):表示左边的这张表是主表。
右外连接(右连接):表右边的这张表是主表。
- select
- e.ename,e.sal,s.grade
- from
- emp e
- left (outer) join
- salgrade s
- on
- e.sal between s.losal and s.hisal;
案例:找出每一个员工的部门名称以及工资等级
......
A
join
B
join
C
on
......
表示:A表和B表先进行表连接,连接之后A表继续和C表进行连接。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。