#データベースとは
テキストや数値などのデータを保存するためのツールのこと
#テーブルの構造
データベースは、以下の図ような表でデータを管理している。
- 表「テーブル」
- 縦の列「カラム」
- 横の列「レコード」
それぞれこのような呼び方をする。
#SELECT(どのカラムから?)
データベースから、データを取得するために「選ぶ」という意味の「SELECT」を使う。SELECT文で「どのカラムのデータを取得するか」を選ぶ。
SELECT name
#FROM(どのテーブルから?)
データベースには複数のテーブルが存在する場合もある。そのため「FROM」を使い、SELECT文で選んだカラムが「どのテーブルのカラムか」を指定する。
SELECT name
FROM shoppinglist;
#複数のカラムからデータを取得
複数のカラムからデータを取得する場合は、カラム名をコンマ(,)で区切る。
SELECT name,price
FROM shoppinglist;
#全てのカラムからデータを取得
アスタリスク(*)は、「全て」という意味。
SELECT *
FROM shoppinglist;
#WHERE(特定のデータを取得)
特定のデータを取得するためには、「WHERE」を使う。「どこのレコード(横の列)を取得するか」という意味。
SELECT *
FROM shoppinglist
WHERE price = 100;
「=」を使い「priceカラムが100であるレコード」という意味になるよう条件を指定する。
#データ型
データベースに保存するデータには「データ型」というルールがある。それぞれテキストや数値、日付など「データの種類」を示す。
#比較演算子
比較演算子を使うと「priceカラムが100以下のレコード」などを取得することができる。priceカラムのデータが「100以下」を検索する。
SELECT *
FROM shoppinglist
WHERE price <= 100;
#LIKE演算子(ある文字を含むデータを取得)
「ある文字を含むデータ」を取得する場合、「〇〇のような」という意味を持つLIKE演算子を使う。
SELECT *
FROM shoppinglist
WHERE name LIKE "%納豆%";
##ワイルドカード
LIKE演算子は、ワイルドカードという「%」の記号を一緒に使う。「ワイルドカード」とは、どんな文字列にも一致することを指す。これにより「トマト」を含むデータを全て取得している。
SELECT *
FROM shoppinglist
WHERE name LIKE "%トマト%";
##前方一致
ワイルドカードを文字列の前後どちらかにのみ置くこともできる。「〇〇%」とした場合「〇〇」以降はどんな文字列にも一致するので「〇〇」で始まる文字列を検索することができる。※「%〇〇」は後方一致
SELECT *
FROM shoppinglist
WHERE name LIKE "トマト%";
#NOT演算子
「〇〇に一致しないデータ」のような条件でデータを取得したい場合は「NOT演算子」を使う。
SELECT *
FROM shoppinglist
WHERE NOT price = 100;
##NULLのデータを取得
NULLのデータを取得するには、「〇〇がNULLである」という意味になる「IS NULL」を使う。
SELECT *
FROM shoppinglist
WHERE price IS NULL;
##NULLではないデータを取得
SELECT *
FROM shoppinglist
WHERE price IS NOT NULL;
#AND演算子
WHERE文に複数の条件を指定することができる。「WHERE 条件1 AND 条件2」のようにすることで、条件1と条件2を共に満たすデータを検索することが可能になる。
SELECT * FROM shoppinglist
WHERE name = "鶏肉"
AND price = 300;
#OR演算子
AND演算子と同様に複数の条件を扱う。「WHERE 条件1 OR 条件2」のようにすることで、条件1または条件2のどちらかを満たすデータを検索することができる。
SELECT * FROM shoppinglist
WHERE name = "鶏肉"
OR name = "もやし";
#ORDER BY
データを並び替えるには、順に並べるという意味の「ORDER BY」を使う。並べ方は、昇順(ASC)もしくは降順(DESC)を指定する。
SELECT * FROM shoppinglist
ORDER BY price DESC;
##「ORDER BY」と「WHERE」の併用
SELECT * FROM shoppinglist
WHERE name = "鶏肉"
ORDER BY price ASC;
#LIMIT
「最大で何件取得するか」を指定するためには、「制限する」という意味の「LIMIT」を使う。「LIMIT」は左の図のように「データの件数」を指定する。
SELECT * FROM shoppinglist
LIMIT 3;
#DISTINCT(重複データを省く)
検索結果から重複するデータを省くことが可能になる。「DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除くことができる。
SELECT DISTINCT(name)
FROM shoppinglist;
#四則演算
SQLでは、足す(+)、引く(-)、かける(*)、割る(/)ができる。
↓例えば、買い物リストの各商品に消費税を入れる。
SELECT name,price * 1.08
FROM shoppinglist;
#関数
##SUM関数
数値の合計を計算する。
SELECT SUN(price)
FROM shoppinglist;
##AVG関数
数値の平均を計算する。
SELECT AVG(price)
FROM shoppinglist;
##COUNT関数
指定したカラムのデータの合計数を計算する。
###1.カラム名を指定する
SELECT COUNT(name)
FROM shoppinglist;
カラム名を指定した場合、nullのデータは計算されないため4件となる。
###2.全てのカラムを指定する
SELECT COUNT(*)
FROM shoppinglist;
「*」を使った場合、カラムのデータの数ではなく、レコードの数を計算する。結果、5件となる。
##MAX・MIN関数
最大(MAX)と、最小(MIN)を求める。
SELECT name,MAX(price)
FROM shoppinglist;
#GROUP BY(グループ化をする)
GROUP BYを用いると、データをグループ化することができます。例えば図のように「GROUP BY カラム名」とすることで、指定したカラムで、完全に同一のデータを持つレコードどうしが同じグループとなる。
SELECT SUM(price),date
FROM shoppinglist
GROUP BY date;
※「WHERE文」を使う場合、「GROUP BY」は「WHERE文」のあとに書く。
##HAVING(グループ化したデータを絞り込む)
GROUP BYでグループ化したデータを絞り込みたいとき使う。「WHERE」はグループ化される前のテーブル全体を検索対象とするが「HAVING」はGROUP BYによってグループ化されたデータを検索対象とする。
SELECT SUM(price),date
FROM shoppinglist
GROUP BY date
HAVING SUN(price)>500;
※HAVINGはグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使う。
以上。