ORACLE從零開始系列之SQL(一)
前言
ORACLE資料庫作為全世界目前應用最為廣泛的關係型資料庫,其功能性和穩定性得到全世界的一致認可,從今天起“ORACLE從零開始系列”將從頭系統的介紹oracle資料庫的
sql語句、內部架構、功能特性及其高可用等知識。學無止境,天外有天,本文旨在將本人掌握的oracle知識進行分享,若有紕漏,請各位看官指正。
本小節知識點
SQL語句邏輯運算子與null的關係與使用
正文
在oracle資料庫中,邏輯操作包含AND、OR、NOT三種,首先我們來看一下這三種邏輯運算的真值表
表1AND的真值表
|
TRUE |
FALSE |
NULL |
TRUE |
TRUE |
FALSE |
NULL |
FALSE |
FALSE |
FALSE |
FALSE |
NULL |
NULL |
FALSE |
NULL |
表2OR的真值表
|
TRUE |
FALSE |
NULL |
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
FALSE |
NULL |
NULL |
TRUE |
NULL |
NULL |
表3NOT的真值表
TRUE |
FALSE |
NULL |
FALSE |
TRUE |
NULL |
(以上圖片均摘自網路)
我們可以看到在and真值表中and和null碰到一起時無非兩種結果,一種是null,一種是false(false+null),也就是說在and中和null有關的運算都不會返回資料。我們來做以下實驗:
實驗表結構:
EMPNONOTNULLNUMBER(4)
ENAMEVARCHAR2(10)
JOBVARCHAR2(9)
MGRNUMBER(4)
HIREDATEDATE
SALNUMBER(7,2)
COMMNUMBER(7,2)
DEPTNONUMBER(2)
實驗表資料:
SQL>set pages 30
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7654 MARTIN SALESMAN 0 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 0 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 0 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
and是同時滿足,只有當兩個條件都為true時才能返回結果
SQL> select * from scott.emp where sal>500 and job is null;
no rows selected
這條語句能返回結果嗎?
SQL>select * from scott.emp where sal>500 and job is null;
norowsselected
因為job欄位當中沒有為null的值,所以jobisnull的結果為null,true+null的結果也就為null了。
我們再來看OR
OR運算的演算法是隻要一個條件為true就返回結果
上面那條語句我們將and改為or
SQL> select * from scott.emp where sal>500 or job is null;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7654 MARTIN SALESMAN 0 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 0 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 0 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
接著
SQL> select * from scott.emp where not (not mgr=null and mgr!=0);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7654 MARTIN SALESMAN 0 28-SEP-81 1250 1400 30
7844 TURNER SALESMAN 0 08-SEP-81 1500 0 30
7900 JAMES CLERK 0 03-DEC-81 950 30
這條語句為何有值
因為 (not mgr=null)=null,整個條件看起來就是 not(null and true(或者false),由於null and false為null,null and true 為false,所以當mgr等於0時,整條語句就會返回值NOT FALSE=TRUE。
good luck
sean
qq 2087425608
2014.3.4
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27153401/viewspace-1100922/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android開發之從零開始系列彙總Android
- PHP從零開始系列一(學習筆記):前言PHP筆記
- 從零開始nodejs系列文章NodeJS
- 從零開始搭建部落格系列
- 從零開始擼一個Fresco之總結
- 從零開始學golang之udpGolangUDP
- 從零開始學golang之 PrimGolang
- 從零開始學golang之TCPGolangTCP
- flutter之從零開始搭建(一)之 BottomNavigationBarFlutterNavigation
- 《學習Oracle從這裡開始》之常用SQL篇OracleSQL
- 從零開始開發一個 WebpackWeb
- 從零開始學golang之DijkstraGolang
- 從零開始寫一個ExporterExport
- C語言從零開始(一)C語言
- 從零開始寫JavaScript框架(一)JavaScript框架
- 從零開始仿寫一個抖音App——開始APP
- 從零開始學Spring Boot系列-整合MySQLSpring BootMySql
- 從零開始學Spring Boot系列-整合mybatisSpring BootMyBatis
- 從零開始學Spring Boot系列-整合KafkaSpring BootKafka
- 從零開始擼一個Fresco之gif和Webp動畫Web動畫
- 從零開始機器學習機器學習
- 從零開始 OpenCVOpenCV
- 從零開始學習ExtJs6系列教程一【Hello World】JS
- 【FFmpeg筆記】 從零開始之濾鏡筆記
- 從零開始學golang之gin加上gormGolangORM
- 從零開始學Electron筆記(一)筆記
- 從零開始實現放置遊戲(一)遊戲
- 【從零開始擼一個App】PKCEAPP
- 從零開始寫一個網頁網頁
- 從零開始的Spring Boot (一)Spring Boot
- Jenkins 從零開始-安裝(一)Jenkins
- 從零開始學五筆(一):概述
- flutter之從零開始搭建(二)之 Navigator路由Flutter路由
- ?從零開始學習webpack系列二(配置檔案)Web
- PHP從零開始系列二(學習筆記):序言PHP筆記
- 從零開始學Spring Boot系列-外部化配置Spring Boot
- 從零開始實現一個RPC框架(零)RPC框架
- Spring MVC 4.2.4 文件實踐(一)--- 菜鳥從零開始學系列SpringMVC