初学者向け兼個人向けのデータベース知識まとめです
- MySQLの文法などの簡易的まとめ
- 自分用のメモ
SQLでの周知事項
- SQLにおけるコマンド文は大文字・小文字の区別を行わない
- 一文の終わりには;(セミコロン)を記述
DESCRIBEコマンド
- 表構造の確認
DESC 表名;
DESCRIBE 表名;
SELEC文
基本文
SELECT <列リスト> FROM [表名];
重複文を排除する
SELECT DISTINCT <列名> FROM [表名];
行制限 WHERE句
SELECT <列名> FROM [表名] WHERE <列名 演算子 値>;
WHERE句における論理演算子を複数使用する際は
NOT→AND→ORの順で評価される
()を使用することで優先付が可能
行ソート ORDER BY句
SELECT <列名> FROM [表名] WHERE 検索条件 ORDER BY 条件 ASC/DESC;
グループ化での抽出・条件検索
SELECT <列名> FROM [表名] (WHERE) GROUP BY グループ列;
SELECT <列名> FROM [表名] GROUP BY グループ HAVING 条件式;
/*クラス毎のテストの平均点数*/
SELECT class_no, AVG(test) from grades GROUP BY class_no;
副問い合わせ
WHERE・HAVING・FROM にて別に埋め込まれるSELECT文
SELECT 列名 FROM 表名 WHERE 列名 比較演算子 (SELECT ~ FROM ~);
- 比較演算子で等しくないは「<>」「!=」
- = で繋ぐのは返り値が1つの時のみ
- 複数行副問い合わせで使用する演算子「ANY」「ALL」「IN」
結合によるSELECT
内部結合
2つ以上の表を共通の値に従って結合を行う。
列名が異なっていてもデータ型が同一であれば結合可能
/*1つ目の記述法*/
SELECT 列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名;
/*2つ目の記述法*/
SELECT 列名 FROM 表1, 表2 ON 表1.列名 = 表2.列名;
/*なお二つ目に関しては可読性が低下するため一部推奨ではない*/
/*表member1,classからclubとteacherを引き出す(別名使用例)*/
SELECT m.club, c.teacher
FROM member1 m JOIN class c ON m.name = c.name;
/*ON句以外の結合方法*/
① SELECT 列名 FROM 表1 NATURAL JOIN 表2;
② SELECT 列名 FROM 表1 JOIN 表2 USING(共通列名);
NATURAL JOIN句は結合する表の同じ列名を自動結合する
USING句は同じ列名のうち指定された列により結合を行う
外部結合
内部結合とは異なり結合条件に一致しない行の表示も可能となる。
例)片方の列にはNULL値が含まれているが、他方の表の列にはNULL値が含まれていない
表記法:内部結合の「JOIN」に基準表に向けてLEFT・RIGHTを付ける
クロス結合
対象表の全ての組み合わせが表示できる。
(表1の行数×表2の行数)分の結果件数を得ることができる
SELECT 列名 FROM 表1 CROSS JOIN 表2;
集合演算
2つ以上の問い合わせ結果から1つの結果を生成
- UNION
複数の問い合わせ結果から重複するものを除いた結果を生成(Distinct利用時と同じ) - UNION ALL
複数の問い合わせ結果から重複するものも含めた結果を生成
SELECT 列名A FROM 表1 UNION (ALL) SELECT 列名A FROM 表2 ;