二 MySQL 关系型数据库

7.12子查询    'WHERE 条件(子查询结果)'   先执行括号里边的

----------------------------查询工资大于Bruce的人------------------------
#1 查询bruce工资

SELECT salary FROM t_employees WHERE FIRST_NAME = 'Bruce'

#2 查询工资大于6000的

SELECT * FROM t_employees WHERE salary > 6000;

----------------------------如何整合?---------------------------------------------

SELECT * FROM t_employees 

WHERE salary > (SELECT salary FROM t_employees WHERE FIRST_NAME = 'Bruce')

7.12子查询  枚举查询   

 # 查询与king同一部门员工

将子查询”多行一列“的结果作为外部查询的枚举查询条件,做第二次查询

#工资高于60部门所有人信息     ALL     ANY

当子查询结果集形式为多行单列时可以使用ANY或ALL关键字

7.13 子查询 (作为一张表)

SELECT 列名 FROM (子查询的结果集) WHERE 条件;

# 查询工资排名前5的员工信息

# 1 先对所有员工的薪资进行排序(排序后的临时表)

SELECT employee_id,first_name,salary FROM t_employees ORDER BY salary DESC;

# 2 查询临时表中前5行员工

SELECT employee_id,first_name,salary FROM (临时表) 

#3 整合

SELECT employee_id,first_name,salary 

FROM (SELECT employee_id,first_name,salary FROM t_employees ORDER BY salary DESC) AS temp

LIMIT 0,5;

将子查询”多行多列“的结果作为外部查询的一张表,做第二次查询。

注意:子查询作为临时表,为其赋予一个临时表名

7.14 合并查询

SELECT * FROM 表名1 UNION SELECT * FROM 表名2

#注意: 合并结果的俩张表, 列数必须相同, 列的数据类型可以不同   纵向结果合并  (去除重复记录),且查询结果以表名1为主

SELECT * FROM 表名1 UNION ALL SELECT * FROM 表名2

#不会去除重复记录

7.15  表连接查询

SELECT 列名 FROM 表1 连接方式 表2 oN 连接条件

内连接查询(INNER JOIN ON)

1   SQL标准 :        # 查询所有有部门的员工信息(不包括没有部门的员工)

SELECT * FROM t_employees

INNER JOIN t_jobs    

ON t_employees.'JOB_ID' = t_jobs.'JOB_ID' ;

如果不指定连接条件(on),则会造成笛卡尔积的结果

2   MYSQL特有的写法: SELECT * FROM t_employees,t_jobs WHERE t_employees.J0B_ID=t. jobs.J0B_ID

三表连接查询

#查询所有员工工号、名字、部门名称、部门所在国家ID

 SELECT * FROM t_employees e

INNER JOIN t_departments d 

on e.department_id = d.department_id 

INNER J0IN t_locations l 

ON d.location_id = l.location_id    

左外连接(LEFT JOIN ON)

# 查询所有员工信息,以及所对应的部门名称(没有部门的员工,也在查询结果中,部门名称以null填充)

SELECT EMPLOYEE_ID, first_name, salary, DEPARTMENT_NAME  FROM  t_employees 

LEFT JOIN t_departments 

ON t_departments. 'DEPARTMENT_ID' = t_employees. 'DEPARTMENT_ID';

注:  左外连接,以左表为主表,依次向右匹配,匹配到,返回结果;匹配不到,则以null值填充

右外连接(RIGHTJOIN ON)

# 查询所有部门信息,以及该部门的员工信息(没有员工的部门,也在查询结果中,员工信息以null填充)

SELECT EMPLOYEE_ID, first_name, salary, DEPARTMENT_NAME FROM t_employees 

RIGHTJOIN t_departments

ON t_departments. 'DEPARTMENT_ID' = t_employees. 'DEPARTMENT_ID';

注:  右外连接,以右表为主表,依次向左匹配,匹配到,返回结果;匹配不到,则以null值填充

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。