0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL学習アウトプットメモ①

Last updated at Posted at 2023-09-23

はじめに

IPAのデータベーススペシャリストの試験が近いので勉強した内容をアウトプットしていく:thinking:

用語

縦の列を
属性、フィールド、カラム(columns)
横の行を
タプル、ロー(row)
表のことを
テーブル(table)
と呼ぶ

和両立とは表の結合の際に選択項目をそろえる必要があることである
和集合(UNION)
差集合(EXCEPT)
共通集合(INTERSECT)

ただし直積(CROSS JOIN)は和両立ではない

射影

  • COALESCE
    A表にnameがなかった場合は'unknown'と表示する
SELECT COALESCE(name,'unknown') FROM A

COALESCEを使わずこれでも結果は同じ

SELECT CASE WHEN name IS NULL THEN 'unknown'
ELSE name END FROM A
  • DISTINCT
    A表のnameの重複を排除する
SELECT DISTINCT(name) FROM A
  • CASE WHEN
    A表からもしpriceが300以下なら割引価格それ以外なら通常価格と表示
SELECT
CASE WHEN price <= 300 THEN '割引対象'
ELSE 通常価格
END FROM A

内部結合

  • 直積
  • すべての組み合わせ
    A表のタプルが500行、B表のタプルが500行あったとき
    500*500=250000行となる
SELECT * FROM A,B

副問い合わせ

EXISTS(実行されるかされないか)

まずかっこの部分を評価する
Bが存在(EXISTS)したらAをすべて表示する

SELECT * FROM A
WHERE EXISTS (
SELECT * FROM B
)

Bが存在しなかったらAをすべて表示する

SELECT * FROM A
WHERE NOT EXISTS (
SELECT * FROM B
)

相関副問い合わせ

内側にその側のテーブルを記載することで1行ずつ評価していく
B表にあるnameがA表にもあったらA表からnameを一行表示
B表にあるnameがA表にもあったらA表からnameを一行表示と一行ずつ実行する

SELECT name FROM A
WHERE EXISTS (
SELECT * FROM B.name = A.name
)
SELECT name FROM A
WHERE IN (
SELECT * FROM B.name = A.name
)
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?