您当前的位置: 首页 >  sql

Charge8

暂无认证

  • 2浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL子查询

Charge8 发布时间:2018-11-29 10:52:24 ,浏览量:2

子查询:指在一个select语句中嵌套另一个select语句,支持多层嵌套。

被包裹的select语句:称子查询或内查询 包裹子查询的外部查询语句:称主查询语句

子查询分类

1、通过位置来分:      select 后面:仅仅支持标量子查询      from 后面:支持表子查询      where 或having 后面:支持标量子查询(重要)\列子查询(重要)\行子查询(用的较少)      exists 后面(相关查询):支持表子查询(用的较少)

2、按结果集的行列数不同分类:      标量子查询(结果集只有一行一列)      列子查询(结果集只有一列多行)      行子查询(结果集只有一行但有多列)      表子查询(结果集多行多列)

3、子查询特点:      子查询放在小括号内      子查询一般放在条件的右侧      标量子查询,一般搭配着单行操作符来使用(> < >= any 比子查询中返回的最小值要大, all 比子查询中返回的最大值要大, ( select salary from employees where employee_id=143);

案例:having的子查询:查询最低工资大于50号部门最低工资的部门id和其最低工资

select department_id , min(salary) 
from employees
group by 
     department_id
having 
     min(salary)>(
                 select min(salary) 
                 from employees
                 where department_id=50);

案例:查询其他工种中比job_id为'IT_PROG'的员工某一工资低的员工的员工号,姓名,job_id和salary(列子查询)

SELECT employee_id,name,job_id,salary 
FROM employees
WHERE 
    salary < ANY(
                SELECT distinct salary 
                FROM employees 
                WHERE job_id='IT_PROG') 
    and job_id'IT_PROG';

案例:查询每个部门的平均工资等级

SELECT
    avg_res.avgs,avg_res.department_id,g.grade_level
FROM 
    (SELECT AVG(salary) avgs,department_id
    FROM employees GROUP BY department_id
    ) avg_res,
    job_grades g
WHERE
   avg_res.avgs BETWEEN g.lowest_sal AND g.highest_sal;

 5、exists的作用是:判断子查询有没有结果的存在(很少使用)

     语法:             select exists(完整的子查询);   #子查询有结果返回1,没有结果返回0;

案例:查询有员工的部门名

select department_name 
from departments d
where 
    exists(
    select * 
    from employees e 
    where d.department_id=e.department_id );

 

 

 

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0393s