天天看点

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制oracle逻辑条件关系优先规则总结

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逻辑条件关系
  • 优先规则
  • 总结

oracle逻辑条件关系

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制oracle逻辑条件关系优先规则总结

常规骚操作

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制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

一个模糊匹配,一个薪水限制

好办

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制oracle逻辑条件关系优先规则总结
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即可

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制oracle逻辑条件关系优先规则总结
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

不在呗

优先规则

之前我们学了很多的运算条件,到底谁最先执行呢????

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制oracle逻辑条件关系优先规则总结

between的优先级很低

or最低

最好就是加上括号()

可读性高

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制oracle逻辑条件关系优先规则总结

且,高

或,低

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

           

加了括号,好读一些

Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制oracle逻辑条件关系优先规则总结

要求,名字可以是那俩,他们的薪水都得大于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,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。