ぶろぐめんどくさい

技術系の記事と漫画レビューが入り混じった混沌

自分用sqlまとめ(ちょっとずつ更新予定)

ここを参考にまとめます。

qiita.com

基本

データ(テーブル)の取得
  • *はすべてのカラムを示す
SELECT columnx, columny, ...
FROM table
データの追加
INSERT INTO table 
(column1, column2, column3) 
VALUES(value1, value2, value3)
データの更新
UPDATE table
SET columnx = valuex, columny = valuey, ... 
WHERE columnz = valuez
データ削除
DELETE FROM table 
WHERE columnx = valuex
文字列検索
  • % 1文字以上の任意の文字列
  • _ 一文字の任意の文字列
WHERE columny like "_mojiretsu%"
条件式の拡張(ANDとOR)
WHERE columnx = valuex
AND columny = valuey 
OR columnz = valuez
日付指定
WHERE date 
BETWEEN '2001-01-01' AND '2020-02-22'

ちょっと面倒

テーブルの結合
  • table1 a テーブル名の省略
  • JOIN 結合
  • USING 共通項の指定
SELECT a.value1, b.value2, b.value3
FROM   table1 a JOIN table2 b
USING (value2)
テーブルの結合
和集合
SELECT x, y. z
FROM table1
UNION
SELECT x, y, z
FROM table2
ORDER BY 2, 3, 1
差集合

前者のテーブルのみに存在する項目を抽出

SELECT column FROM table1
EXCEPT
SELECT column FROM table2
積集合

両方のテーブルに存在する項目を抽出

SELECT column FROM table1
INTERSECT
SELECT column FROM table2
複数候補から絞り込む
SELECT * 
FROM table 
WHERE column IN(value1, value2)
他のテーブルの項目を条件に絞り込む(IN)
SELECT x.*
FROM tablex x
WHERE x.key IN
(
  SELECT y.key 
  FROM tabley y
)
他のテーブルの項目を条件に絞り込む(EXISTS)
SELECT x.*
FROM tablex x
WHERE EXISTS
(
 SELECT column 
 FROM tabley y
 WHERE x.key = y.key
)
IDでソートして先頭行だけ抽出
SELECT *
FROM table
ORDER BY id DESC
LIMIT 1

特殊

妖怪1増やす
UPDATE table 
SET hoge = hoge + 1 
WHERE key = 1;