mysql SQL语句中的子查询

子查询

    create table department(
        id int primary key,
        name varchar(40)
    );

    create table employee(
        id int primary key auto_increment,
        name varchar(40),
        age int(2),
        dept_id int
    );

    INSERT INTO department values(1,'网络部');
    INSERT INTO department values(2,'媒体部');
    INSERT INTO department values(3,'研发部');
    INSERT INTO department values(5,'人事部');

    INSERT INTO employee values(null,'王红',20,1);
    INSERT INTO employee values(null,'李强',22,1);
    INSERT INTO employee values(null,'赵四',20,2);
    INSERT INTO employee values(null,'郝娟',20,4);
    
    1. 带IN关键字的子查询
       使用IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列中的值将供外层查询语句进行比较操作
       ~ 查询存在年龄为20岁的员工的部门
         select name from department where id in (select dept_id from employee where age=20);
       ~ 查询不存在年龄为20岁员工的部门
         select name from department where id not in (slect dept_id from employee where age=20);
         
    2. 带EXISTS关键字的子查询
        EXISTS关键字后面的参数可以时任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回TRUE或FALSE,当返回值为TRUE时,外层查询才会执行
        ~ 查询employee表中是否存在年龄大于21岁的员工,如果存在,则查询department表中的所有记录
           select * from department where exists (select dept_id from employee where age>21);
           
    3. 使用ANY关键字子查询
        ANY关键字表示满足其中任意一个条件,它允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询条件
        ~ 使用带any关键字的子查询,查询满足条件的部门
          select * from department where id>any(select dept_id from employee);
          
    4. 带ALL关键字的子查询
        ALL 关键字与ANY有点类似,只不过带ALL关键字的子查询返回的结果需要同时满足所有内层查询条件
        ~ 使用带all关键字的子查询,查询满足条件的部门
        select * from department where id>all(select dept_id from employee);
    
    5. 带比较运算符的子查询
        ~ 使用带比较运算符的子查询,查询赵四是那个部门的员工
        select name from department where id=(select dept_id from employee where name='赵四');
         
    
       
    
原文地址:https://www.cnblogs.com/zhuhaofeng/p/15739156.html