SQL经典实例

这篇博客介绍了SQL的经典实例,包括检索记录、多表查询、字符串处理、数值处理和日期处理。内容涵盖了从简单的WHERE子句到复杂的连接查询、字符串操作、数值计算以及日期时间函数的运用,是提升SQL技能的好资料。
摘要由CSDN通过智能技术生成

1. 检索记录

  1. 查找满足多个行的记录

    可以用 and 和 or 来筛选数据, and 的优先级大于 or ,最好使用()来明确使用优先级。
  2. 在where中筛选别名

    一般SQL语句执行顺序:from > where > select
     
     #所以该语句报错
     select sal as salary, comm as commission
     from emp
     where salary < 5000;
     
     #该语句正确
     select *
     from (
     select sal as salary, comm as commission
     from emp
     ) x
     where salary < 5000;
  3. 串联多列的值

    select concat(ename, ' WORKS AS A ',job) as msg
     from emp
     where deptno=10p;
  4. 在select中使用条件语句

    Case具有两种格式。简单Case函数和Case搜索函数。 
     --简单Case函数 
     CASE sex 
         WHEN '1' THEN '男' 
         WHEN '2' THEN '女' 
         ELSE '其他' 
     END 
    

    –Case搜索函数
    CASE
    WHEN sex = ‘1’ THEN ‘男’
    WHEN sex = ‘2’ THEN ‘女’
    ELSE ‘其他’
    END


    详细讲解:https://www.cnblogs.com/clphp/p/6256207.html
  5. 随机返回限定行数

    select ename,job
     from emp
     order by rand() limit 5;
  6. 查找null值

    要判断一个值是否为 Null,必须使用 IS Null。
     不能使用 = 或 != 来测试某一列的值是否为 Null。
  7. 把null值转换为其他值

    select coalesce(comm,0) from emp; #把null转换为0
  8. 查找匹配项

    in (...) 适用于后面数据集较小的情况(执行顺序是先执行in后面的子句,后执行前面的子句)
     exists ... 适用于前面查询数据集较小的情况(执行顺序是先执行exists前面的子句,后执行后面的子句)
     在执行 in 时需要考虑 null 值的影响(注:(true or null)=true,但是(false or null)=false。所以尽量用exists。)
  9. 排序时对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;
    

    方法二:
    select ename,sal,comm
    from emp
    order by coalesce(comm,0) desc,comm;

2. 多表查询

  1. 叠加多个行集

    使用 union 或者 union all 来叠加数据集。
     union 会删除重复值。
     union all 不会删除重复值,速度较快。
  2. 连接多个表

    形式1:
     select e.ename, d.loc,
     e.deptno as emp_deptno,
     d.deptno as dept_deptno
     from emp e, dept d
     where e.deptno = d.deptno
     and e.deptno = 10;
     
     形式2:
     select e.ename, d.loc
     from emp e inner join dept d
     on (e.deptno = d.deptno)
     where e.deptno = 10;
  3. 查找两个表中某一/多列相同的行

    方法:内连接或者用in。
    

    查找某一列的值相同:
    select e.empno,e.ename,e.job,e.sal,e.deptno
    from emp e
    where e.ename in
    (select ename from V);

    查找一/多列的值相同:
    select e.empno,e.ename,e.job,e.sal,e.deptno
    from emp e join V
    on ( e.ename = v.ename
    and e.job = v.job
    and e.sal = v.sal )

  4. 查找只存在一个表中的数据

    方法:用 in (子查询)。
  5. 从一个表检索与另一个表不相关的行

    方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值