笛卡尔积:有A,B两个集合,取A,B集合的所有组合情况
多表查询:从多张表中查询数据
连接查询:
内连接:相当于查询A B交集数据
外连接:左外连接:相当于查询A(左)表所有数据和交际部分数据 右外连接相当于查询B(右)表所有数据和交际部分数据
(此交际部分有A的内容,也有B的内容,左外连接和右外连接不能看作左表或右表)
(左外连接相当于左表全部内容加上右表关联的内容,如果左表有内容不关联右表,显示左表内容,右表内容显示null)
子查询
以下案例首字母为d且其中无_的为一个表中的字段,emp.dep_id = dept.did为外键约束所关联的主键:
内连接:
隐式内连接:SELECT 字段列表 FROM 表1,表2... WHERE 条件
select t1.name,t1.gender,t2.dname from emp as t1,dept as t2 where t1.dep_id = t2.did;
显式内连接:SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 条件
select emp.name,emp.gender,dept.dname from emp inner join dept on emp.dep_id = dept.did;
左外连接:SELECT 字段列表 FROM 表1 LEFT[OUTER] JOIN 表2 ON 条件
select
emp.name,emp.gender,dept.dname
from
emp left join dept on emp.dep_id = dept.did;
(left:emp表全部展示)
右外连接:SELECT 字段列表 FROM 表1 RIGHT[OUTER] JOIN 表2 ON 条件
select
emp.name,emp.gender,dept.dname
from
emp right join dept on emp.dep_id = dept.did;(right:dept表全部展示)
相当于
select
emp.name,emp.gender,dept.dname
from
dept left join emp on emp.dep_id = dept.did;
但是左右表表格会产生变化
子查询:
单行单列:作为条件值,用=!=><等判断
SELECT 字段列表 FROM 表 WHERE 字段名 > (子查询);
select name,salary from emp where salary > (select salary from emp where name = '小李子');
多行单列:作为条件值,用in等关键字判断
SELECT 字段列表 FROM 表 WHERE 字段名 IN (子查询);
select name,salary from emp where dep_id in (select did from dept where dname = '电器' or dname = '餐饮');
单行多列:作为虚拟表
SELECT 字段列表 FROM (子查询) WHERE 条件;
select name,salary,did from (select name,salary from where join_date > '2010-10-14') as t1,dept where t1.dep_id = dept.did;
(将表要求的条件先筛选出来,然后与另外的表进行内连接)
网友评论