Oracle SELECT示例
為了方便大家更加了解和掌握Oracle Select語句,下面為大家帶來一些示例代碼。
1. 查詢單個列的數據
要從客戶(customers)表中獲取客戶名稱(name)列,請使用以下語句:

2. 查詢多個列的數據
要從多個列查詢數據,請指定一個以逗號分隔的列名稱列表。

3. 查詢表中所有列的數據
以下示例將檢索customers表的所有列中的數據,列出所有列的名稱,如下所示:

Oracle Order By用法詳解
在Oracle中,ORDER BY子句可以用來對一列或多列的結果集按升序或降序進行排序。本文,將為大家帶來ORDER BY子句的具體用法。
Oracle ORDER BY子句基本用法
在Oracle中,表中是以非指定順序存儲行數據記錄的,它不管行插入數據庫的順序如何。要按列以升序或降序查詢行記錄,必須明確指示Oracle數據庫要如何去排序。
例如,您可能希望按名稱的字母順序列出所有客戶,或者按照從最低到最高信用限額的順序顯示所有客戶。
要對數據進行排序,我們可以將ORDER BY子句添加到SELECT語句中,參考以下語法:
SELECT
column_1,
column_2,
column_3,
...
FROM
table_name
ORDER BY
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
要按列排序結果集,可以在ORDER BY子句之后列出該列。
按照列名是一個排序順序,可以是:
- ASC表示按升序排序
- DESC表示按降序排序
默認情況下,無論是否指定ASC,ORDER BY子句都按升序對行進行排序。如果要按降序對行進行排序,請明確使用DESC。
NULLS FIRST在非NULL值之前放置NULL值,NULLS LAST在非NULL值之后放置NULL值。
ORDER BY子句可以按多列對數據進行排序,每列可能有不同的排序順序。
請注意,ORDER BY子句總是SELECT語句中的最后一個子句。
1. 按列排序行示例
要按照字母順序按升序排列客戶名稱,請使用以下語句:

要按字母順序降序排列客戶名稱,請在ORDER BY子句中的列名之后顯式使用DESC,如下所示:

2. 按多個列排序行示例
要對多列進行排序,可以用逗號分隔ORDER BY子句中的每列。

在上面的這個結果中:
首先,按job進行升序排序。
其次,如果job相同,按ename 降序排列
3. 按列位置排序行示例
不需要指定用於排序數據的列名稱。如果您願意,可以使用ORDER BY子句中列的位置。
請參考下語句:
SELECT name, credit_limit,address
FROM customers
ORDER BY 2 DESC, 1;
在這個例子中,name列的位置是1,credit_limit列的位置是2。相當於以下查詢語句:
SELECT name, credit_limit,address
FROM customers
ORDER BY credit_limit DESC, name;
4.用NULL值排序行的示例

當使用非NULL值對混合NULL進行排序時,Oracle允許指定哪個應該首先出現。

要放置NULL值在后面,可以使用NULLS LAST,如下面的語句所示:

5. 按函數或表達式排序數據
ORDER BY子句可在一列上應用一個函數,例如字符串函數,數學函數等,並按函數的結果對數據進行排序。
例如,以下語句使用ORDER BY子句中的UPPER()函數來區分客戶名稱的大小寫:
SQL> select empno,ename,comm from emp order by upper(ename);

Oracle Distinct用法
SELECT DISTINCT可以用來過濾結果集中的重復行,確保SELECT子句中返回指定的一列或多列的值是唯一的。本文將為大家帶來SELECT DISTINCT的具體用法。
Oracle SELECT DISTINCT用法
SELECT DISTINCT語句的語法如下:
SELECT DISTINCT
column_1
FROM
table_name;
DISTINCT子句只能在SELECT語句中使用。
請注意,DISTINCT不是SQL標准的UNIQUE的同義詞。總是使用DISTINCT而不使用UNIQUE是一個好的習慣。
Oracle DISTINCT示例
下面來看看如何使用SELECT DISTINCT來看看它是如何工作的一些例子。
1. Oracle DISTINCT在一列上應用的例子
以下示例檢索所有聯系人的名字:

2. Oracle DISTINCT應用多列示例

在此示例中,
job,ename列的值都用於評估結果集中行的唯一性。
3. Oracle DISTINCT和NULL
DISTINCT將NULL值視為重復值。如果使用SELECT DISTINCT語句從具有多個NULL值的列中查詢數據,則結果集只包含一個NULL值。

正如上圖所看到的,只返回一個NULL值。
Oracle Where子句用法
Oracle WHERE子句簡介
WHERE子句指定SELECT語句返回符合搜索條件的行記錄。下面說明了WHERE子句的語法:
SELECT
column_1,
column_2,
...
FROM
table_name
WHERE
search_condition
ORDER BY
column_1,
column_2;
WHERE子句出現在FROM子句之后但在ORDER BY子句之前。在WHERE關鍵字之后是search_condition - 它定義了返回行記錄必須滿足的條件。
除了SELECT語句之外,還可以使用DELETE或UPDATE語句中的WHERE子句來指定要更新或刪除的行記錄。
Oracle WHERE示例
1. 通過使用簡單的相等運算符來查詢行記錄

2. 使用比較運算符選擇行記錄
編號 | 運算符 | 描述 |
---|---|---|
1 | = |
等於 |
2 | != ,<> |
不等於 |
3 | > |
大於 |
4 | < |
小於 |
5 | >= |
大於或等於 |
6 | <= |
小於或等於 |
7 | IN | 等於值列表中的任何值 |
8 | ANY/SOME/ALL | 將值與列表或子查詢進行比較。它必須以另一個運算符(例如:= ,> ,< )作為前綴。 |
9 | NOT IN | 不等於值列表中的任何值 |
10 | [NOT] BETWEEN n AND m | 相當於[Not] >= n 且 <= y 。 |
11 | [NOT] EXISTS | 如果子查詢返回至少一行,則返回true |
12 | IS [NOT] NULL |
測試NULL 的值 |
選擇包含值的行作為字符串的一部分
SQL> select * from emp where ename like 'SCO%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7788 SCOTT ANALYST 7566 1987/4/19 3000.00 20
Oracle And or子句
Oracle AND是一個邏輯運算符,可以用來組合兩個或更多的布爾表達式。本文就將為大家帶來Oracle AND的使用方法。
Oracle AND運算符語法
AND運算符是一個邏輯運算符,它組合了布爾表達式,如果兩個表達式都為真,則返回true。 如果其中一個表達式為假,則AND運算符返回false。
AND運算符的語法如下所示:
expression_1 AND expression_2
1. Oracle AND結合兩個布爾表達式的例子
以下示例查找具有客戶編號為2的那些狀態為掛起(Pending)的訂單:
SELECT order_id, customer_id, status, TO_CHAR(order_date,'YYYY-MM-DD') AS order_date
FROM orders
WHERE status = 'Pending' AND customer_id = 2
ORDER BY order_date;
2. Oracle AND結合兩個以上的布爾表達式的例子
可以使用多個AND運算符來組合布爾表達式。
參考以下查詢語句:
SELECT
order_id,
customer_id,
status,
TO_CHAR(order_date, 'YYYY-MM-DD') AS order_date
FROM
orders
WHERE
status = 'Shipped'
AND salesman_id = 60
AND EXTRACT(YEAR FROM order_date) = 2017
ORDER BY
order_date;
3. Oracle AND與OR運算符結合示例
可以將AND運算符與其他邏輯運算符(如OR和NOT)組合,以形成一個條件。
SELECT
order_id,
customer_id,
status,
salesman_id,
TO_CHAR(order_date, 'YYYY-MM-DD') AS order_date
FROM
orders
WHERE
(status = 'Canceled' OR status = 'Pending')
AND customer_id = 44
ORDER BY
order_date;
Oracle Fetch子句
FETCH子句在Oracle中可以用來限制查詢返回的行數,本教程將教大家如何使用FETCH子句。
Oracle FETCH子句語法
以下說明了行限制子句的語法:
[ OFFSET offset ROWS]
FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]
OFFSET子句
OFFSET子句指定在行限制開始之前要跳過行數。OFFSET子句是可選的。 如果跳過它,則偏移量為0,行限制從第一行開始計算。
偏移量必須是一個數字或一個表達式,其值為一個數字。偏移量遵守以下規則:
如果偏移量是負值,則將其視為0。
如果偏移量為NULL或大於查詢返回的行數,則不返回任何行。
如果偏移量包含一個分數,則分數部分被截斷。
FETCH子句
FETCH子句指定要返回的行數或百分比。
為了語義清晰的目的,您可以使用關鍵字ROW而不是ROWS,FIRST而不是NEXT。 例如,以下子句的行為和產生的結果相同:
FETCH NEXT 1 ROWS
FETCH FIRST 1 ROW
ONLY | WITH TIES選項
僅返回FETCH NEXT(或FIRST)后的行數或行數的百分比。
WITH TIES返回與最后一行相同的排序鍵。請注意,如果使用WITH TIES,則必須在查詢中指定一個ORDER BY子句。如果不這樣做,查詢將不會返回額外的行。
Oracle FETCH子句實例
1. 獲取前N行記錄的示例
以下語句返回庫存量最高的前10個產品:
-- 以下查詢語句僅能在Oracle 12c以上版本執行
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 5 ROWS ONLY;
2. WITH TIES示例
以下查詢使用WITH TIES選項的行限制子句:
-- 以下查詢語句僅能在Oracle 12c以上版本執行
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 10 ROWS WITH TIES;
即使查詢請求了10行數據,因為它具有WITH TIES選項,查詢還返回了另外兩行。 請注意,這兩個附加行在quantity列的值與第10行quantity列的值相同。
Oracle In子句
Oracle IN運算符可以用來確定值是否與列表或子查詢中的任何值相匹配,本文就將為大家帶來Oracle IN運算符的具體用法。
Oracle IN語法:
確定表達式是否與值列表匹配的Oracle IN運算符的語法如下所示:
expression [NOT] IN (v1,v2,...)
並且表達式的語法與子查詢匹配:
expression [NOT] IN (subquery)
參數
在上面語法中,這里將介紹每個參數含義:
expression - 該表達式(expression)是任何有效的表達式,它可以是要匹配的表的列。
v1, v2, v3.. - IN運算符后面是逗號分隔值列表,用於測試匹配。所有值必須與表達式具有相同的數據類型。
subquery - 子查詢返回一列的結果集以測試匹配。該列還必須具有與表達式相同的數據類型。
返回值
如果表達式(expression)的值等於值列表中的任何值或由子查詢返回的結果集,則IN運算符返回true。 否則,它返回false。
NOT運算符否定IN運算符的結果。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">