sql cookbook实验记录(Second)

本文深入探讨了Oracle Database 19c环境下SQL查询的高级应用,包括条件筛选、通配符使用、多字段排序及子串排序等技巧。通过实例演示了如何在特定条件下获取数据,并介绍了ORDER BY子句的各种用法,如升序、降序、NULL值处理及复杂表达式的排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境介绍:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

目前可以下载到的最新版本啦!

按模式搜索:

for example: 比如我想返回10,20部门中的
ename中间包含I字符的,或者job以ER结尾的。

scott@ORCL>SELECT ename, job
  FROM emp
 WHERE deptno IN (10, 20) AND (ename LIKE '%I%' OR job LIKE '%ER')  2    3  
  4  /
ENAME	   JOB
---------- ---------
SMITH	   CLERK
JONES	   MANAGER
CLARK	   MANAGER
KING	   PRESIDENT
MILLER	   CLERK

请注意这里的小括号。如果不加的话,那么返回结果就不对了。

SELECT ename, job
  FROM emp
 WHERE deptno IN (10, 20) AND ename LIKE '%I%' OR job LIKE '%ER'

在这里插入图片描述

这里的通配符%是不限定位置的,但是如果想限定位置的话。就用下划线’_’

scott@ORCL>SELECT ename, job
  FROM emp
 WHERE ename LIKE '_A%'  

ENAME	   JOB
---------- ---------
WARD	   SALESMAN
MARTIN	   SALESMAN
JAMES	   CLERK

这里ename第二个字符是A的名字。

以上是查询部分想要说的。这部分结束。

排序部分

如下三个语句其实是等价的。

 select ename,job,sal from emp where deptno=10 order by sal asc;
 select ename,job,sal from emp where deptno=10 order by 3 asc;
 select ename,job,sal from emp where deptno=10 order by 3 ;

这里面有三个要说明的:
1 order by 默认升序 asc 可写,可忽略。
2 列明可以用位置指定
3 为了代码可读性,以上都不建议。

  select ename,job,sal from emp where deptno=10 order by 3  desc ;

降序的关键字desc。英文单词是Descending。
desc = Descending
asc = Ascending
这里普及下高中英语

不过这里插一句,group by不能用简写
select count(ename),deptno from emp group by deptno;

多字段排序

 select ename,job,sal,deptno from emp  order by deptno,sal desc   

当然也可以这样写,但是这不容易读懂。

 select ename,job,sal,deptno from emp  order by 4,3 desc   ; 

按子串排序:

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

这里引用下substr,几乎每个编程语言都提供很多字符串截取的方法。
不过很少有人会这么用罢了。

oracle的substr函数的用法 取得字符串中指定起始位置和长度的字符串 substr( string,
start_position, [ length ] )

这里造一个视图:

在这里插入图片描述
做一些截取字符串的操作:

SELECT REPLACE (TRANSLATE (data, '0123456789', '#########'), '#', '') FROM v

也可以在反向提取下:

SELECT REPLACE (
           data,
           REPLACE (TRANSLATE (data, '0123456789', '#########'), '#', ''),
           '')
  FROM v;

输出部分:
在这里插入图片描述

NULL排序
Oracle为null值排序开发了几个关键字

在这里插入图片描述

如果Oracle没有为我们开发这个函数,那就自己开发。
比如:

  SELECT *
    FROM (SELECT ename,
                 comm,
                 CASE WHEN comm IS NULL THEN 0 ELSE 1 END  AS comnstatus
            FROM emp) v
ORDER BY v.comnstatus

等于自己实现了nulls first

排序里面也可以搞逻辑判断:

  SELECT ename,
         sal,
         job,
         comm
    FROM emp
ORDER BY CASE WHEN job = 'SALESMAN'  THEN comm   ELSE sal  END

order by当然可以当成列值传进sql,重新排序

 SELECT ename,
         sal,
         job,
         comm,
         CASE WHEN job = 'SALESMAN'  THEN comm   ELSE sal  END as ordered
    FROM emp order by ordered 

查询结果排序的部分就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值