-- 標準 SCOTT 結構
CONN scott/tiger
-- 或任意結構建立 EMP/DEPT 表並插入標準測試資料
SELECT * FROM emp WHERE deptno = 30;
SELECT ename, empno, deptno FROM emp WHERE job = 'CLERK';
SELECT * FROM emp WHERE comm > sal;
SELECT * FROM emp WHERE comm > sal * 0.6;
SELECT * FROM emp
WHERE (job = 'MANAGER' AND deptno = 10)
OR (job = 'CLERK' AND deptno = 20);
SELECT * FROM emp
WHERE (job = 'MANAGER' AND deptno = 10)
OR (job = 'CLERK' AND deptno = 20)
OR (job NOT IN ('MANAGER','CLERK') AND sal >= 2000);
SELECT DISTINCT job FROM emp WHERE comm > 0;
SELECT * FROM emp WHERE comm IS NULL OR comm < 100;
SELECT * FROM emp
WHERE hiredate = LAST_DAY(hiredate) - 2;
-- LAST_DAY 回傳該月最後一天
SELECT * FROM emp
WHERE MONTHS_BETWEEN(SYSDATE, hiredate) >= 144;
SELECT INITCAP(ename) FROM emp;
SELECT ename FROM emp WHERE LENGTH(ename) = 5;
SELECT ename FROM emp WHERE ename NOT LIKE '%R%';
SELECT SUBSTR(ename, 1, 3) FROM emp;
-- SUBSTR(str, start, length);start 從 1 開始
SELECT REPLACE(ename, 'A', 'a') FROM emp;
SELECT ename, hiredate FROM emp
WHERE MONTHS_BETWEEN(SYSDATE, hiredate) >= 120;
SELECT * FROM emp ORDER BY ename;
SELECT ename, hiredate FROM emp ORDER BY hiredate;
SELECT ename, job, sal FROM emp ORDER BY job DESC, sal;
SELECT ename, TO_CHAR(hiredate, 'YYYY-MM') AS yr_mo
FROM emp
ORDER BY TO_CHAR(hiredate, 'MM'), TO_CHAR(hiredate, 'YYYY');
SELECT TRUNC(sal/30, 0) AS daily_sal FROM emp;
-- TRUNC 截斷,ROUND 四捨五入
SELECT * FROM emp WHERE TO_CHAR(hiredate, 'MM') = '02';
SELECT TRUNC(SYSDATE - hiredate) AS days_employed FROM emp;
-- 日期相減 = 天數 (含小數),TRUNC 取整數
SELECT ename FROM emp WHERE ename LIKE '%A%';
SELECT TO_CHAR(
TO_DATE('0001-01-01','YYYY-MM-DD') + (SYSDATE - hiredate) - 365 - 31 - 1,
'YYYY-MM-DD') AS service_years
FROM emp;
-- 技巧:利用日期運算模擬年月日差,實際建議用 MONTHS_BETWEEN 計算年/月
| 函數 | 用途 | 範例 |
|---|---|---|
INITCAP | 首字大寫 | INITCAP('hello')='Hello' |
LENGTH | 字串長度 | LENGTH('Oracle')=6 |
SUBSTR | 子字串 | SUBSTR('ABCDE',2,3)='BCD' |
REPLACE | 取代 | REPLACE('JACK','J','B')='BACK' |
LAST_DAY | 月最後一天 | LAST_DAY(SYSDATE) |
MONTHS_BETWEEN | 月份差 | MONTHS_BETWEEN(d1,d2) |
TO_CHAR(date,'fmt') | 日期轉字串 | TO_CHAR(SYSDATE,'YYYY-MM') |
TRUNC(num,0) | 截斷整數 | TRUNC(123.45,0)=123 |
這 25 題涵蓋 WHERE 過濾、字串/日期/數值函數、排序、條件邏輯等 SQL 核心技能。建議實際在 SCOTT 環境逐題執行,觀察執行計畫與結果集,將語法內化為肌肉記憶。