首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 入門筆記 Day 3:常用內建函數、多表聯結、集合運算與進階查詢技巧

     編輯:Oracle 資料庫基礎

一、字串函數

函數說明範例結果
UPPER(str)轉大寫UPPER('abc')ABC
LOWER(str)轉小寫LOWER('ABC')abc
INITCAP(str)首字大寫INITCAP('hello world')Hello World
LENGTH(str)字串長度LENGTH('Oracle')6
SUBSTR(str, m, n)子字串(從 m 起取 n 字元)SUBSTR('Oracle', 2, 3)rac
INSTR(str1, str2)搜尋 str2 在 str1 位置INSTR('Oracle', 'ra')3
REPLACE(str, old, new)取代REPLACE('Jack', 'J', 'B')Back
TRIM/LTRIM/RTRIM去除空白/指定字元TRIM(' hi ')hi
LPAD/RPAD(str, len, pad)左/右填充LPAD('7', 3, '0')007
CONCAT(str1, str2)串接(同 ||)CONCAT('A','B')AB
ASCII(str)首字元 ASCII 碼ASCII('A')65

二、數值函數

函數說明範例
ABS(n)絕對值ABS(-5)=5
MOD(m, n)餘數MOD(10,3)=1
ROUND(n, m)四捨五入保留 m 位小數ROUND(1.567,2)=1.57
TRUNC(n, m)截斷保留 m 位小數TRUNC(1.567,2)=1.56
CEIL/FLOOR無條件進位/捨去CEIL(1.1)=2
POWER/SQRT次方/平方根POWER(2,3)=8

三、日期函數

重要:日期相減 = 天數差(數值),如 SYSDATE - hiredate。

四、轉換函數

函數說明範例
SYSDATE目前日期時間SELECT SYSDATE FROM dual;
ADD_MONTHS(d, n)加減 n 月ADD_MONTHS(SYSDATE, 3)
MONTHS_BETWEEN(d1, d2)月份差(數值)MONTHS_BETWEEN('2024-12-31','2024-01-01')≈11.97
NEXT_DAY(d, '星期')下一個指定星期NEXT_DAY(SYSDATE, 'FRIDAY')
LAST_DAY(d)該月最後一天LAST_DAY(SYSDATE)
ROUND/TRUNC(date, 'fmt')日期四捨五入/截斷ROUND(SYSDATE, 'MONTH')
函數說明常用格式元素
TO_CHAR(date/num, 'fmt')轉字串YYYY, MM, DD, HH24, MI, SS, DAY, MON, DY, FM(抑制空白)
TO_DATE(str, 'fmt')字串轉日期同上
TO_NUMBER(str, 'fmt')字串轉數值9, 0, ., ,, $, C, L

範例:TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') → '2024-01-15 14:30:05'

五、多表聯結

類型語法特徵結果
笛卡爾積無 JOIN 條件M×N 列,通常為錯誤
內部聯結INNER JOIN ... ON 或 WHERE a.id=b.id僅符合條件的列
左外部聯結LEFT JOIN ... ON左表全保留,右表無配對則 NULL
右外部聯結RIGHT JOIN ... ON右表全保留
完整外部聯結FULL JOIN ... ON雙表全保留
自聯結表別名 + 條件關聯自身階層/上下級查詢

ANSI 語法範例:

SELECT e.ename, d.dname
FROM emp e
LEFT JOIN dept d ON e.deptno = d.deptno;

六、集合運算

運算子說明重複列
UNION聯集去除
UNION ALL聯集保留
INTERSECT交集去除
MINUS差集(第一組減第二組)去除

規則:欄位數、型別、順序必須一致;ORDER BY 僅能放在最後。

七、進階查詢:子查詢與巢狀查詢

  • 查詢區塊:一個 SELECT 陳述式
  • 子查詢:出現在 WHERE, FROM, SELECT 列表中的 SELECT
  • 不相關子查詢:獨立執行,結果作為常數/集合供外層使用
  • 相關子查詢:參考外層查詢欄位,每列執行一次
-- 不相關:查詢薪資高於平均的員工
SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp);

-- 相關:查詢各部門薪資最高的員工
SELECT * FROM emp e1
WHERE sal = (SELECT MAX(sal) FROM emp e2 WHERE e2.deptno = e1.deptno);

-- 純量子查詢(SELECT 列表)
SELECT ename, (SELECT dname FROM dept WHERE deptno = e.deptno) AS dept_name
FROM emp e;

-- 內嵌視圖(FROM 子句)
SELECT deptno, avg_sal
FROM (SELECT deptno, AVG(sal) avg_sal FROM emp GROUP BY deptno)
WHERE avg_sal > 2000;

結語

熟練掌握內建函數(特別是日期/字串轉換)、ANSI JOIN 語法、集合運算特性與子查詢相關性,是撰寫高可讀、高效能 SQL 的關鍵。建議養成「先用 CTE (WITH) 拆解複雜邏輯,再組合」的習慣。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved