最近專案要用到Oracle,奈何之前沒有使用過,所以在B站上面找了一個學習影片,用於記錄學習過程以及自己的思考。
影片連結:
【尚矽谷】Oracle資料庫全套教程,oracle從安裝到實戰應用
如果有侵權,請聯絡刪除,謝謝。
更加詳細的教程,可以直接觀看此連結Oracle教程
1、過濾
1.1、基本使用方式
使用方式:使用 WHERE 子句
,將不滿足條件的行過濾掉。
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)];
WHERE 子句緊隨 FROM 子句。
比如:
-- 查詢 department_id 等於 90 的資料
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;
1.2、過濾中使用字元和日期
過濾條件中使用字元和日期,有以下幾點需要注意:
- 字元和日期要包含
在單引號中
。 字元大小寫敏感,日期格式敏感
。- 預設的日期格式是
DD-MON月-RR
。(eg: 7-7月-1996)。使用此方式容易出現格式不匹配,後面再單行函式中做轉換後查詢。
-- 字串查詢
SELECT last_name, job_id, department_id
FROM employees
WHERE last_name = 'Whalen';
--日期查詢
SELECT last_name, hire_date, department_id
FROM employees
WHERE hire_date = '7-6月-1994';
--使用單行函式後的日期查詢
SELECT last_name, hire_date, department_id
FROM employees
WHERE to_char(hire_date, 'yyyy-mm-dd') = '1994-06-07';
以下的查詢方式都不對:
-- ORA-00904: "yyyy-mm-dd": 識別符號無效
WHERE to_char(hire_date, "yyyy-mm-dd") = '1994-06-07'; -- 報錯
WHERE to_char(hire_date, 'yyyy-mm-dd') = '1994-6-07'; -- 得不到正確資料
1.3、where 條件中的比較運算
賦值使用 := 符號
1、比較運算
-- 查詢薪資小於等於3000的
SELECT last_name, salary
FROM employees
WHERE salary <= 3000;
1.4、其它比較運算
1、BETWEEN
使用 BETWEEN 運算來顯示在一個區間內的值
-- 查詢薪資大於等於2500並且小於等於3500的
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
2、IN
使用 IN運算顯示列表中的值。
-- 查詢薪資等於 100或者101或者201的
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
1.5 LIKE
- 使用 LIKE 運算選擇類似的值(模糊查詢)
- 選擇條件可以包含字元或數字:
%
代表零個或多個字元(任意個字元)
。_
代表一個字元。
-- 查詢first_name 以S開頭的
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%';
1、%
和-
可以同時使用。
-- 查詢第二個字元是o的資料
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
2、可以使用 ESCAPE 識別符號 選擇%
和 _
符號。
迴避特殊符號的:使用轉義符。例如:將[%]轉為[%]、[_]轉為[_],然後再加上[ESCAPE ‘\’] 即可。
-- 查詢以 IT_ 開頭的資料。注意查詢後面需要加上 escape 。
SELECT job_id
FROM jobs
WHERE job_id LIKE 'IT\_%' escape '\';
1.6、NULL
使用 IS (NOT) NULL 判斷空值。
-- 查詢 manager_id 等於 NULL 的資料
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;
1.7、邏輯運算
1.7.1、AND
AND 要求並的關係為真。
-- 查詢salary 大於等於10000 並且 job_id 包含 MAN 的資料
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id LIKE '%MAN%';
1.7.2、OR
OR 要求或關係為真。
-- 查詢 salary 大於等於 或者 job_id 包含 MAN 的資料
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%';
1.7.3、NOT
-- 查詢 job_id 不在 ('IT_PROG', 'ST_CLERK', 'SA_REP') 列表中的資料
SELECT last_name, job_id
FROM employees
WHERE job_id
NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
1.8、優先順序
可以使用括號改變優先順序順序
2、ORDER BY子句
- 使用 ORDER BY 子句排序
ASC(ascend): 升序
DESC(descend): 降序
ORDER BY 子句在SELECT語句的結尾
。
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date ;
1、降序排序
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC ;
2、按別名排序
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
3、多個列排序
按照ORDER BY 列表的順序排序。
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
可以使用不在SELECT 列表中的列排序。
SELECT last_name, department_id
FROM employees
ORDER BY salary DESC;
select 語句表示式
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr, alias} [ASC|DESC]];
練習題:
1、選擇姓名中有字母a和e的員工姓名
select last_name
from employees
where last_name like '%a%e%' or last_name like '%e%a%'