Oracle 查詢基礎


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;">


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM