LoginSignup
0
1

コピペできるSQL文

Posted at

コピペして使えるSQL文です。

前提

テーブルA

a1 a2 a3
- - -
- - -
- - -

テーブルB

b1 b2 b3
- - -
- - -
- - -

テーブルC

c1 c2 c3
- - -
- - -
- - -

テーブルAのカラムa1を抽出する

SELECT a1 FROM A

条件に合ったレコードを取得する

SQL文 カラムa1が
a1 = 1 1に等しい
a1 <> 1 1出ない
a1 > 1 1より大きい
a1 >= 1 1以上
a1 LIKE '%あ%' パターン'%あ%'に当てはまる
a1 IN (1,2,3) 1,2,3のいずれか
a1 NOT IN (1,2,3) 1,2,3どれでもない
a1 BETWEEN 1 AND 2 1以上2以下
a1 IS NULL NULL
a1 IS NOT NULL NOT NULL

% : 0文字以上の任意の文字列
* : 1文字以上の任意の文字列
- : 任意の1文字

AND かつ
OR または
NOT 出ない
SELECT * FROM A
  WHERE a1 >= 3 AND a2 <= 5

カラムa1の昇順に並べる

SELECT * FROM A
  ORDER BY a1 ASC

降順

SELECT * FROM A
  ORDER BY a1 DESC

重複したデータは1つだけ表示

SELECT DISTINCT * FROM A

表や列に別名をつける

SELECT a1 AS 'a1_new' FROM A A_new
INNER JOIN B B_new ON A_new.a1 = B_new.b1

テーブルAとBから、a1とb1が一致するレコードを抽出する

a1 a2 b1
- - -
- - -
- - -
# 等結合
SELECT A.a1, A.a2, B.b2 FROM A,B
WHERE A.a1 = B.b1

SELECT A.a1, A.a2, B.b2 FROM A
INNER JOIN B ON A.a1 = B.b1

# Aを基準に、Bに無い行をNULLで埋めて結合
SELECT A.a1, A.a2, B.b2 FROM A
LEFT OUTER JOIN B ON A.a1 = B.b1

# Bを基準に、Aに無い行をNULLで埋めて結合
SELECT A.a1, A.a2, B.b2 FROM A
RIGHT OUTER JOIN B ON A.a1 = B.b1

# A,Bの片方にしか無い行をNULLで埋めて結合
SELECT A.a1, A.a2, B.b2 FROM A
FULL OUTER JOIN B ON A.a1 = B.b1

# FULL OUTERでは、Aに行が無いときはA.a1がNULLになってしまう。
# これを表示できるようにする
SELECT COALESCE(A.a1, B.b1), A.a2, B.b2 FROM A
FULL OUTER JOIN B ON A.a1 = B.b1

テーブルA、B、Cからa2とb1、b2とc1が一致するデータを抽出する

SELECT * FROM A,B,C
  where A.a2 = B.b1
  and B.b2 = C.c1

SELECT * FROM A
  INNER JOIN B ON A.a2 = B.b1 # こっちの処理が先
  INNER JOIN C ON B.b2 = C.c1 # 上の処理で得られた表にCを結合

テーブルの結合

全く同じカラムを持つ2つのテーブルで使える

# 和
SELECT * FROM X UNION SELECT * FROM Y
# 共通
SELECT * FROM X INTERSECT SELECT * FROM Y
# 差
SELECT * FROM X EXCEPT SELECT * FROM Y

同じカラムでなくても使える。全ての組み合わせを作成

# 直積
SELECT * FROM X CROSS JOIN SELECT * FROM Y

カラム名が同じもので自動的に結合

SELECT * FROM X NATURAL JOIN B

集合関数

SUM(a1) 合計
AVG(a1) 平均
MAX(a1) 最大
MIN(a1) 最小
COUNT(a1) NULLでない行数を数える
COUNT(*) 行数を数える

a1 a2
code001 30
code002 45
code003 7
SELECT a1, SUM(a2) FROM A
GROUP BY a1

# 条件をつける
SELECT a1, SUM(a2) FROM A
GROUP BY a1
HAVING SUM(a2) < 50

副問合せ

# 副問合せで生成した表から抜き出す
# 副問合せを先に処理
SELECT a1 FROM (SELECT * FROM A WHERE a1 = 3)

# 副問合せを先に処理
SELECT * FROM A
  WHERE a1 IN (SELECT b1 FROM B WHERE b2 = 3)

# 主問合せから副問合せに1行ずつデータを渡す
SELECT * FROM A
  WHERE a1 EXISTS (SELECT * FROM B WHERE b2 = 3 and B.b1 = A.a1)

WITH

そのSELECT文の中だけで使用できる表を定義できる

WITH TEMP (temp_a1, temp_count)
  AS (SELECT a1, count(*) FROM A GROUP BY a1)

SELECT * FROM B,TEMP
WHERE B.b1 = TEMP.temp_a1
and TEMP.temp_count > 50

CASE

条件分岐

a1 数値
code01 10未満
code02 20以上
code03 10以上20未満
SELECT a1, CASE
            WHEN a2 < 10 THEN '10未満'
            WHEN a2 >= 10 and a2 < 20 THEN '10以上20未満'
            ELSE '20以上'
            END
            AS '数値'
FROM A

参考

令和05年【春期】【秋期】 応用情報技術者 合格教本 (情報処理技術者試験)
令和05年 イメージ&クレバー方式でよくわかる 栢木先生の基本情報技術者教室 (情報処理技術者試験)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1