选读SQL经典实例笔记01_检索和排序

这篇具有很好参考价值的文章主要介绍了选读SQL经典实例笔记01_检索和排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

选读SQL经典实例笔记01_检索和排序

1. 在WHERE子句中引用别名列

1.1. 当表里的某些列没有被恰当命名的时候,这个技巧尤其有用

1.2. sql

select sal as salary, comm as commission
  from emp
 where salary < 5000

1.3. 内嵌视图

1.3.1.  sql

select *
   from (
 select sal as salary, comm as commission
   from emp
        ) x
  where salary < 5000

1.3.2. 聚合函数

1.3.3. 标量子查询

1.3.4. 窗口函数

1.3.5. 别名

2. CONCAT函数

2.1. 串联多列的值

2.2. 在DB2、Oracle和PostgreSQL 中,“||”是CONCAT函数的快捷方式

2.3. 在SQL Server中则为“+”

3. 随机返回若干行记录

3.1. 如果ORDER BY子句使用数值常量,那么就需要按照SELECT列表里的顺序来排序

3.2. 如果ORDER BY子句使用了函数,那么就需要按照该函数的返回值来排序,而函数返回的值是根据结果集里的每一行计算而来的

3.3. MySQL

3.3.1.  sql

  select ename,job
 from emp
  order by rand() limit 5

3.4. PostgreSQL

3.4.1.  sql

 select ename,job
   from emp
  order by random() limit 5

3.5. Oracle

3.5.1.  sql

 select *
   from (
  select ename, job
    from emp
   order by dbms_random.value()
        )
   where rownum <= 5

3.6. SQL Server

3.6.1.  sql

select top 5 ename,job
   from emp
  order by newid()

4. 把Null值转换为实际值

4.1. COALESCE函数

4.1.1.  sql

select coalesce(comm,0)
   from emp

4.1.2. 更方便、更简洁

4.2. CASE

4.2.1. sql

 select case
       when comm is not null then comm
       else 0
       end
  from emp

4.3. 适用于所有的数据库

5. 依据子串排序

5.1. 按照职位字段的最后两个字符对检索结果进行排序

5.2. DB2、MySQL、Oracle和PostgreSQL

5.2.1. sql

select ename,job
  from emp
 order by substr(job,length(job)-2)

5.3. SQL Server

5.3.1. sql

select ename,job
  from emp
 order by substring(job,len(job)-2,2)

6. 排序时对Null值的处理

6.1. Oracle能够让你在无须修改非Null值数据的情况下方便地把Null值排到最前面或者最后面,其他数据库得添加一个辅助列

6.1.1. Oracle 9i及后续版本NULLS FIRST和NULLS LAST来决定Null值应该排到前面还是后面

6.2. 辅助列

6.2.1. 只存在于查询语句里,而不存在于表中

6.2.2. 目的是让你能够识别出Null值,并控制其排在最前面还是最后面

6.3. 对于非Oracle解决方案的查询语句,其内嵌视图X会返回如下结果集

6.4. sql

select ename,sal,comm,
       case when comm is null then 0 else 1 end as is_null
  from emp

6.5. ENAME    SAL       COMM    IS_NULL


SMITH    800                           0
ALLEN   1600          300          1
WARD    1250         500          1
JONES   2975                          0
MARTIN  1250       1400         1
BLAKE   2850                          0
CLARK   2450                          0
SCOTT   3000                          0
KING    5000                           0
TURNER  1500          0           1
ADAMS   1100                       0
JAMES    950                          0
FORD    3000                         0
MILLER  1300                        0

7.  依据条件逻辑动态调整排序项

7.1. 如果JOB等于SALESMAN,就要按照COMM来排序;否则,按照SAL排序

7.2.  sql

select ename,sal,job,comm
   from emp
  order by case when job = 'SALESMAN' then comm else sal end

7.3. sql

select ename,sal,job,comm,
       case when job = 'SALESMAN' then comm else sal end as ordered
 from emp
order by 5

7.4. ENAME             SAL JOB             COMM    ORDERED


TURNER           1500 SALESMAN           0          0
ALLEN            1600 SALESMAN         300        300
WARD             1250 SALESMAN         500        500
SMITH             800 CLERK                                800
JAMES             950 CLERK                                950
ADAMS            1100 CLERK                             1100
MARTIN           1250 SALESMAN        1300    1300
MILLER           1300 CLERK                               1300
CLARK            2450 MANAGER                        2450
BLAKE            2850 MANAGER                        2850
JONES            2975 MANAGER                        2975
SCOTT            3000 ANALYST                          3000
FORD             3000 ANALYST                           3000
KING             5000 PRESIDENT                        5000文章来源地址https://www.toymoban.com/news/detail-513957.html

到了这里,关于选读SQL经典实例笔记01_检索和排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 选读SQL经典实例笔记15_窗口函数

    2.2.1.1. 分组不为空 2.2.1.1.1. 一个分组至少要拥有一个成员(行 2.2.1.1.2. 无法从一个空表中生成任何分组 2.2.1.2. 分组具有唯一性 2.2.1.2.1. 如果查询语句使用了GROUP BY子句,那么通常而言SELECT列表里就不再需要使用DISTINCT了 2.2.2.1. COUNT永远大于0 2.2.2.1.1. 无法从一个空表

    2024年02月14日
    浏览(27)
  • 选读SQL经典实例笔记08_区间查询

    1.6.3.1. 即使同一天入职的员工不止一个人,也只会返回一个值 1.6.4.1. 使用MIN函数来确保只返回一个值 2.2.2.1. PROJ_START和PROJ_END的值决定哪些行属于同一个区间 2.2.2.2. 如果某一行的PROJ_START值等于上一行的PROJ_END值,那么该行就是“连续”的,或者说它属于某个组 3.4.1.1. ora

    2024年02月16日
    浏览(87)
  • 选读SQL经典实例笔记14_层次查询

    2.6.1.1. sql 2.7.1.1. sql 3.5.1.1.  sql 4.5.1.1.  sql 5.5.1.1.  sql 6.7.1.1. Oracle Database 10g新增的CONNECT_BY_ROOT和CONNECT_BY_ISLEAF

    2024年02月15日
    浏览(95)
  • 选读SQL经典实例笔记05_日期运算(下)

    3.6.2.1. 对于MySQL 版本的DATEDIFF函数,需要省略第一个参数day,并把剩下的两个参数的顺序颠倒过来 4.3.2.1. Oracle早期版本

    2024年02月13日
    浏览(71)
  • 选读SQL经典实例笔记11_结果集变换

    3.6.1.1. 为了剔除掉Null,需要调用聚合函数MAX,并基于RN执行GROUP BY 3.9.1.1. 使用标量子查询基于EMPNO为每个员工排序 3.9.1.2. 针对标量子查询的返回值执行GROUP BY 3.9.1.3. 使用CASE表达式和聚合函数MAX实现结果集变换

    2024年02月16日
    浏览(72)
  • 选读SQL经典实例笔记04_日期运算(上)

    2.1.1.1. 因为X和Y之间没有任何连接条件,这里会产生笛卡儿积 2.1.1.2. X和Y都只有一条数据,因而即使没有连接条件也不会有问题,结果集最终只会有一行 2.8.1.1. 对于MySQL 而言,只需去掉DATEDIFF函数的第一个参数,并翻转ALLEN_HD和WARD_HD的顺序即可 3.1.2.1. sql 3.1.2.2. sql 3.1.2.2.

    2024年02月13日
    浏览(67)
  • 选读SQL经典实例笔记02_多表查询

    3.1.2.1. 排除重复项

    2024年02月12日
    浏览(131)
  • 选读SQL经典实例笔记22_2版增补

    4.1.3.1. 查找拼写不同但发音相同的字符串 6.1.1.1. 记录值的仪表存在误差 6.1.3.1. 意味着数据点是正确的,但应谨慎根据数据得出任何结论 9.1.2.1. 不使用CASE表达式或额外的连接操作

    2024年02月13日
    浏览(211)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包