1. 程式人生 > >Oracle入門(十三A)之Select

Oracle入門(十三A)之Select

一、資料查詢語句
(1)select語句完整的句法
select 目標表的列名或列表達式序列
from 基本表名和(或)檢視序列
[ where 行條件表示式 ]
[ group by 列名序列
 [ having 組條件表示式 ] ]

[ order by 列名[ asc|desc ],… ]

(2)SQL語句的書寫方式
  • 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;