Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

データベースとは

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

テーブルの構造

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

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はグループ化された後のテーブルから検索するため、条件文で使うカラムは必ずグループ化されたテーブルのカラムを使う。

以上。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away