MySQL中多表查询总结

在工作之后,数据库运用最多的就是查询了,多表查询有三类,分别是:内连接查询、外连接查询、子查询。下面我们一一介绍。

文章前提是:存在两张表:employees(员工表),departments(部门表);其中员工表中有外键dept_id指向部门表的主键id.

一、内连接查询

  • 写内连接查询前要考虑的问题
/*
1、从哪些表中查数据?
2、条件是什么?
3、查询哪些字段?
*/
  • 隐式内连接:使用where条件
-- 查询员工的姓名,性别,生日以及部门
select employees.last_name,employees.gender,employees.birth_date,departments.dept_name
from employees,departments 
where employees.dept_id=departments.id;
  • 显示内连接:
-- 语法:select 字段列表 from 表1 inner join 表2 on 条件
-- 示例:展示员工信息和部门信息
select * from employees 
inner join departments 
on 
employees.dept_id=departments.id limit 10

二、外连接查询

  • 左外链接
-- 语法:select 字段列表 from 表1 left (outer) join 表2 on 条件
-- 说明:查询的是左表所有数据以及其交集部分
  • 右外连接
-- 语法:select 字段列表 from 表1 right (outer) join 表2 on 条件
-- 说明:查询的是右表所有数据以及其交集部分

三、子查询

-- 概念:查询中嵌套查询,称嵌套的查询为子查询
-- 重要:
/*
(1)情况一:
子查询的结果是单行单列的
子查询可以作为条件,使用运算符去判断(>,<,>=,<=,=)

(2)情况二:
子查询的结果是多行单列的
子查询可以作为条件,使用in来判断

(3)情况三:
子查询的结果是多行多列的
子查询可以作为一张虚拟表
*/
-- 示例情况一:查询员工工资小于平均工资的人
select * from employees where employees.salary<(select avg(salary) from employees);
-- 示例情况二:查询'财务部'和'市场部'所有员工信息
select * from employees where dept_id
in
(select id from departments where name='财务部' or name='市场部')
-- 示例情况三:查询员工入职日期是2011-11-11日之后的员工信息和部门信息
select * from departments t1,
(select * from employees where employees.join_date>'2011-11-11')t2
where t1.id=t2.dept_id;

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章