01.SQLINDEX

SQL講座

2.1 SELECT文とは
データの検索(抽出)に使われるのがSELECT文である。SELECT文とはどういったものかということの解説。
2.2 すべての列を表示させる
SELECT文の基本型をマスターするために、最もシンプルなすべての列を表示させる方法を解説。
2.3 特定の列を表示させる
必要な列だけを表示されるために、SELECT文のSELECT句で表示させたい列の指定方法を解説。
2.4 条件に一致した情報の抽出(WHERE句)
必要な行だけを取り出すために、抽出条件(WHERE句)の記述方法を解説
2.5 特定の文字を含む情報の抽出(LIKE演算子)
パターンマッチングと言われる特定の文字や文字列を含んだデータの抽出をおこなうために使用するLIKE演算子とメタ文字の使い方の解説

SELECT 氏名,学科,年齢,性別
FROM 学籍表
★WHERE 氏名 LIKE '石%'
2.6 複合条件を指定して抽出 (AND,OR,NOT)
より高度なデータの抽出を行うために、AND、ORとNOTを使った条件式の記述方法の解説。

★SELECT 氏名,性別,学科,年齢
FROM 学籍表
WHERE (性別='女' OR 学科='公務員') AND 年齢 > 20
2.7 範囲を指定して情報を抽出する(BETWEEN)
数値の範囲を指定してデータを抽出するときに使用するBETWEEN演算子の記述方法

①SELECT 氏名,学科,年齢,性別
FROM 学籍表
WHERE 年齢 >= 19 AND 年齢<=21
②SELECT 氏名,学科,年齢,性別
FROM 学籍表
WHERE 年齢 BETWEEN 19 AND 21
③SELECT 氏名,学科,年齢,性別
FROM 学籍表
WHERE 年齢 IN(19,20,21)
2.8 並べ替え(ソート)(ORDER BY句)
抽出したデータを一定の順序で並べ替える(ソート)ときに指定するORDER BY句の記述方法

①SELECT *
FROM 学籍表
ORDER BY 年齢 ASC
② SELECT * ← すべての列を表示
FROM 学籍表
WHERE 学科='情報' ← 学科が情報を抽出する
ORDER BY 年齢 DESC ← 年齢の降順に並べ替える
2.9 重複したデータを取り除く(DISTINCT)
抽出結果で重複した行がある場合、1行にまとめて表示するDISTINCTの指定方法

SELECT DISTINCT 出身地
FROM 学籍表
3.1、表の結合
リレーショナルデータベースにおける表の結合についての解説。

① SELECT *
FROM 売上表,顧客表 ← 使用する表をすべて記述する
WHERE 売上表.顧客CD=顧客表.顧客CD

売上表の顧客CDと顧客表の顧客CDが一致する行で表を結合する
3.2、 計算式を使用する
SELECT句に計算式を記述する方法の解説

①SELECT 売上No,商品名,単価,数量, 単価*数量 ← 計算式
FROM 商品表, 売上明細
WHERE 商品表.商品CD=売上明細.商品CD ← 表の結合
3.3、表を結合し、抽出条件を指定する
表を結合して抽出条件を記述する方法の解説
①SELECT 売上No,商品名,単価,数量, 単価*数量

FROM 商品表, 売上明細
WHERE 商品表.商品CD=売上明細.商品CD AND 売上No=1

商品表の商品CDと売上明細の商品CDが一致する行で表を結合する。かつ売上Noが1であるものを抽出する
3.4、グループ化を行う(GROUP BY句)
抽出したデータをグループ化する方法の解説

① SELECT 売上No,SUM(数量) ← 売上Noと売上金額の合計
FROM 売上明細
GROUP BY 売上No ← 売上Noでグループ化を行う
②SELECT 売上No,SUM(単価*数量) ← 売上Noと売上金額合計
FROM 商品表, 売上明細
WHERE 商品表.商品CD=売上明細.商品CD

商品表と売上明細を商品CDで結合
GROUP BY 売上No ← 売上Noでグループ化を行う
3.5、グループ化されたデータを並べ替える
グループ化されたデータをORDER BY句で並べ替えをおこなう

★SELECT 売上No,SUM(単価*数量)
FROM 商品表, 売上明細
WHERE 商品表.商品CD=売上明細.商品CD←表の結合
GROUP BY 売上No ← 売上Noでグループ化をおこなう
ORDER BY SUM(単価*数量) DESC←合計金額の降順にソート
3.6、グループを抽出 (HAVING句)
GROUP BY句によってグループ化されたデータをHAVING句を指定して条件にあったグループを抽出する。

①SELECT 売上No,SUM(単価*数量) ← 売上Noと売上金額合計を表示
FROM 商品表, 売上明細
WHERE 商品表.商品CD=売上明細.商品CD ← 表の結合条件
GROUP BY 売上No ← 売上Noでグループ化をおこなう
HAVING SUM(単価*数量) >=3000 ←売上金額が3000以上の行を抽出する
3.7、列に別の名前を付ける(列の別名指定)
SELECT文の実行結果で表示される列名は、通常表の列名が表示される。しかし、列の別名指定を行うことで、列名を別の名前で表示できるようになる。

① SELECT 商品名,単価,数量,単価*数量 AS 売上金額
FROM 売上表
WHERE 日付='2003/1/3'
3.8、表に別の名前を付ける(表の別名指定)
列名と同じく表も別の名前を付けることができる。表の別名指定を行うことで、実現できる表の自己結合も併せて解説している。

① SELECT *
FROM 売上表 X, 顧客表 Y
WHERE X.顧客CD=Y.顧客CD
② SELECT 社員表.社員名,リーダー.社員名 AS リーダー
FROM 社員表,社員表 リーダー
WHERE 社員表.リーダー=リーダー.社員No
③ SELECT 社員表.社員名,リーダー.社員名 AS リーダー
FROM 社員表,社員 リーダ
WHERE 社員表.リーダー=リーダー.社員No AND
社員表.社員名 <> リーダー.社員名
3.9、抽出結果を元にさらに抽出をおこなう(副問い合わせ)
WHERE句の抽出条件にSELECT文を記述し、抽出条件にすることができる。これを副問い合わせという。副問い合わせの基本的な動作についての解説

① SELECT 顧客名
FROM 顧客表
WHERE 顧客CD=(SELECT 顧客CD FROM 売上表 WHERE 売上No=1)
3.10、表の結合と副問い合わせを組み合わせて検索
表の結合と副問い合わせを使ったデータの抽出方法の解説

SELECT 売上No,単価,数量,単価*数量
FROM 商品表,売上明細
WHERE 商品表.商品CD=売上明細.商品CD←商品表と売上明細の結合
AND 単価>=(SELECT AVG(単価) FROM 商品表)
3.11、副問い合わせの抽出結果が複数になる場合
副問い合わせの抽出結果が複数になる場合の抽出条件の記述方法の解説

① SELECT 売上No,商品名,単価,数量,単価*数量
FROM 商品表,売上明細
WHERE 商品表.商品CD=売上明細.商品CD AND
売上No IN(SELECT 売上No FROM 売上表 WHERE 日付="2001/06/27")
3.12、EXISTS述語を使った相関副問い合わせ
主問い合わせの抽出結果を副問い合わせ側で一行ずつチェックすることができる。これを相関副問い合わせという。EXISTSを指定したときのSELECT文の実行順序などを解説。

① SELECT 商品CD,商品名
FROM 商品表
WHERE EXISTS
(SELECT * FROM 売上明細 WHERE 売上明細.商品CD = 商品表.商品CD)

SELECT 商品CD,商品名
FROM 商品表
WHERE NOT EXISTS
(SELECT * FROM 売上明細 WHERE 売上明細.商品CD = 商品表.商品CD)
3.13、INNER JOIN を使って表を結合する
表の結合指定はWHERE句で指定する以外にFROM句でINNER JOINを指定して表を結合することもできる。INNER JOINを使った表の結合方法の解説。
3.1——、LEFT JOIN とRIGHT JOIN (外部結合)
表の結合には、内部結合と外部結合の2種類がある。内部結合と外部結合の違い、外部結合による表の結合方法を解説。