UNION :テーブルの足し算
1 2 3 |
SELECT 文 UNION SELECT 文 |
<記入例>
1 2 3 |
SELECT item_id, item_name FROM Item UNION SELECT item_id, item_name FROM Item2; |
【UNION ALL:)重複行を排除しない】
1 2 3 |
SELECT 文 UNION ALL SELECT 文 |
INTERSECT : テーブルの共通部分の選択
1 2 3 |
SELECT 文 INTERSECT SELECT 文 |
MINUS : レコードの引き算
1 2 3 |
SELECT 文 MINUS SELECT 文 |
INNER JOIN : 内部結合
*列の値が両方のテーブルに存在する行を取得
1 2 |
SELECT <列名> FROM <テーブル名1> INNER JOIN <テーブル名2> ON <テーブル名1>.<キーの列名> = <テーブル名2>.<キーの列名>; |
*複数の結合キーを指定するために、AND、OR を使うことも可。
*ON句は FROM と WHERE の間に書く。
LEFT [RIGHT] OUTER JOIN :外部結合
*基準となっているテーブルの全行を取得
((紐づけ先が無い)は NULL で表示)
1 2 3 |
OUTER JOIN " lang="default" decode="true" ]SELECT <列名> FROM <テーブル名> LEFT[RIGHT] OUTER JOIN <結合するテーブル名> ON <テーブル名>.<列名> = <テーブル名>.<列名> |
CROSS JOIN :クロス結合
*結合したテーブルの全ての組み合わせが選択(実際ほとんど使われない)
1 |
SELECT <列名> FROM <テーブル名> CROSS JOIN <結合するテーブル名> |
内部結合の古い構文
*一応参考として記載。
1 2 3 |
SELECT <列名> FROM <テーブル名>, <結合するテーブル名> WHERE <テーブル名>.<結合キー> = <結合するテーブル名>.<結合キー>; |
ビュー
任意の SELECT 文の結果を仮想的な表として保存する機能。
(データそのものを保存するのではなく、データを取り出す SELECT 文だけを保存する方法)
【ビュー作成】
1 2 |
CREATE VIEW <ビュー名> AS SELECT <列名> FROM <表名> [WHERE、JOIN 等]; |
<作成例>
1 2 3 4 5 6 |
CREATE VIEW ItemView AS SELECT SI.shop_id, SI.shop_name, SI.item_id, I.item_name, I.sel_price, SI.quantity, StI.stock FROM ShopItem SI INNER JOIN Item I ON SI.item_id = I.item_id INNER JOIN StockItem StI ON SI.item_id = StI.item_id WHERE StI.house_id = 'S001'; ; |
【ビューの中身を表示】
1 |
SELECT * FROM <ビュー名>; |
【ビューの上書き】
1 2 |
CREATE OR REPLACE VIEW <ビュー名> AS SELECT <列名> FROM <表名> [WHERE、JOIN 等]; |
【 ビューの削除】
1 |
DROP VIEW <ビュー名>; |
【ビュー利用時の注意点】
1.関数や式を使った SELECT 文に対してビューを設定する場合 → 別名をつける。
2.ビューに対する更新ルール(代表的な条件)
① SELECT 句に DISTINCT が含まれていない
② FROM 句に含まれるテーブルが 1 つだけである
③ GROUP BY 句を使用していない
④ HAVING 句を使用していない
サブクエリ:SELECT文の入れ子構造
「使い捨てのビュー」みたいなもの。(*SELECT 文をそのまま FROM 句に書く。)
*サブクエリ(subquery)の意味 →「下位の(sub)」の「問い合わせ(query)」
1 2 3 |
SELECT <列名>, …… FROM (SELECT 文) [WHERE JOIN 等]; |
スカラ・サブクエリ:単一の戻り値を返す
*スカラ値( 1 行 1 列だけの戻り値)が書けるところにはどこにでも書ける。
1 2 3 4 5 |
--WHERE 句に集約関数は使えない SELECT <列名>, ……… FROM <テーブル名> WHERE <比較する列名> > (SELECT AVG(<計算したい列名>) FROM <テーブル名>); |
↑今回は平均値と比較という例文。
平均値の戻り値は1つだけとなるのでWHERE句で比較可能。
相関サブクエリ:一部のレコード集合に限定した比較
テーブル全体ではなく、テーブルの一部のレコード集合に限定した比較をしたい場合に使用。
関連記事
Oracle研修1:データベースの概要とOracleの特徴、ユーザーと権限
Oracle研修2:SQLのデータ型。テーブルの作成、変更、削除。 列の追加、変更、削除。
Oracle研修3: INSERT 文、SELECT文、UPDATE 文、DELETE文、TRUNCATE 文
ピンバック: Oracle研修6:インデックス, シーケンス, トランザクションとロック , セーブポイント – 原始人みかこのIT奮闘記