多表查询
Posted wangkaia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表查询相关的知识,希望对你有一定的参考价值。
多表查询:
1 合并结果集
select *from ab
union //all
select *from cd;
使用合并结果集的条件,是结果集当中的列数和类型完全相同的时候才能够进行结果集的
合并。不带all的时候会将重复的结果去除。
2 连接查询
a 内连接
使用内连接时,产生的查询的列数为m×n,叫做笛卡尔积。
内连接的查询形式如下:(方言形式)
select *
from dept,emp
where dept.deptno=emp.deptno
使用条件来进行无用笛卡尔积的过滤,精简查询的结果。查询的过程当中使用表的
别名来精简查询语句。
内连接查询的(标准的形式)
select e.ename,e.sal,d.dname
from emp e inner join dept d
on e.deptno=d.deptno
内连接的查询的自然形式(很少使用,可读性较差)
select e.ename,e.sal,d.dname
from emp e natural join dept d
使用自然连接的话,不需要自己添加笛卡尔积的过滤条件。数据库会找到两个
表当中相同的列来进行自动的匹配和过滤。
b 外连接
外连接主要分为左外连接和右外连接两种形式,左表和右表分别作为
主表。还有一种全外连接,但是mysql不支持全外连接。可以通过合并结果
集的方式来实现全外连接的代替。
外连接可以将不满足条件的某些结果显示出来。具有一主一次的关系。
主表当中的所有记录无论是否满足条件都要打印出来,次表当中的记录全
使用null来进行填充。
查询的形式如下:
select e.name,e.sal,d.dname
from emp e left/right outer join dept d
on e.deptno=d.deptno
3 子查询
sql语句当中包含多个select关键字的查询叫做子查询。
也可以理解成为使用上一次查询的结果进行再一次的查询,
或者是在查询结果的基础上进行二次查询。对应的分别为出现
在where后作为条件,在from后作为表。
以上是关于多表查询的主要内容,如果未能解决你的问题,请参考以下文章