1.多表查询分类

  1. 内连接查询
    1. 隐式内连接
    2. 显示内连接
  2. 外连接查询
    1. 左外连接查询
    2. 右外连接查询
  3. 子查询
    1. 查询中嵌套查询,称嵌套查询为子查询。

1. 查询最高工资是是多少钱
## 2. 查询出最高工资的是谁.
## 3. 合并成一条.

2. 内连接查询 - 隐式内连接

  • 使用where条件消除无用数据
  • — 查询所有员工的信息和对应部门的信息;image.png
    — 查询员工的姓名,性别和部门名称image.png

    3. 内连接查询 - 显示内连接

  • 语法格式select 字段列表 from 表名1 [inner] join 表名2 on 查询条件;

  • 内连接操作步骤
    # 1. 先确定从哪些表中查询数据
    # 2. 给定查询的条件
    # 3. 最后找出查询的字段即可;

  • 例:
    — 查询所有员工的信息和对应部门的信息;image.png
    — 查询员工的姓名,性别和部门名称image.png

    4. 外连接查询 - 左外连接查询

  • 语法格式# 1. 左外连接
    # 语法: SELECT 字段列表 FROM 表1 LEFT [outer] JOIN 表2 on 条件;
    # 查询结果是: 左边的所有数据 + 与连接表交集的部分;

— 例: 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称;image.png

5. 外连接查询 - 右外连接查询

  • 语法格式# 2. 右外连接
    # 语法: SELECT 字段列表 FROM 表1 RIGHT [outer] JOIN 表2 on 条件;
    # 查询结果是: 右边的所有数据 + 与连接表交集的部分;

查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称; image.png

6. 子查询 - 结果是单行单列

  • 子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =
  • — 查询员工工资小于平均工资的人image.png

    7. 子查询 - 结果是多行单列

  • 子查询可以作为条件,使用运算符in来判断

  • — 查询’公关部’和’市场部’所有的员工信息image.png

    8. 子查询 - 结果是多行多列

  • 子查询可以作为一张虚拟表参与查询

  • — 查询员工入职日期是2013—03-14日之后的员工信息和部门信息image.pngimage.png

    9. 示例数据准备

    SHOW TABLES;

创建部门表department
DROP TABLE IF EXISTS department;
CREATE TABLE department(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) NOT NULL
);

插入一些数据
INSERT INTO department(name) VALUES
(“市场部”), (“研发部”), (“公关部”);

创建员工表 employee
DROP TABLE IF EXISTS employee;
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) NOT NULL,
gender CHAR(1) NOT NULL, — 性别
salary DOUBLE NOT NULL, — 工资
create_date DATE, — 入职日期
dept_id INT NOT NULL, — 外键字段
FOREIGN KEY(dept_id) REFERENCES department(id) — 添加外键, 关联department表中的主键
);

添加一些数据
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘张无忌’,’男’,7200,’2013-02-24’,1);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘张三丰’,’男’,3600,’2010-12-02’,2);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘赵敏’,’女’,9000,’2008-08-08’,2);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘周芷若’,’女’,5000,’2015-10-07’,3);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘唐三’,’男’,4020,’2017-03-14’,1);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘唐舞麟’,’男’,4530,’2016-04-14’,1);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘唐舞桐’,’女’,5700,’2014-08-14’,3);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘古月’,’女’,5100,’2016-03-12’,3);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘伍六七’,’男’,6300,’2014-04-15’,2);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘云韵’,’女’,7500,’2011-03-16’,1);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘美杜莎’,’女’,2500,’2010-03-14’,2);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘孙悟空’,’男’,9500,’2020-05-14’,2);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘朱八戒’,’男’,5500,’2019-03-11’,1);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘西门吹雪’,’男’,2500,’2013-03-14’,3);
INSERT INTO employee(NAME,gender,salary,create_date,dept_id) VALUES(‘天山童姥’,’女’,4300,’2011-05-14’,1);

查看数据
SELECT * FROM employee;