1.交叉连接查询
1)交叉连接查询返回被连接的两个表所有数据行的笛卡尔积
2)笛卡尔积可以理解为一张表的每一行与另一张表的任意一行进行匹配
3)加入A表有m行数据,B表有n行数据,则返回m*n行数据
4)笛卡尔积会产生很多冗余的数据,后期的其他查询可以在该集合的基础上进行筛选
--交叉连接查询
select * from 表1,表2,表3...
2.内连接查询
--隐式内连接(SQL92标准):
select * from A,B where 条件;
--显示内连接(SQL99标准):
select * from A inner join B on 条件;
--查询每个部门的所属员工
select * from dept,employees where dept.id = employees.dept_id;
select * from dept inner join employees on dept.id = employees.dept_id;
3.外连接查询
外连接分为:左外连接(left outer join)、右外连接(right outer join)、满外连接(full outer join)
--左外连接:left outer join
select * from 表1 left outer join 表2 on 条件;
--右外连接:right outer join
select * from 表1 left outer join 表2 on 条件;
--满外连接:full outer join
select * from 表1 full outer join 表2 on 条件; --实际在mysql运行出现语法错误
--将左右外连接,连起来,取并集
--union是将两个查询结果上下拼接,并去重
--union all将两个查询结果上下拼接,不去重
select * from 表1 left outer join 表2 on 条件
union
select * from 表1 left outer join 表2 on 条件;
4.子查询
子查询可以返回的数据类型一共分为四种:
1)单行单列:返回的是一个具体列的内容,可以理解为一个单值数据
2)单行多列:返回一行数据中多个列的内容
3)多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;
4)多行多列:查询返回的结果是一张临时表