Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开
测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库
这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!
oracle系列文章:
【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?
【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样
【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法
【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表
【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解
【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库
【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则
【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写
【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系
【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作
【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句
文章目录
- Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
-
- @[TOC](文章目录)
- oracle逻辑条件关系
- 优先规则
- 总结
- @[TOC](文章目录)
oracle逻辑条件关系
常规骚操作
SQL> select employee_id,job_id,last_name,salary from employees where job_id like '%MAN%' and salary>=10000;
EMPLOYEE_ID JOB_ID LAST_NAME SALARY
----------- ---------- ------------------------- ----------
114 PU_MAN Raphaely 11000.00
145 SA_MAN Russell 14000.00
146 SA_MAN Partners 13500.00
147 SA_MAN Errazuriz 12000.00
148 SA_MAN Cambrault 11000.00
149 SA_MAN Zlotkey 10500.00
201 MK_MAN Hartstein 13000.00
7 rows selected
and
一个模糊匹配,一个薪水限制
好办
SQL> select employee_id,job_id,last_name,salary from employees where job_id like '%MAN%' or salary>=10000;
EMPLOYEE_ID JOB_ID LAST_NAME SALARY
----------- ---------- ------------------------- ----------
100 AD_PRES King 24000.00
101 AD_VP Kochhar 17000.00
102 AD_VP De Haan 17000.00
108 FI_MGR Greenberg 12008.00
114 PU_MAN Raphaely 11000.00
120 ST_MAN Weiss 8000.00
121 ST_MAN Fripp 8200.00
122 ST_MAN Kaufling 7900.00
123 ST_MAN Vollman 6500.00
124 ST_MAN Mourgos 5800.00
145 SA_MAN Russell 14000.00
146 SA_MAN Partners 13500.00
147 SA_MAN Errazuriz 12000.00
148 SA_MAN Cambrault 11000.00
149 SA_MAN Zlotkey 10500.00
150 SA_REP Tucker 10000.00
156 SA_REP King 10000.00
162 SA_REP Vishney 10500.00
168 SA_REP Ozer 11500.00
169 SA_REP Bloom 10000.00
EMPLOYEE_ID JOB_ID LAST_NAME SALARY
----------- ---------- ------------------------- ----------
174 SA_REP Abel 11000.00
201 MK_MAN Hartstein 13000.00
204 PR_REP Baer 10000.00
205 AC_MGR Higgins 12008.00
24 rows selected
就是and改为or即可
SQL> select employee_id,job_id,last_name,salary from employees where job_id not in('IT_PROG','ST_CLERK','SA_REP');
EMPLOYEE_ID JOB_ID LAST_NAME SALARY
----------- ---------- ------------------------- ----------
100 AD_PRES King 24000.00
101 AD_VP Kochhar 17000.00
102 AD_VP De Haan 17000.00
108 FI_MGR Greenberg 12008.00
109 FI_ACCOUNT Faviet 9000.00
110 FI_ACCOUNT Chen 8200.00
111 FI_ACCOUNT Sciarra 7700.00
112 FI_ACCOUNT Urman 7800.00
113 FI_ACCOUNT Popp 6900.00
114 PU_MAN Raphaely 11000.00
115 PU_CLERK Khoo 3100.00
116 PU_CLERK Baida 2900.00
117 PU_CLERK Tobias 2800.00
118 PU_CLERK Himuro 2600.00
119 PU_CLERK Colmenares 2500.00
120 ST_MAN Weiss 8000.00
121 ST_MAN Fripp 8200.00
122 ST_MAN Kaufling 7900.00
123 ST_MAN Vollman 6500.00
124 ST_MAN Mourgos 5800.00
EMPLOYEE_ID JOB_ID LAST_NAME SALARY
----------- ---------- ------------------------- ----------
145 SA_MAN Russell 14000.00
146 SA_MAN Partners 13500.00
147 SA_MAN Errazuriz 12000.00
148 SA_MAN Cambrault 11000.00
149 SA_MAN Zlotkey 10500.00
180 SH_CLERK Taylor 3200.00
181 SH_CLERK Fleaur 3100.00
182 SH_CLERK Sullivan 2500.00
183 SH_CLERK Geoni 2800.00
184 SH_CLERK Sarchand 4200.00
185 SH_CLERK Bull 4100.00
186 SH_CLERK Dellinger 3400.00
187 SH_CLERK Cabrio 3000.00
188 SH_CLERK Chung 3800.00
189 SH_CLERK Dilly 3600.00
190 SH_CLERK Gates 2900.00
191 SH_CLERK Perkins 2500.00
192 SH_CLERK Bell 4000.00
193 SH_CLERK Everett 3900.00
194 SH_CLERK McCain 3200.00
195 SH_CLERK Jones 2800.00
EMPLOYEE_ID JOB_ID LAST_NAME SALARY
----------- ---------- ------------------------- ----------
196 SH_CLERK Walsh 3100.00
197 SH_CLERK Feeney 3000.00
198 SH_CLERK OConnell 2600.00
199 SH_CLERK Grant 2600.00
200 AD_ASST Whalen 4400.00
201 MK_MAN Hartstein 13000.00
202 MK_REP Fay 6000.00
203 HR_REP Mavris 6500.00
204 PR_REP Baer 10000.00
205 AC_MGR Higgins 12008.00
206 AC_ACCOUNT Gietz 8300.00
52 rows selected
NOT IN
不在呗
优先规则
之前我们学了很多的运算条件,到底谁最先执行呢????
between的优先级很低
or最低
最好就是加上括号()
可读性高
且,高
或,低
SQL> select last_name, job_id, salary from employees where job_id='SA_REP' or job_id='AD_PRES' and salary>15000;
LAST_NAME JOB_ID SALARY
------------------------- ---------- ----------
King AD_PRES 24000.00
Tucker SA_REP 10000.00
Bernstein SA_REP 9500.00
Hall SA_REP 9000.00
Olsen SA_REP 8000.00
Cambrault SA_REP 7500.00
Tuvault SA_REP 7000.00
King SA_REP 10000.00
Sully SA_REP 9500.00
McEwen SA_REP 9000.00
Smith SA_REP 8000.00
Doran SA_REP 7500.00
Sewall SA_REP 7000.00
Vishney SA_REP 10500.00
Greene SA_REP 9500.00
Marvins SA_REP 7200.00
Lee SA_REP 6800.00
Ande SA_REP 6400.00
Banda SA_REP 6200.00
Ozer SA_REP 11500.00
LAST_NAME JOB_ID SALARY
------------------------- ---------- ----------
Bloom SA_REP 10000.00
Fox SA_REP 9600.00
Smith SA_REP 7400.00
Bates SA_REP 7300.00
Kumar SA_REP 6100.00
Abel SA_REP 11000.00
Hutton SA_REP 8800.00
Taylor SA_REP 8600.00
Livingston SA_REP 8400.00
Grant SA_REP 7000.00
Johnson SA_REP 6200.00
31 rows selected
反正AD那个薪水得超过15000
其他的随意了
or优先级低
最好这么写
SQL> select last_name, job_id, salary from employees where job_id='SA_REP' or (job_id='AD_PRES' and salary>15000);
LAST_NAME JOB_ID SALARY
------------------------- ---------- ----------
King AD_PRES 24000.00
Tucker SA_REP 10000.00
Bernstein SA_REP 9500.00
Hall SA_REP 9000.00
Olsen SA_REP 8000.00
Cambrault SA_REP 7500.00
Tuvault SA_REP 7000.00
King SA_REP 10000.00
Sully SA_REP 9500.00
McEwen SA_REP 9000.00
Smith SA_REP 8000.00
Doran SA_REP 7500.00
Sewall SA_REP 7000.00
Vishney SA_REP 10500.00
Greene SA_REP 9500.00
Marvins SA_REP 7200.00
Lee SA_REP 6800.00
Ande SA_REP 6400.00
Banda SA_REP 6200.00
Ozer SA_REP 11500.00
LAST_NAME JOB_ID SALARY
------------------------- ---------- ----------
Bloom SA_REP 10000.00
Fox SA_REP 9600.00
Smith SA_REP 7400.00
Bates SA_REP 7300.00
Kumar SA_REP 6100.00
Abel SA_REP 11000.00
Hutton SA_REP 8800.00
Taylor SA_REP 8600.00
Livingston SA_REP 8400.00
Grant SA_REP 7000.00
Johnson SA_REP 6200.00
31 rows selected
加了括号,好读一些
要求,名字可以是那俩,他们的薪水都得大于15000
SQL> select last_name, job_id, salary from employees where (job_id='SA_REP' or job_id='AD_PRES') and salary>15000;
LAST_NAME JOB_ID SALARY
------------------------- ---------- ----------
King AD_PRES 24000.00
因为只有一个人薪水大
所以其他的部门都不行
你看看上面那个表
这种优先级的错误,一定要注意,查不出来,因为不报错……
最好加括号,表明优先级
总结
提示:重要经验:
1)
2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。