MySQL多表查询详解

2021-02-16  本文已影响0人  若尘___

多表查询

1. 表与表之间的关系

<1> 一对一

<2> 一对多

<3> 多对多

2. 为什么要使用多张表

3. 概念

4. 多表查询的分类

<1> 合并查询

<2> 连接查询

-- 员工表
create table emp(
    empno int primary key auto_increment,  # 员工编号
    ename varchar(32),  # 员工姓名
    job varchar(32),    # 员工职位
    mgr int,                        # 上级编号
    hiredate date,          # 入职时间
    sal double,                 # 薪资
    comm double,            # 奖金
    deptno int                  # 员工所属部门
);

-- 部门表
create table dept(
    deptno int primary key auto_increment,  # 部门编号
    dname varchar(32),  # 部门名称
    loc varchar(32)         # 部门地址
);

<3> 子查询 (ANY子查询、IN子查询、SOME子查询、ALL子查询)

ANY 关键字

假设any内部的查询返回结果个数是三个,如: result1, result2, result3, 那么
select .... from .... where a > any(....)
->
select .... from .... where a > result1 or a > result2 or a > result3

需求:
    查询工资比1号部门中任意一个员工高的员工信息
    select * from emp where sal > any(select sal from emp where deptno = 1);

ALL 关键字

SOME 关键字

some 关键字和 any 关键字是一样的功能,所以:
select .... from .... where a > any(....)
->
select .... from .... where a > result1 or a > result2 or a > result3

IN 关键字

In 运算符用于where 表达式中,以列表项的形式支持多个选择,语法如下:
    where column in (v1, v2, v3 ....);
    where column not in (v1, v2, v3 ....);
    当in 前面加上not 运算符时,表示与in 相反的意思,即不在这些列表项中选择。
    

案例:
    查询部门名称是人力部和研发部的员工
select * from emp where deptno in (select deptno from dept where dname = '人力部' or dname = '研发部');
上一篇 下一篇

猜你喜欢

热点阅读