SQL实例学习(一)

检索记录

检索所有行和列

  1. 代码

    # 查询表中所有数据
    select * from EMP;
    
    # 查询具体制定的列
    select EMPNO, ENAME, JOB, SAL, MGR, HIREDATE, COMM, DEPTNO from EMP;
    

筛选行

  1. 代码

    # 筛选行, 查看满足条件的行
    select * from EMP where DEPTNO = 10;
    

查找满足多个查询条件的行

  1. 代码

    # 查找满足多个条件的行
    select *
    from EMP
    where DEPTNO = 10
       or COMM is not null
       or SAL <= 2000 and DEPTNO = 20;
    

筛选列

  1. 代码

    # 筛选列
    select ENAME, DEPTNO, SAL
    from EMP;
    

创建有意义的列名

  1. 代码

    # 创建有意义的列名,使用AS创建别名
    select SAL as salary, COMM as commission
    from EMP;
    

在where子句中引用别名列

  1. 错误代码

    # 执行会报错
    select SAL as salary, COMM as commission 
    from EMP
    where salary < 5000;
    
  2. 正确代码,使用内嵌视图

    # 使用别名
    select *
    from (select SAL as salary, COMM as commission from EMP) x
    where salary < 5000;
    
  3. 说明, where子句会比select子句先执行,就失败的例子而言,当where子句被执行时,salary和commission尚不存在。直到where子句执行完毕,别名才会生效。from子句会先于where子句查询。

串联多列的值

  1. 查找结果的值

    ENAMEJOB
    CLARKMANAGER
    KINGPRESIDENT
    MILLERCLERK
  2. 想要的结果

    CLARK WORKS AS AMANAGER
    KING WORKS AS APRESIDENT
    MILLER WORKS AS ACLERK
    
  3. 代码

    # 串联多列的值
    # CONCAT函数可以串联多列的值
    select concat(ENAME, ' WORKS AS A', JOB) as msg
    from EMP
    where DEPTNO = 10;
    

在select语句里使用条件逻辑

  1. 代码

    # select语句里使用条件逻辑
    select ENAME,
           SAL,
           case
             when SAL <= 2000 then 'UNDERPAID'
             when SAL >= 4000 then 'OVERPAID'
             else 'OK'
               end as status
    from EMP;
    
  2. 结果

    ENAMESALSTATUS
    SMITH800UNDERPAID
    ALLEN1600UNDERPAID
    WARD1250UNDERPAID
    JONES2975OK
    MARTIN1250UNDERPAID
    BLAKE2850OK
    CLARK2450OK
    SCOTT3000OK
    KING5000OVERPAID
    TURNER1500UNDERPAID
    ADAMS1100UNDERPAID
    JAMES950UNDERPAID
    FORD3000OK
    MILLER1300UNDERPAID

限定返回行数

  1. 代码

    # 限定返回的行数
    select *
    from EMP
    limit 5;
    

随机返回若干行记录

  1. 代码

    # 随机返回若干行记录
    select ENAME, JOB
    from EMP
    order by rand()
    limit 5;
    

查找null值

  1. 代码

    # 查找null值
    select *
    from EMP
    where COMM is null;
    

把null值转换为实际值

  1. 代码

    # 把null值转换为实际值
    # coalesce函数会返回参数列表里的第一个非null值。
    select coalesce(COMM, 0), ENAME
    from EMP;
    
    # 使用case
    select case
             when COMM is not null then COMM
             else 0 end
    from EMP;
    

查找匹配项

  1. 代码

    # 查询匹配项
    # '%I%'表示任意位置出现I的字符串都会检索出来,'%ER'表示检索以ER结尾的字符串
    select ENAME, JOB
    from EMP
    where DEPTNO in (10, 20)
      and (ENAME like '%I%' or JOB like '%ER');
    

查询结果排序

指定顺序返回查询结果

  1. 代码

    # sal从小到大
    select ENAME, JOB, SAL
    from EMP
    where DEPTNO = 10
    order by SAL asc;
    

多字段排序

  1. 代码

    # 先按照DEPTNO升序,然后再按照SAL降序排列
    select EMPNO, DEPTNO, SAL, ENAME, JOB
    from EMP
    order by DEPTNO, SAL desc;
    

依据子句排序

  1. 代码

    # 按照职位字段的最后两个字符对检索结果进行结果
    select ENAME, JOB
    from EMP
    order by substr(JOB, length(JOB) - 2);
    

排序时对null值的处理

  1. 代码

    # 排序时对null值的处理
    # 添加辅助列进行排序
    select ENAME, SAL, COMM
    from (select ENAME, SAL, COMM, case when COMM is null then 0 else 1 end as is_null from EMP) x
    order by is_null desc, COMM;
    

根据条件逻辑动态调整排序项

  1. 代码

    # 根据条件逻辑动态调整排序项
    select ENAME, SAL, JOB, COMM
    from EMP
    order by case when JOB = 'SALESMAN' then COMM else SAL end;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄旺鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值