SQL_4_多表查询
多表查询:从多个表中获取数据呈现到结果集中。
1、内连接
SQL86 语法:
select 要投影的列 from 表1,表2..... where 连接条件
SQL99 语法:
select 要投影的列 from 左表 inner join 右边 on 连接条件 where 筛选条件
等值连接:
使用等号作为连接条件的连接。
非等值连接:
不使用等号作为连接条件。
自联结:
连接自身。
交叉连接(SQL99):
取两个表的笛卡尔积 。
from 左表 cross join 右表
自然连接(SQL99):
把两个表相同名字的列的值是否相等 作为连接条件。支持多个列名相等。但是若值的类型不同,会执行失败。(类似于等值连接)
from 左表 natural join 右表
using子句:
使用指定的列作为连接条件,它作为自然连接的限制。引用被using指定的列时,不要使用表名或者别名。
from 左表 join 右表 using(列名1,列名2...) 这里实际上是自然连接,但是natural和using不能同时出现。 from 左表 inner join 右表 using(列名1,列名2...)
2、外连接
- 左外连接:结果集包含左表中不符合连接条件的行。
- 右外连接:结果集包含右表中不符合连接条件的行。
- 全外连接:结果集中包含左右表中不符合连接条件的行。
SQL92语法:
等值连接的时候,在左表的值旁边加上标识:(+),则表示不显示左表的不满足条件的列,即结果集为右外连接。
select 要投影的列 from 左表,右表 where 左表的值 (+) = 右表的值
注意:MySQL不支持。
SQL99 语法:
左外连接:from 左表 left outer join 右表 on 连接条件 右外连接:from 左表 right outer join 右表 on 连接条件 全外连接:from 左表 full outer join 右表 on 连接条件 (MySQL不支持)
3、子查询
当一个查询的结果是另一个查询的条件时,称为子查询语句。SQL_6_子查询