首页 > 数据库 >MySQL--多表查询--2022年9月30日

MySQL--多表查询--2022年9月30日

时间:2022-10-07 11:12:50浏览次数:98  
标签:salary 多表 -- 30 查询 SELECT where select emp

第一节    多表关系

  1、一对多

    

  2、多对多

    

  3、一对一

    

第二节   多表查询概述

  1、笛卡尔积:select * from A,B;

    

  2、多表查询分类

    

第三节   内连接

  1、内连接的结果集

    

  2、语法

    隐式内连接:SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ; 

    显式内连接:SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ; 

第四节   外连接

  1、语法

    A、左外连接:SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ; 【查询左表所有信息,也包括左右表交集信息】

    B、右外连接:SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ; 【查询右表所有信息,也包括左右表交集信息】

第五节   自连接【自己连接自己】

  1、语法:SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ; 【可以是内连接,也可以是外连接】

  2、注意事项:在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字段。

  3、联合查询【union】语法:就是把多次查询的结果合并起来,形成一个新的查询结果集

SELECT 字段列表 FROM 表A ...
UNION [ ALL ]
SELECT 字段列表 FROM 表B ....;

  4、联合查询的注意点

    对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

    union all 会将全部的数据直接合并在一起,union会对合并之后的数据去重。

第六节   子查询

  1、概念

    A、SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

    B、语法:SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );【子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个】

    C、分类

      

  2、标量子查询

    A、标量子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。

    B、常用的操作符:= <> > >= < <=

    C、查询员工表中所有销售部的员工:select * from emp where dept_id = (select id from dept where name = '销售部');

  3、列子查询

    A、列子查询返回的结果是一列(可以是多行),这种子查询称为列子查询

    B、常用操作符:IN、NOT IN、ANY、SOME、ALL

      

 

    C、查询比财务部所有人工资都高的员工信息:

select * from emp where salary > all ( select salary from emp where dept_id =(select id from dept where name = '财务部') );

  4、行子查询

    A、子查询返回的结果是一行(可以是多列),这种子查询称为行子查询

    B、常用的操作符:=、<>、IN、NOT IN

    C、查询与“张无忌”的薪资及直属领导相同的员工信息

select * from emp where (salary,managerid) = (select salary, managerid from emp where name = '张无忌');
select * from emp where salary = 2000 and managerid = 1  等价于  select * from emp where (salary,managerid) = (2000,1);

  5、表子查询

    A、子查询返回的结果是多行多列,这种子查询称为表子查询

    B、常用的操作符:IN

    C、查询与“鹿杖客”,“宋远桥”的职位和薪资相同的员工信息

select * from emp where (job,salary) in ( select job, salary from emp where name ='鹿杖客' or name = '宋远桥' );

    D、查询入职日期是“2006-01-01”之后的员工信息,及其部门信息

select e.*, d.* from (select * from emp where entrydate > '2006-01-01') e left join dept d on e.dept_id = d.id ;

第七节   总结

  

标签:salary,多表,--,30,查询,SELECT,where,select,emp
From: https://www.cnblogs.com/Flower--Dance/p/16743692.html

相关文章