452
464

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLの基本を覚える【初心者向け】

Last updated at Posted at 2017-10-31

#データベースとは
テキストや数値などのデータを保存するためのツールのこと

#テーブルの構造
データベースは、以下の図ような表でデータを管理している。

https://gyazo.com/19050eb8c11d0c206c8eca233291a06e

  • 表「テーブル」
  • 縦の列「カラム」
  • 横の列「レコード」

それぞれこのような呼び方をする。

#SELECT(どのカラムから?)
データベースから、データを取得するために「選ぶ」という意味の「SELECT」を使う。SELECT文で「どのカラムのデータを取得するか」を選ぶ。

SELECT name

#FROM(どのテーブルから?)
データベースには複数のテーブルが存在する場合もある。そのため「FROM」を使い、SELECT文で選んだカラムが「どのテーブルのカラムか」を指定する。

SELECT name
FROM shoppinglist;

https://gyazo.com/e04eafcdae47816578ed8720630ce8f9
#複数のカラムからデータを取得
複数のカラムからデータを取得する場合は、カラム名をコンマ(,)で区切る。

SELECT name,price
FROM shoppinglist;

https://gyazo.com/6860972f6061cb295d84f634e445977d
#全てのカラムからデータを取得
アスタリスク(*)は、「全て」という意味。

SELECT *
FROM shoppinglist;

https://gyazo.com/bc6296648b2fa7ee150543558f017a79
#WHERE(特定のデータを取得)
特定のデータを取得するためには、「WHERE」を使う。「どこのレコード(横の列)を取得するか」という意味。

SELECT *
FROM shoppinglist
WHERE price = 100;

「=」を使い「priceカラムが100であるレコード」という意味になるよう条件を指定する。
https://gyazo.com/29c69444dd38eea52f0b61e4599fd61c

#データ型
データベースに保存するデータには「データ型」というルールがある。それぞれテキストや数値、日付など「データの種類」を示す。

https://gyazo.com/16dd071b0179439f5b4055b22a603541
↑数値のデータは、クオテーションが不要になる。

#比較演算子
比較演算子を使うと「priceカラムが100以下のレコード」などを取得することができる。priceカラムのデータが「100以下」を検索する。

SELECT *
FROM shoppinglist
WHERE price <= 100;

https://gyazo.com/a4a39b7459dc9050263149d98597c4bd
##比較演算子の一覧
https://gyazo.com/f46e5f2d11a468d34c43662cbff80c69

#LIKE演算子(ある文字を含むデータを取得)
「ある文字を含むデータ」を取得する場合、「〇〇のような」という意味を持つLIKE演算子を使う。

SELECT *
FROM shoppinglist
WHERE name LIKE "%納豆%";

https://gyazo.com/f55c1ab7b2ff8d64081a0b1cdd16a8c3

##ワイルドカード
LIKE演算子は、ワイルドカードという「%」の記号を一緒に使う。「ワイルドカード」とは、どんな文字列にも一致することを指す。これにより「トマト」を含むデータを全て取得している。

SELECT *
FROM shoppinglist
WHERE name LIKE "%トマト%";

https://gyazo.com/26dfef5d6caa3b434de3d7ea4399ee06

##前方一致
ワイルドカードを文字列の前後どちらかにのみ置くこともできる。「〇〇%」とした場合「〇〇」以降はどんな文字列にも一致するので「〇〇」で始まる文字列を検索することができる。※「%〇〇」は後方一致

SELECT *
FROM shoppinglist
WHERE name LIKE "トマト%";

https://gyazo.com/fdce25808d380fdc59574d479d336817

#NOT演算子
「〇〇に一致しないデータ」のような条件でデータを取得したい場合は「NOT演算子」を使う。

SELECT *
FROM shoppinglist
WHERE NOT price = 100;

https://gyazo.com/99f95166303dde924fb385f1d1fa067b

#NULL
何のデータも保存されていないということを示す。
https://gyazo.com/1b5fd7fb668f6d2f520a7c544addf4cc

##NULLのデータを取得
NULLのデータを取得するには、「〇〇がNULLである」という意味になる「IS NULL」を使う。

SELECT *
FROM shoppinglist
WHERE price IS NULL;

https://gyazo.com/57c7088c18742364b8c04a5660082731

##NULLではないデータを取得

SELECT *
FROM shoppinglist
WHERE price IS NOT NULL;

https://gyazo.com/28a0395a07ab7445cf5fc14f9cf848f4

#AND演算子
WHERE文に複数の条件を指定することができる。「WHERE 条件1 AND 条件2」のようにすることで、条件1と条件2を共に満たすデータを検索することが可能になる。

SELECT * FROM shoppinglist
WHERE name = "鶏肉"
AND price = 300;

https://gyazo.com/0ba1ba6d1f128f0d84aeae82292133ed

#OR演算子
AND演算子と同様に複数の条件を扱う。「WHERE 条件1 OR 条件2」のようにすることで、条件1または条件2のどちらかを満たすデータを検索することができる。

SELECT * FROM shoppinglist
WHERE name = "鶏肉"
OR name = "もやし";

https://gyazo.com/265870772d27f1456392aa29d78e1a79

#ORDER BY
データを並び替えるには、順に並べるという意味の「ORDER BY」を使う。並べ方は、昇順(ASC)もしくは降順(DESC)を指定する。

SELECT * FROM shoppinglist
ORDER BY price DESC;

https://gyazo.com/209bbc29137554297e2f8b1d7128b819

##「ORDER BY」と「WHERE」の併用

SELECT * FROM shoppinglist
WHERE name = "鶏肉"
ORDER BY price ASC;

https://gyazo.com/54aa2ed606235dd57f4e15762bf79403

#LIMIT
「最大で何件取得するか」を指定するためには、「制限する」という意味の「LIMIT」を使う。「LIMIT」は左の図のように「データの件数」を指定する。

SELECT * FROM shoppinglist
LIMIT 3;

https://gyazo.com/c701bb5f44e0cd3d22071901a51c6de7

#DISTINCT(重複データを省く)
検索結果から重複するデータを省くことが可能になる。「DISTINCT(カラム名)」とすることで、検索結果から指定したカラムの重複するデータを除くことができる。

SELECT DISTINCT(name)
FROM shoppinglist;

https://gyazo.com/8c154faf6f560a39f977081270be54c6

#四則演算
SQLでは、足す(+)、引く(-)、かける(*)、割る(/)ができる。

↓例えば、買い物リストの各商品に消費税を入れる。

SELECT name,price * 1.08
FROM shoppinglist;

https://gyazo.com/dced87453b330095eb98e9268d330d5e

#関数

##SUM関数
数値の合計を計算する。

SELECT SUN(price)
FROM shoppinglist;

https://gyazo.com/3c805784bac370b3b7708f21604a173c

##AVG関数
数値の平均を計算する。

SELECT AVG(price)
FROM shoppinglist;

https://gyazo.com/ac930d5afc6dc95a19592898ea3fd11b

##COUNT関数
指定したカラムのデータの合計数を計算する。

###1.カラム名を指定する

SELECT COUNT(name)
FROM shoppinglist;

カラム名を指定した場合、nullのデータは計算されないため4件となる。
https://gyazo.com/c8eceb0069716c1348729ec623f0442e

###2.全てのカラムを指定する

SELECT COUNT(*)
FROM shoppinglist;

「*」を使った場合、カラムのデータの数ではなく、レコードの数を計算する。結果、5件となる。
https://gyazo.com/a095e873d44bfbffe5f9e07c2d35afd9

##MAX・MIN関数
最大(MAX)と、最小(MIN)を求める。

SELECT name,MAX(price)
FROM shoppinglist;

https://gyazo.com/fe15c00a13ea6a59d180cd2295ed8d4a

#GROUP BY(グループ化をする)
GROUP BYを用いると、データをグループ化することができます。例えば図のように「GROUP BY カラム名」とすることで、指定したカラムで、完全に同一のデータを持つレコードどうしが同じグループとなる。

SELECT SUM(price),date
FROM shoppinglist
GROUP BY date;

https://gyazo.com/68fc9e3157274667a962f7e16362c57e
※「WHERE文」を使う場合、「GROUP BY」は「WHERE文」のあとに書く。

##HAVING(グループ化したデータを絞り込む)
GROUP BYでグループ化したデータを絞り込みたいとき使う。「WHERE」はグループ化される前のテーブル全体を検索対象とするが「HAVING」はGROUP BYによってグループ化されたデータを検索対象とする。

SELECT SUM(price),date
FROM shoppinglist
GROUP BY date
HAVING SUN(price)>500;

https://gyazo.com/0f231181b86b7f9558475b4e30d5598f

※HAVINGはグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使う。

以上。

452
464
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
452
464

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?