Mysql连接查询

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Mysql连接查询

Mysql连接查询

数据库数据准备

-- 创建部门表
CREATE TABLE dept (
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(20)
);

INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');

-- 创建员工表
CREATE TABLE emp (
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(10),
  gender CHAR(1),   -- 性别
  salary DOUBLE,   -- 工资
  join_date DATE,  -- 入职日期
  dept_id INT
);

INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);

内连接

隐式内连接

#隐式内连接
SELECT * FROM emp,dept WHERE emp.id = dept.id;

在这里插入图片描述

显式内连接

#显式内连接
SELECT * FROM emp INNER JOIN dept ON emp.id = dept.id;

在这里插入图片描述

小结

  • 内连接查询的是公共部分,满足连接条件(主外键关系)的部分
  • 用左边表的记录去匹配右边表的记录如果符合条件的则显示

外连接

左外连接

#左外连接
SELECT * FROM emp LEFT JOIN dept ON emp.id = dept.id;

在这里插入图片描述

右外连接

#右外连接
SELECT * FROM emp RIGHT JOIN dept ON emp.id = dept.id;

在这里插入图片描述

小结

  • 左外连接在内连接的基础上保证左边表的数据全部显示
  • 右外连接在内连接的基础上保证右边表的数据全部显示

子查询

什么是子查询
一个查询里面至少包含2个select

子查询结果的三种情况

子查询结果是值的情况

问题1查询工资最高的员工是谁
分解:查询最高工资

SELECT MAX(salary) FROM emp;

在这里插入图片描述

查询工资是9000的员工即查询工资最高的员工

SELECT * FROM emp WHERE salary=(SELECT MAX(salary) FROM emp);

在这里插入图片描述

子查询结果是单列多行的时候

问题1查询工资小于平均工资的员工有哪些
分解:查询平均工资

 SELECT AVG(salary) FROM emp;

在这里插入图片描述

查询工资小于平均工资的员工

SELECT * FROM emp WHERE salary < (SELECT AVG(salary) FROM emp);

在这里插入图片描述

子查询的结果是多行多列

问题1查询工资大于5000的员工来自于哪些部门的名字

分解查询工资大于5000的员工

  SELECT dept_id FROM emp WHERE salary > 5000;

根据子查询结果查询部门名字

SELECT dept.name FROM dept WHERE dept.id IN (SELECT dept_id FROM emp WHERE salary > 5000);

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql