今度は一番肝心であるデータベースの検索を書こうと思います。
基本検索構文
使用例
SELECT name
FROM users
FROM句
テーブル指定
FROM テーブル名
SELECT句
カラムを指定
SELECT カラム名
基本検索条件
SELECT *
FROM users
WHERE kenmei IN ("東京都", "神奈川県")
WHERE句
検索条件を指定
WHERE 条件
例
WHERE a==1
AND演算子
AND演算子は複数の条件を指定して式を作り、その条件が全て正であるとき、式が正となります
要は両方成立したら返すわけです。
WHERE a AND b
OR演算子
OR演算子は複数の条件を指定して式を作り、その条件のうちどれか1つ以上が正となれば、式は正となります。
要はどちらかが成立すれば返すわけです。
WHERE a OR b
NOT演算子
NOT演算子は1つの条件を指定して式を作り、式の正誤はその条件と逆のものになります。
要は含まれないレコードを返すわけです。
WHERE NOT a
BETWEEN演算子
BETWEEN演算子は1つのカラムに対し上限と下限を指定して式を作り、カラムの値がその範囲に含まれるとき、その式は正になるという演算子です。
要はカラムに下限以上かつ上限以下の値が入ったレコードを返すコードです。
WHERE カラム名 BETWEEN 下限 AND 上限
IN演算子
IN演算子は1つのカラムに対しリストを指定して、カラムの値がそのリストに含まれるとき、その式は正になるという演算子です。
要は指定したカラムに指定した値が入ってるレコードを返すコードです。
WHERE カラム名 IN (値1, 値2, ……)
(値1, 値2, ……)の部分がリストとなります
検索データ形成
使用例
SELECT
user_id,
COUNT(*) "行数"
FROM reidai
WHERE date = "2000-01-01"
GROUP BY user_id
CONCAT関数
複数の文字列を連結させることが出来る関数です。
CONCAT(文字列1, 文字列2, ……)
AS句
SELECT句でデータを取得するとき、AS句を併用すると、そのカラムに別名を付けることが出来ます。
要は検索結果の絡む名を変更するわけです。
SELECT 取得するデータ AS 別名
DISTINCTキーワード
DISTINCTキーワードを使用すると、指定したカラムの値が重複する行を除外してデータを取得することが出来ます。
要は同じ値があった場合、一番最初のデータだけ残し後のは除外する。
SELECT DISTINCT カラム名
GROUP BY句
GROUP BY句を使用すると、指定したカラムが同じ値を持つデータを1つのグループとしてまとめることが出来ます。
DISTINCTと違うのはデータが残りレコードとしては
重複しなかった値は複数行として登録される。
GROUP BY カラム名
COUNT関数(group byに注意)
COUNT関数はカラムを指定して使用することで、そのカラムの値がNULLでないデータの行数を取得することが出来ます。
SELECT COUNT(カラム名)
ワイルドカードを使用し以下のように記述すると、行の値が全てNULLであるレコードも含め、その行数を取得します。
SELECT COUNT(*)
そしてGROUP BY句を併用している場合は、各グループが何行のレコードを持っているかというデータを取得することが出来ます。
複雑なデータの検索
JOIN句
JOINを使用すると、指定したそれぞれのテーブルの、カラムの値が一致するデータを結合することが出来ます。
FROM テーブル名1
JOIN テーブル名2 ON テーブル名1.カラム名1 = テーブル名2.カラム名2
ONの後にそのままテーブル名を再度書くのは冗長です。
そこで各テーブルに別名を付け、その名前で扱うのが良いです。
aceの場合 => a
badmanの場合 => b など
そのため、SQL文は以下のように書きなおすことが出来ます。
FROM seidai s
JOIN users u ON a.user_id = b.id
サブクエリ
要は二重検索のことSQL文の中にさらに文を書いて出力する方法です。
例としてWHERE id NOT INの中に書くことで、それを検索した結果
から更に検索する方法です。
SELECT *
FROM users
WHERE id NOT IN (
SELECT DISTINCT user_id
FROM reidai
WHERE date = "2000-01-01"
)
ワイルドカード
ワイルドカードとは、文字の代わりとして使うことが出来る記号のことです。
SELECT句においては、アスタリスクが"全てのカラムを取得する"という意味のワイルドカードとして定義がされているため、このように指定することで全てのカラムの取得が出来ます。