MySQLの入門まとめ
SQLについて学んだのでまとめてみた
参考文献
- 作者: 小野哲
- 出版社/メーカー: 技術評論社
- 発売日: 2007/12/25
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 318回
- この商品を含むブログ (17件) を見る
SQLとは
- Structured Query Languageの略称
- 日本語で言うと、構造化問い合わせ言語
- つまり、データベースへ問い合わせるための言語である
- ※公式にはSQLは何の略称でもないらしい(参照:http://ja.wikipedia.org/wiki/SQL#cite_note-0)
SQLを書くに当たって
3つの掟
SQLは英作文みたいなもの
プロセスとしては
所感
- 日本語で書けないことは、SQLでも書けない
- ということは、まず、日本語で文章化してみることが、早くアウトプットに繋がる道である
SQLの基本的な構文
SQLのもっとも基本的な構文
SELECT A FROM B WHERE C
- 上の意味はBテーブルからCという条件でAを取得する
- サンプルテーブル
mysql> use test Database changed mysql> SHOW tables; +----------------------------+ | Tables_in_saiyo_dev_branch | +----------------------------+ | users | | diaries | +----------------------------+ 2 rows in set (0.00 sec) mysql> DESCRIBE users; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | name | varchar(40) | YES | | | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> DESCRIBE diaries; +---------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | user_id | int(11) | | | | | | title | varchar(40) | YES | | | | | body | text | YES | | | | +---------+-------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
例えば、
mysql> SELECT users.* FROM users WHERE users.id < 3; +----+------+ | id | name | +----+------+ | 1 | 太郎 | | 2 | 花子 | +----+------+ 2 row in set (0.00 sec)
- usersテーブルから、usersテーブルのidカラムが3未満であるという条件でusersテーブルの全カラムを取得する
SELECT句(select clause)
FROM句(from clause)
- 検索をかける対象の指定する句(厳密には違うが)
- エイリアスを付けるとこが出来る
- 例えば、FROM users members
- サブクエリ(副問い合わせ)でテンポラリテーブルを作成することが出来る
- テンポラリテーブル内はインデックスが使用できない
- エイリアスを付けるとこが出来る
WHERE句(where clause)
- 検索条件を指定する句
- 「=,<,>,<>,IN」などの演算子を使用する
結合
- テーブルとテーブルをある条件でくっつける
- FROM句とWHERE句で指定する
- 複数のテーブルにまたがって検索をかけたい時などに結合を利用する
- 結合することをJOINという
- 構文
mysql> SELECT A FROM B JOIN D ON E WHERE C;
テーブルDをEという条件で結合する
INNER JOIN
- もっとも基本的なJOIN
mysql> SELECT * FROM diaries JOIN users ON diaries.user_id = users.id; +----+------+----+---------+-----------+--------+ | id | name | id | user_id | title | body | +----+------+----+---------+-----------+--------+ | 1 | 太郎 | 1 | 1 | テスト | MysSQL | | 1 | 太郎 | 2 | 1 | テスト2 | SQLite | +----+------+----+---------+-----------+--------+ 2 row in set (0.00 sec)
- 結合方法
- ON以下の条件で結合を行う
- 上記の例でdiariesを持っていないuserがいたときには、JOINの対象から外れ
- つまり花子が消えている
- 「JOIN」と省略できる
LEFT OUTER JOIN
- 構文
mysql> SELECT * FROM diaries JOIN users ON diaries.user_id = users.id; +----+------+------+---------+-----------+--------+ | id | name | id | user_id | title | body | +----+------+------+---------+-----------+--------+ | 1 | 太郎 | 1 | 1 | テスト | MysSQL | | 1 | 太郎 | 2 | 1 | テスト2 | SQLite | | 2 | 花子 | NULL | NULL | NULL | NULL | +----+------+------+---------+-----------+--------+ 3 row in set (0.00 sec)
- 結合方法
- ON以下の条件で結合を行う
- 上記の例でdiariesを持っていないuserがいたときには、diariesのカラムがNULLになる
- 花子のレコードそうである
- 「LEFT JOIN」と省略できる
その他
- 以下のJOINもあるけど、使ったことがないので割愛
- RIGHT OUTER JOIN
- 結合の仕方がLEFT OUTER JOINと逆
- CROSS JOIN
- 全組み合わせでJOINする(MySQLではINNER JOINと同じ)非連結結合
- ほぼ確実に使わない
- RIGHT OUTER JOIN
最後までお読みいただきありがとうございました。