一、SQL的簡單查詢數據庫
一、掌握SQL查詢的基本語法oracle
二、SQL進行查詢的各類操做ide
SELECT [DISTINCT]*| 列[列名],列[列別名],...搜索引擎
FROM 表名稱[別名];spa
執行順序:一、FROM 二、SELECT索引
範例:查詢emp表中的所有記錄:SELECT * FROM emp ;開發
FROM子句肯定數據來源,SELECT子句控制所須要的數據列範例:進行數據的投影--控制所須要顯示的數字符串
據列:查詢每一個僱員的編號姓名工資it
SELECT empno,ename,sal*12 FROM emp ;class
再簡單查詢之中也支持四則運算
範例:如今要求查詢每一個僱員的編號姓名基本年薪(月工資是sal,年薪*12)
SELECT empno ,ename ,sal*12 FROM emp ;
部分的列名稱很差看,能夠進行別名設置
SELECT empno,ename,sal*12 income FROM emp ;
SELECT empno 僱員編號,ename 姓名,sal*12 年薪 FROM emp ;
若是想開發正常,儘可能別用漢語
還支持數據鏈接操做,使用 」||」連接
SELECT empno || ename FROM emp ;(普通數字直接編寫)
SELECT empno || 1 FROM emp ;(字符串使用單引號聲明)
SELECT empno || 'hello' FROM emp;
實現格式化的輸出操做:SELECT '編號:' || empno || ',姓名:' || ename FROM emp ;
DISTINCT關鍵字,去除重複內容
查詢全部僱員的職位信息:
SELECT job FROM emp ;
SELECT DISTINCT job FROM emp ;
SELECT DISTINCT ename,job FROM emp ;
總結:簡單查詢中的最大特徵在於:控制數據列,可是他沒法進行數據行的控制。
二、SQL的限定查詢
一、SQL語句的執行順序
二、限定符號的使用
若是想對所選的數據行進行控制,那麼能夠利用WHERE子句完成
SELECT [DISTINCT] * | 列[別名],列[別名]...
FROM 表名稱[別名]
[WHERE 限定條件(s)];
執行順序
一、FROM 肯定數據來源
二、WHERE 篩選數據行
三、SELECT 選出所須要的數據列,最後被執行
關係運算:>、<...
範圍運算:BETWHERE...END;
空判斷:IS NULL、IS NOT NULL;
IN判斷:IN 、NOTIN 、 exists()(複雜查詢);
模糊查詢:LIKE、NOTLIKE.
以上限定符只能判斷一次,若是出現若干個限定符、須要進行限定符連接,使用邏輯運算:AND(與)、 OR(或)、 NOT(非);
一、關係運算符
範例:查詢工資低於1200的僱員
SELECT *
FROM emp
WHERE sal<1200 ;
範例:查詢工資3000的僱員
SELECT *
FROM emp
WHERE sal=3000 ;
範例:查詢Smith的僱員信息(在oracle數據庫中,數據區分大小寫)
SELECT *
FROM emp
WHERE ename='SMITH' ;
對於不等於有2個符號:!=、<>;
範例:查詢職位不是辦事員的僱員(職位是job的字段、辦事員的職位名稱CLERK)
SELECT *
FROM emp
WHERE job<>'CLERK' ;
SELECT *
FROM emp
WHERE job!='CLERK' ;
二、邏輯運算
邏輯運算能夠保證鏈接多個條件,主要使用AND/OR完成。
範例:要求查詢出不是辦事員但工資低於3000的僱員信息
SELECT *
FROM emp
WHERE job<>'CLERK' AND sal<3000 ;
範例:查詢不是辦事員也不是銷售的僱員信息
SELECT *
FROM emp
WHERE job<>'CLERK' AND job<>'SALESMAN' ;
範例:查詢出職位是辦事員,或者工資低於1200的僱員
SELECT *
FROM emp
WHERE job='CLERK' OR sal<1200 ;
除了AND與OR以外,還可使用NOT進行求反。即:true變爲false、false變爲true
範例:觀察NOT操做
SELECT *
FROM emp
WHERE NOT sal>2000 ;
三、範圍運算:BETWEEN...AND
BETWEEN...AND主要功能是進行範圍插敘
SELECT *
FROM emp
WHERE 字段|樹枝 BETWEEN 最小值 AND 最大值 ;
範例:輸出工資在1500~3000的全部僱員
SELECT *
FROM emp
WHERE sal BETWEEN 1500 AND 3000 ;
使用BETWEEN...END是一個運算符,而是用關係與邏輯的組合屬於兩個運算符,天然效率會更高
在oracle中的全部運算符都不收數據類型的控制,在以前使用的是數字進行判斷,那麼除了數字以外也可使用字符串或者日期進行判斷。
範例:查詢出全部在1981年的僱員信息
SELECT *
FROM emp
WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-1981' ;
範例:無聊的字符串範圍
SELECT * FROM emp WHERE ename BETWEEN 'ALLEN' AND 'CLARK' ;
四、空判斷
null是從數據庫定義上來說屬於一個未知的數據,任何一個數字和null進行計算結果仍是爲null
SELECT null + 1 FROM emp ;
null不能使用關係運算判斷。關係能夠判斷的是數據,因此在SQL智能用IS NULL/IS NOT NULL來判斷不爲空
範例:查詢因此領取佣金的僱員信息(comm字段表示佣金,若是領取,comm的內容不是null)
SELECT *
FROM emp
WHERE comm IS NOT NULL ;
五、IN操做符(謂詞IN 核心)
IN指的是根據一個指定的範圍進行數據查詢
範例:查詢出僱員編號是7369.7566.7788.9999的僱員信息
SELECT *
FROM emp
WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999 ;
SELECT *
FROM emp
WHERE empno IN (7369,7566,7788,9999) ;
NOT IN 在使用NOT IN時若是查找的數據範圍內包含NULL值,那麼不會有任何的查詢結果返回,IN操做無此如今
SELECT *
FROM emp
WHERE empno NOT IN (7369,7566,7788,9999) ;
SELECT *
FROM emp
WHERE empno IN (7369,7566,7788,null) ;
SELECT *
FROM emp
WHERE empno NOT IN (7369,7566,7788,null) ;
五、模糊查詢:LIKE(核心)
LIKE能夠實現數據模糊插敘,若是使用LIKE則必須使用以下兩個匹配符號:
「_」匹配任意的一位符號;
「 % 」匹配任意的符號(0位、1位、多位)
範例:查詢全部僱員姓名中一字母A開頭的僱員信息
SELECT *
FROM emp
WHERE ename LIKE 'A%' ;
範例:查詢全部僱員姓名第二個字母是M的因此僱員信息
SELECT *
FROM emp
WHERE ename LIKE '_A%' ;
範例:查詢僱員姓名任意位置上存在A的僱員信息
SELECT *
FROM emp
WHERE ename LIKE '%A%' ;
關於LIKE的兩點說明
一、若是在使用LIKE進行限定查詢的時候,若是沒有設置任何關鍵字,那麼表示查詢所有;
SELECT * FROM emp WHERE ename LIKE '%%' ;
二、LIKE 能夠在任意的數據類型上使用(原生支持)
SELECT * FROM emp
WHERE ename LIKE '%A%' OR sal LIKE '%1%' OR hiredate LIKE '%81%' ;
雖然全部的數據類型都支持LIKE ,可是每每會在字符串上使用,所見到的大部分系統搜索功能都是此語句實現的。可是不包含搜索引擎的實現。