注意
例子
SELECT last_name ||
FROM employees
where first_name like
通用函數
空值是無效的
這些函數適用於任何數據類型
NVL (expr
NVL
NULLIF (expr
COALESCE (expr
(
(
(
(
條件表達式在SQL語句中使用IF
–DECODE函數 DECODE ( col | expression
分組函數
分組函數作用於一組數據
組函數語法
SELECT [column
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
注意
(所用包含於SELECT列表中
但包含在GROUP BY 子句中的列不必包含在SELECT列表中
且可以在在GROUP BY子句中包含多個列
不能在WHERE子句中使用組函數
使用HAVING過濾分組
SELECT column
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
子查詢
語法
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
注意
子查詢的結果被主查詢使用(外查詢)
子查詢要包含在括號內
將子查詢放在比較條件的右側
除非進行Top
單行操作符對應單行子查詢
單行操作符operator
= 等於 IN 等於列表中的任何一個
> 大於 ANY 和子查詢返回的任意一個值比較
>= 大於等於 ALL 和子查詢返回的所有值比較
< 小於 EXISTS 功能等價於IN
<= 小於等於
<> 不等於
DECODE和CASE
在子查詢中使用HAVING子句
SELECT select_list
FROM table
[GROUP BY group_by_expression]
[HAVING group_condition] expr operator
(SELECT select_list
FROM table);
在FROM子句中使用子查詢
SELECT a
FROM employees a
FROM employees
GROUP BY department_id) b
WHERE a
AND a
有兩個簡單例子
T
T
exists 用法
請注意
其中
但是
因此
in 的用法
繼續引用上面的例子
這裡的
打個比方
EXISTS操作符
EXISTS 操作符檢查在子查詢中是否存在滿足條件的行
– 不在子查詢中繼續查找
– 條件返回TRUE
– 條件返回FALSE
– 繼續在子查詢中查找
相關子查詢
相關子查詢按照一行接一行的順序執行
SELECT column
FROM table
WHERE columnk operator (SELECT colum
FROM table
WHERE expr= outer
相關更新
使用相關子查詢依據一個表中的數據更新另一個表的數據
UPDATE table
SET column = (SELECT expression
FROM table
WHERE lumn = lumn);
相關刪除
使用相關子查詢依據一個表中的數據刪除另一個表的數據
DELETE FROM table
WHERE column operator (SELECT expression
FROM table
WHERE lumn = lumn);
WITH子句
我們可以使用WITH Clause來定義一個query block
WITH子句應用舉例
WITH
dept_costs AS (SELECT d
FROM employees e
WHERE e
GROUP BY d
avg_cost AS (SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM dept_costs)
SELECT *
FROM dept_costs
WHERE dept_total > (SELECT dept_avg
FROM avg_cost)
ORDER BY department_name;
GROUP BY 擴展
帶有ROLLUP和CUBE操作的GROUP BY子句
注
ROLLUP操作符
SELECT [column
FROM table
[WHERE condition]
[GROUP BY [ROLLUP] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
CUBE操作符
SELECT [column
FROM table
[WHERE condition]
[GROUP BY [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
GROUPING函數
SELECT [column
FROM table
[WHERE condition]
[GROUP BY [ROLLUP] [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
GROUPING SETS
– 只進行一次分組即可
– 不必書寫復雜的UNION語句
– GROUPING SETS中包含的分組項越多性能越好
以下例子實現了對department_id
SELECT department_id
FROM employees
GROUP BY GROUPING SETS ((department_id
復合列
例如
連接分組集
例如
例如
From:http://tw.wingwit.com/Article/program/Oracle/201311/18505.html