Oracle入門(十三A)之Select
阿新 • • 發佈:2019-01-22
一、資料查詢語句
(1)select語句完整的句法
– 列出所有要查詢的表
– 表格關係在Where中指出,n個表有n-1個等值關係式
查詢結果包含不符合連線條件的元組
左外連線:
select pmid,pdate,sname,pstate from t_main_procure
a,t_supplier b where a.sid=b.sid(+);
(1)select語句完整的句法
select 目標表的列名或列表達式序列(2)SQL語句的書寫方式
from 基本表名和(或)檢視序列
[ where 行條件表示式 ]
[ group by 列名序列
[ having 組條件表示式 ] ][ order by 列名[ asc|desc ],… ]
- SQL 語句不區分大小寫
- 關鍵字不能簡寫或分行
- 子句通常分行書寫
- SELECT,FROM必須有
(3)DUAL 表
select sysdate from dual;
DUAL 表具有一個稱為“X”的行,一個稱為“DUMMY”的列。
DUAL 表用於建立SELECT 語句並執行不與特定資料庫表直接相關的命令。
(4)列別名
- 可用來重新命名列標題
- 有助於計算
- 緊跟在列名後面
- 列名和別名之間可以具有可選的關鍵字AS
- 如果別名包含空格、特殊字元或者區分大小寫,則需要將別名放在雙引號中
(5)NULL
在SQL 中,NULL 是一個有趣的詞。要了解NULL,您必須先弄清楚NULL 是什麼以及NULL 不是什麼。
Null 指不可用、未分配、未知或不適用的值。
- Null 不同於零或空格。在SQL 中,零是一個數字,而空格是一個字元。
- 在條件語句中判斷是否為null is null / is not null
(6)LIKE
- 百分比(%) 和下劃線(_) 這兩個符號稱為萬用字元
- 當需要完全匹配含有% 或_ 字元的字串時,需要指出% 或_ 不是萬用字元,而是搜尋項的一部分。ESCAPE 選項反斜槓(\) 用來表示_ 或% 是名稱的一部分,而不是萬用字元值。
(7)替代變數
- 有時,可能需要以多個不同的值運行同一查詢,以獲得不同的結果集。試想一下,如果您需要查一個一個的使用者的資訊,每次都要編寫類似的語句,會不會很麻煩呢?
- &變數名
注意:僅用於SQL *Plus或者用於原理和SQL *Plus相同的開發工具
(8)單行函式
select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;
二、多表格查詢
定義
將兩個或兩個以上的表格,按照一定的關係連線起來進行查詢。
多表格查詢分類
- 連線查詢
- 巢狀查詢
- 集合查詢
三、連線查詢
(1)等值連線查詢
– 指定列所屬的表格SELECT table1.column, table2.column,..., tablen.column FROM table1, table2,..., tablen WHERE table1.column1 = table2.column2 .. and tablen-1.column1 = tablen.column2;
– 列出所有要查詢的表
– 表格關係在Where中指出,n個表有n-1個等值關係式
(2)兩表連線查詢例子
查詢商品資訊,顯示型別名稱。
select gname,gtname,gprice,gstocks
from t_goods,t_gtype
where t_goods.gtid=t_gtype.gtid;
(3)外連線查詢結果包含不符合連線條件的元組
左外連線:
select pmid,pdate,sname,pstate from t_main_procure
a,t_supplier b where a.sid=b.sid(+);
四、巢狀查詢
定義:將一個查詢語句巢狀在另一個查詢語句的Where或Having中的查詢語法:
select select_list
from table
where expr operator
(select select_list
from table);
查詢本月有進貨記錄的供應商資訊
select sid, sname
from t_supplier
where sid in (select sid from
t_main_procure
where to_char(pdate,'yyyymm')=to_char(sysdate,'yyyymm'));
五、集合查詢
定義:多個SELECT語句的結果進行
集合操作
分類
- 並操作 UNION
- 交操作 INTERSECT
- 差操作 MINUS
(1)並操作 UNION
得到前後兩個查詢結果的和
UNION-查詢結果不包括重複值
select pmid, sname, pdate, pdate, pamount , ’採購’
from t_main_procure a, t_supplier b
where a.sid=b.sid
union
select omid,uname, odate,oamount,ostate,’訂單’
from t_main_order a, t_user b
where a.uiid=b.uiid;