トップページ > コンテンツ > データベース関連メモ > SQL表現

主要なSQL表現一覧

■SELECT系

SQL表現 構文利用イメージ 説明
SELECT SELECT 列名 FROM テーブル ・・・ テーブルから、列名で指定した属性の射影を取得
DISTINCT SELECT DISTINCT 列名 FROM テーブル ・・・ 重複が無いようにする。
AS SELECT 列名 AS 別列名 FROM テーブル ・・・ 属性名の付け替えを行う
WHERE SELECT * FROM テーブル WHERE 列名 = "XXX" 条件
AND SELECT * FROM テーブル WHERE 列名A = "XXX" AND 列名B = "YYY" 両方
OR SELECT * FROM テーブル WHERE 列名A = "XXX" OR 列名B = "YYY" どちらか
NOT SELECT * FROM テーブル WHERE NOT 列名 = "XXX" (1-x)
BETWEEN SELECT * FROM テーブル WHERE 列名 BETWEEN 1 AND 3 AとBの間
LIKE SELECT * FROM テーブル WHERE 列名 LIKE "%XXX%" 文字列のパターンを決める。WHEREの条件の詳細に使う。%任意文字列,_任意文字
ORDER BY SELECT * FROM テーブル WHERE 列名 = "XXX" ORDER BY 列名2 DESC 並べ替え。ASCとDESC等を指定できる
GROUP BY SELECT 列名A,集計関数(列名B) FROM テーブル GROUP BY 列名1 グループ化。種類ごとの平均を求めたりするのに使える
PARTITION BY SELECT *,集計関数() OVER(PARTITION BY 分類したい属性名) FROM テーブル名 グループ単位でまとめた行を表示する。GROUP BYと異なり、1つのグループを1レコードに集約しない。
HAVING SELECT 列名A,集計関数(列名B) FROM テーブル GROUP BY 列名1 HAVING 条件 GROUP BYの後につけ、グループ化したものに対して条件を付けて絞り込むことができる

■副問い合わせ系

SQL表現 構文利用イメージ 説明
IN<リレーション> SELECT * FROM テーブル IN("項目A","項目B") 副問い合わせ(括弧のこと。問い合わせ結果を利用した問い合わせ)において、
リレーションの中身の条件の一部として使われる。
通常 属性 IN(項目A,項目B)と書くのとWHERE (属性=項目A OR 属性=項目B)と書くのはほぼ同じ意味。
EXISTS<リレーション> SELECT * FROM テーブル WHERE EXISTS(副問い合わせ) リレーションが存在するときのみ使用可能。複数テーブルから絞り込む時はinと似ている。inとの違いはこちらのサイトが分かり良さそう。
ANYまたはSOME<リレーション> SELECT * FROM テーブル WHERE 項目 > ANY(副問い合わせ) リレーションの中のいずれか一つずつと比較して、条件に合致するものを抽出。
ALL<リレーション> SELECT 項目名 FROM 表名 WHERE 項目 > ALL(副問い合わせ) 最大、最小のものを導き出す時に良く使える。
UNION (副問い合わせ)UNION(副問い合わせ) 和。
二つの副問い合わせ結果のどちらか一方にあれば表示する。
distinctをつけなくとも、同じ行は自動で省いてくれる。同じ行も含むようにしたい場合にはUNION ALLとする。
EXCEPT (副問い合わせ)EXCEPT(副問い合わせ) 差。
二つの表の一方に含まれるものを表示。最初の副問い合わせ結果から次の副問い合わせ結果を除いたもの。
INTERSECTION (副問い合わせ)INTERSECTION(副問い合わせ) 積。交差(共通部分)。
二つの副問い合わせ結果のどちらともにあれば表示する。

■表結合系

JOIN SELECT 列名 FROM テーブル名A LEFT OUTER JOIN テーブル名B ON 条件 自然結合等はNATURAL JOINで表される。
Θ結合の場合はJOIN 結合するもの ON 結合条件。
ON 結合条件の所はUSING 結合条件で指定する場合もある。
USINGとONの違いはこちらのサイト参照。

結合の種類には以下のようなものがある。
・INNER JOIN ON(内部結合。NULL値は表示しない。)
・LEFT JOIN ON(外部結合。左側に記載したテーブルはNULL値であっても表示)
・RIGHT JOIN ON(外部結合。右側に記載したテーブルはNULL値であっても表示),
・FULL JOIN ON(外部結合。どちらのテーブルもNULL値でも表示)
・CROSS JOIN(直積結合。両方のテーブルの全ての組み合わせで結合。上4つと比べると使用頻度は低め)
自己結合 SELECT X.列名 AS 列名X,Y.列名 AS 列名Y FROM テーブル X,テーブル Y WHERE 条件 1つのテーブルを2つのテーブルのようにみなして結合する場合は左記のように表現することができる。SELECT DISTINCT X.列名 AS 列名,Y.列名 AS 列名 FROM テーブル X,テーブル Y;とすると、直積結合のような形になる。
INSERT INTO INSERT INTO<リレーション> VALUES<値のリスト=タプル> 挿入できる。SQL実行結果をそのまま挿入する場合にはINSERT INTO <リレーション> SELECT ~ FROM…となる。

■データ削除系

DELETE DELETE FROM<リレーション> 削除できる

■データ更新系

UPDATE UPDATE<リレーション> SET<属性にセットするリスト> 値等の更新が行える

■テーブル構造系

CREATE TABLE CREATE TABLE(名前)(<テーブル要素のリスト>) リレーションの宣言
DROP TABLE DROP TABLE(名前) リレーションをデータベーススキーマから削除
ALTER TABLE ALTER TABLE(名前)(変更内容) テーブル定義の変更
PRIMARY KEY,UNIQUE CREATE TABLE(名前)(カラム名 型名 PRIMARY KEY) 一つの属性がキーのときに使用
NOT NULL CREATE TABLE(名前)(カラム名 型名 NOT NULL) その属性はNULL禁止の宣言
DEFAULT CREATE TABLE(名前)(カラム名 型名 DEFAULT 'デフォルト値') 属性に値が無かったときのデフォルト値

■権限系

GRANT 権限 ON テーブル TO ユーザ 権限をユーザに付与する
REVOKE 権限 ON テーブル FROM ユーザ 権限をユーザから剥奪する

■その他

CREATE VIEW CREATE VIEW<名前> AS<問い合わせ> 他のテーブルを使って定義される仮想テーブル
CASE SELECT 変数名A CASE 変数名B WHEN 値 THEN 値 END CASE文を使って、条件分岐できる
WITH WITH [RECURSIVE] 名前 AS<リレーション1> <リレーション2> リレーション1でのテーブルに名前をつけて、リレーション2以降で利用できる
TRUNCATE TRUNCATE TABLE テーブル名 テーブルから全ての行を削除する
COALESCE SELCT 列名A,COALESCE(引数1[カラムや計算結果等],引数2) AS 列名B FROM テーブル名 1つ目の引数がNULLだった場合に次の引数の値に置き換える
LAG SELECT カラムA,LAG(カラムA,行数) OVER(PARTITION BY カラムB ORDER BY カラムC) AS カラムD FROM テーブル名 第2引数で指定した行数分だけ前のデータを取得
LEAD SELECT カラムA,LEAD(カラムA,行数) OVER(PARTITION BY カラムB ORDER BY カラムC) AS カラムD FROM テーブル名 第2引数で指定した行数分だけ後のデータを取得
RANK SELECT カラムA,RANK() OVER(PARTITION BY カラムA ORDER BY カラムB) AS カラムC FROM テーブル名 PARTITION BYで区切られた区分ごとに、ORDER BYのカラム順に順位をつける
LIMIT SELECT * FROM テーブル名 LIMIT 数値 PostgresやMySQLで使える(標準SQLではない)。問い合わせ結果の行数を制限することが出来る
OFFSET SELECT * FROM テーブル名 LIMIT 数 OFFSET 開始位置 PostgresやMySQLで使える(標準SQLではない)。取得するデータの開始位置を指定

典型的なSQL検索例

FROM句(joinも)➡WHERE句➡GROUP BY句➡HAVING句➡SELECT句のような順番で考えるのがコツ。
典型的なSQL文検索の例を挙げると以下の通り。

意味合い 書き方
表と項目の指定 SELECT 項目 AS 表示したい項目名 FROM 表名
表の結合(必要なら) inner join 結合したい表名 on 条件等
条件の指定 [WHERE/IN] 条件
グループ化 GROUP BY 集計のキー
グループ化条件 HAVING 条件
並び替え ORDER BY DESC等

その他豆知識

  • 実際にSQLクエリを検討する時は、DataGrip等を使うと良い。
  • OLAP関数を使うと統計処理を行なえる。
最終更新:2023年08月19日 21:39