• 读书笔记-sql经典实例


    • 随机返回几行
    SELECT ename,job  
    FROM EMP
    ORDER BY RAND() LIMIT 5
    
    • 查找NULL值: 要判断一个值是否为Null,必须使用IS Null
    select *from emp where comm is null
    

    Null值不会等于或者不等于任何值,甚至不能与其自身作比较。因此,不能使用 = 或 != 来测试某一列的值是否为Null。判断一行是否含有Null,必须使用IS Null。你也可以使用IS NOT Null来找到给定列的值不是Null的所有行

    • 将NUll值换为其他值
      SELECT COALESCE(comm,0) FROM EMP
      处理Null值时,最好利用数据库的内置功能。
    • case when 处理Null值
    select case
           when comm is not null then comm
           else 0
           end
    from emp
    
    • order by: 如果你的查询语句里有GROUP BY或DISTINCT,那么就不能按照SELECT列表之外的列进行排序。
    • 排序时对Null值的处理
      使用CASE表达式标记Null值。该标记有两种可能的取值:一种代表Null值,另一种代表非Null值。一旦你做好了标记,只要简单地把它放进ORDER BY子句就行了。这样一来,你就能在不影响非Null值的情况下,方便地调整Null值的位置了
    • order by 根据条件排序

      如果JOB等于SALESMAN,就要按照COMM来排序;否则,按照SAL排序。你希望返回如下所示的结果集

    多表查询

    • UNION ALL:将重复的值也算上
    • UNION: 过滤掉重复值,会进行一次排序,去除重复值
    • UNION相当于UNION ALL再加上一次distinct操作
    • 查找只存在于一个表中的数据
      其中oracle可以直接用MINUS
      eg: select deptno from dept
      minus
      select deptno from emp
      mysql:
      select deptno from dept
      where deptno not in (select deptno from emp)
      可以使用DISTINCT来确保每个在EMP表里缺少的DEPTNO值只出现一次
      select distinct deptno
      from dept
      where deptno not in (select deptno from emp)
      在使用NOT IN时,要注意Null值。考虑如下的表NEW_DEPT
      create table new_dept(deptno integer)
      insert into new_dept values (10)
      insert into new_dept values (50)
      insert into new_dept values (null)
      如果你试着使用NOT IN子查询检索存在于DEPT表却不存在于NEW_DEPT表的DEPTNO,会发现查不到任何值
      SELECT *
      FROM DEPT
      WHERE deptno NOT IN (SELECT deptno FROM new_dept)
      这样返回为空
      原因就在于NEW_DEPT表里有Null值。子查询会返回3行DEPTNO,分别为10、50和Null值。IN和NOT IN本质上是OR运算,
      由于Null值参与OR逻辑运算的方式不同,IN和NOT IN将会产生不同的结果
      当使用in时:

      使用not in时:



  • 相关阅读:
    thinkphp 模板文件
    thinkphp 目录安全文件
    thinkphp 防止sql注入
    thinkphp 表单令牌
    thinkphp 表单合法性检测
    thinkphp 输入过滤
    thinkphp 静态缓存
    thinkphp sql解析缓存
    thinkphp 查询缓存
    thinkphp 快速缓存
  • 原文地址:https://www.cnblogs.com/Baronboy/p/14145983.html
Copyright © 2020-2023  润新知