間が空くと忘れてしまうのでメモ。
まだよくわかってない人のメモなので鵜呑みにしない。
https://sqlzoo.net/wiki/SQL_Tutorial/ja にひたすらチャレンジ。
用語
name | price | num |
---|---|---|
apple | 100 | 1 |
lemon | 200 | 2 |
Peach | 300 | 3 |
- テーブル
- ↑のテーブルのひとかたまり
- カラム
- 列。name/price/name
- レコード
- 行。apple/100/1 でワンセット
- フィールド
- エクセルで言う「セル」。apple/100/1/lemon…のそれぞれ1つずつ
基本の書き方
SELECT 出力データ FROM テーブル WHERE 条件
出力データの加工
DISTINCT
重複なしでデータを出力する。
https://sqlzoo.net/wiki/Scottish_Parliament の2の問題、
SELECT party.name, leader FROM msp
RIGHT OUTER JOIN party ON msp.party = party.code
GROUP BY party.name, leader
でも、
SELECT DISTINCT(party.name), leader FROM msp
RIGHT OUTER JOIN party ON msp.party = party.code
でもいいみたい。
party.name, DISTINCT(leader)は答えが一意にならないので×。
GROUP BY
WHEREの後。
指定カラム(複数可)のデータでまとめる。
複数テーブルの指定
基本の書き方。
JOINの部分は後述のJOINに差し替わる。
LEFT=table1、RIGHT=table2
SELECT * FROM table1
JOIN table2 ON table1.id = table2.id
INNER JOIN
table1にもtable2にもidが存在するテーブルが生成される。
LEFT OUTER JOIN
table1にidが存在するテーブルが生成される。
table2にidが存在しないフィールドはNULLになる。
RIGT OUTER JOIN
LEFTの逆。table2にidが存在するテーブルが生成される。