首页 > 数据库 >选读SQL经典实例笔记01_检索和排序

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

时间:2023-07-02 09:03:29浏览次数:35  
标签:ename 选读 01 sql job comm emp SQL select

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

标签:ename,选读,01,sql,job,comm,emp,SQL,select
From: https://www.cnblogs.com/lying7/p/17516320.html

相关文章

  • 数据结构和算法-2023.07.01
    数据结构杂记回忆以前的一些零散的知识点杂谈......
  • MySql经典练习题(一)
    数据库表结构和数据见我的上一篇博文1.查询"01"课程比"02"课程成绩高的学生的信息和课程分数selects.*,a.s_scorefromScorea,Scoreb,Studentswheres.s_id=a.s_idanda.s_id=b.s_idanda.c_id="01"andb.c_id="02"anda.s_score>b.s_score......
  • 【mysql】下载安装
    访问https://www.mysql.com/downloads/然后查看「系统偏好设置」修改环境变量,编辑~/.bash_profile,加入PATH=$PATH:/usr/local/mysql/bin然后source~/.bash_profile启动(base)➜~mysql-uroot-p12345678dyld:Symbolnotfound:__ZTTNSt3__118basic_stri......
  • Web安全-渗透测试-权限提升01
    权限提升权限提升对我们在深度渗透过程中起着重要作用,接下来我将介绍网站后台,漏洞,第三方,数据库,服务类,第三方接口,服务器系统几方面进行提权介绍参考1后台权限获得方式:爆破,注入猜解,弱口令等获取的帐号密码配合登录一般网站或应用后台只能操作应用的界面内容数据图片......
  • 名人名言_2023.07.01-
    日常学习名人名言,激励自己......
  • MySql —— 索引
    可以按照四个角度来分类索引。按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。按「字段个数」分类:单列索引、联合索引。按数据结构分类 ......
  • 关于力扣题的sql集训感悟
    在学习SQL的过程中,很多人都会选择参加力扣的SQL集训。力扣是一个面向程序员的在线编程平台,它提供了大量的算法题和数据库题,可以帮助我们提升编程能力和解决实际问题的能力。在参加力扣的SQL集训后,我有了一些感悟和收获,下面我将分享给大家。第一,系统学习和巩固SQL知识。力扣的SQL集......
  • 使用MySQL Shell备份和还原MySQL
    MySQLShell是MySQL的高级客户端和代码编辑器。除了提供的SQL功能之外,与MySQL类似,MySQLShell还为JavaScript和Python提供脚本功能,并包含用于使用MySQL的API。XDevAPI使用户能够处理关系型和文档数据,强烈建议MySQLServer8.0和5.7与MySQLShell8.0一起使用。MySQLShell包含用......
  • 2023-07-01 开摆
    CF671EOrganizingaRace考虑一组\([L,R]\)是否合法。最优的策略肯定是,从\(L\)开始往右走,每次发现油不够了就贪心在自己这里加油。最后把所有剩下的全加在\(R\)上。现在描述一下“油不够”的情况。设\(f_x\)表示从\(n\)走到\(x\)的油量。(可以发现,\(f\)可能有负数......
  • SQL基础总结
    影响数据库执行性能的原因:1计算机硬件问题2数据库管理系统问题(ORACLE,SQLSERVER,MYSQL,DB2...)3数据库设计问题(例如:索引的情况)4SQL写法问题5实际应用数据量的多少作为程序员,我们一般不能决定计算机硬件,数据库系统,数据库设计,以及实际应用数据量的多少,所以,我们可以在S......