补充知识:
笛卡尔积:(相当于就是组合的意思)
有两个集合A,B,取这两个集合的所有组成情况
要完成多表查询,需要消除无用的数据
查询语法:
select
列名列表
from
表名列表
where...
多表查询的分类
1.内连接查询
2.外连接查询
3.子查询
内连接查询
1.内连接查询:
1)隐式内连接:使用where条件消除无用的数据
样例:
查询所有员工信息和对应的部门信息:
select * from emp,dept where emp.`dept_id` = dept.`id`;
查询员工表的名称,性别,部门表的名称:
select emp.name,emp.gender,dept.name from emp,dept where emp.`dept_id` = dept.`id`;
取别名,简化查询:
select
t1.name,-- 员工表的姓名
t1.gender,-- 员工表的性别
t2.name -- 部门表的名称
from
emp t1,dept t2
where
t1.`dept_id` = t2.`id`;2)显式内连接:
语法:
select 字段列表 from 表名1[inner] join 表名2 on 条件
样例:
select * from emp inner join dept on emp.`dept_id` = dept.`id`;
或 select * from emp join dept on emp.`dept_id` = dept.`id`;
注意要明确以下内容:
从哪些表中查询数据
条件是什么
查询哪些字段
外连接查询
1.左外连接
查询的是左表所有数据以及其交集部分
语法:
select 字段列表 from 表1 left [outer] join 表2 on 条件;
查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称:
#该方法存在问题:如果没有部门,则该条数据所有信息都不显示了
select
t1.*,t2.`name`
from
emp t1,dept t2
where
t1.`dept_id` = t2.`id`;
#正确写法
select
t1.*,t2.`name`
from
emp t1 left join dept t2
on
t1.`dept_id` = t2.`id`;2.右外连接
查询的是右表所有数据以及其交集部分
语法:
select 字段列表 from 表1 right [outer] join 表2 on 条件;
select
*
from
dept t2 right join emp t1
on
t1.`dept_id` = t2.`id`;
子查询
概念:
查询中嵌套查询,称嵌套查询为子查询
样例:
-- 查询工资最高的员工信息
--1.查询最高的工资是多少
select MAX(salary) from emp;--2.查询员工信息,并且工资等于最高工资的
select * from emp where emp.`salary` =9000;-- 一步完成该操作 子查询
select * from emp where emp.`salary` =(select MAX(salary) from emp);