学习MySql第五天

本文介绍了MySQL查询的多种技巧,包括DISTINCT、GROUP BY、HAVING子句、子查询和各种连接查询。同时,详细探讨了数据库设计,特别是表结构设计中的权限管理和多对多关系实现。内容涵盖平均工资、部门人数、权限表实现等多个实际应用场景。
摘要由CSDN通过智能技术生成

复习

  • distinct: 去掉重复的列值

    - 查询emp表中所有的职位,去重
    
        select distinct job from emp;
    
    - 查询emp表部门的编号,去重
    
        select distinct deptno from emp;
    
  • GROUP BY 语句

  • HAVING 子句

    -- 查询所有分类商品所对应的库存总量中,高于1000的总量
    
        select category_id,sum(num)
        from t_item
        group by category_id
        having sum(num)>1000;
    
    -- 查询所有分类商品所对应的平均单价中,低于100的均价
    
        select category_id,avg(price)
        from t_item
        group by category_id
        having avg(price)<100;
    
    -- 查询编号238和编号917分类商品的平均单价
    
        select category_id ,avg(price)
        from t_item
        group by category_id
        having category_id in(238,917);
    

having子句中经常跟聚合函数经常使用,如果没有使用到聚合函数,就要注意是否可以写在where条件中。

        select category_id ,avg(price)
        from t_item
        where category_id in(238,917)
        group by category_id;
  • 子查询

    1.案例:查询emp表中姓名是‘KING’所属的部门的编号,名称
    
        select deptno from emp
        where ename='KING';
    
        select deptno,dname
        from dept
        where deptno=(select deptno from emp
                      where ename='KING');
    
    2.案例:查询部门名称是SALES的部门下所有员工的编号,姓名,职位,以及所属部门的编号
    
        select deptno
        from dept
        where dname='SALES'
    
        select empno,ename,job,deptno
        from emp
        where deptno=(select deptno
                      from dept
                      where dname='SALES');
    
    3.案例:查询部门地址是DALLAS的部门下所有员工的所有信息
    
        select deptno from dept
        where loc='DALLAS'
    
        select * from emp
        where deptno in (select deptno from                  dept
                         where loc='DALLAS');
    
    4.案例:查询跟JONES同样工作的员工的所有信息(包含JONES)
    
            select job from emp
            where ename='JONES'
    
            select * from emp
            where job=(select job from emp
                       where ename='JONES');
    
    不包含JONES
    
            select * from emp
            where job=(select job from emp
                       where ename='JONES')                       and ename<>'JONES';
    
  • 关联查询数据

    • 使用where关联查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值