LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

SQL教材

Last updated at Posted at 2022-03-20

SQLとは

SQLはデータベース(DB)を操作するための言語です。
データベースにデータを挿入したり、検索したりする際に利用します。
データベースのなかには、数万・数百万件ものデータが保存されていますが、SQLを使うことで効率的に操作をすることが可能なのです。

SQLは国際標準化されているため、さまざまなデータベースで利用できます。
有名なデータベースとしては、Oracle、MySQL、PostgreSQL、SQLiteなどが、いずれもSQLで操作可能です。

SQLでデータベースに対して行える操作として、主に次のようなものがあります。

①データの検索
②データの追加
③データの更新
④データの削除
⑤テーブルの作成
⑥テーブルの削除
⑦テーブルの主キーの設定
⑧ユーザー権限の付与

★検索ワード
・SQL とは

データベースとは

データベース(英: database, DB)とは、検索や蓄積が容易にできるよう整理された情報の集まり。
通常はコンピュータによって実現されたものを指すが、紙の住所録などをデータベースと呼ぶ場合もある。
狭義には、データベース管理システム (Database Management System, DBMS) またはそれが扱う対象のことをいう。

なんとなく理解できますが、具体的にどういうものかイメージしづらいですね。

かんたんにいうと、データベースとは一定の形式で整理されたデータの集まりのことです。

★検索ワード
・データベース とは
・DB とは

事前準備

今回データベースとして使用するのは、MAMPに標準で搭載されているphpMyAdminというものです!

phpMyAdminは、ブラウザ上でMySQLの操作を行うことができます。

SQL文を実行できますし、データベースやテーブルの作成やデータの表示、挿入など大抵の操作はグラフィカルに操作できます。

また、様々なデータ形式のデータを一括インポートできたり、入っているデータを様々な形式でエクスポートすることができたりするため、直感的に用途に応じた操作を行えます。

では早速データベースを使用するための準備を行っていきましょう!

MAMP、XAMPPを既にインストールしている方は起動して
ブラウザのURLに
http://localhost:8888/phpMyAdmin/
もしくは
http://localhost/phpMyAdmin/
と入力するか、以下を参考にphpMyAdminを開いてみてください
SQL_1.png

①ヘッダーメニューにあるToolsをクリック
phpMyAdminをクリック

下記のようなページが表示されればOKです!
SQL_2.png

下記のLanguageという項目から言語を日本語に変更できるので、設定しておきましょう!
SQL_3.png

★検索ワード
・phpMyAdmin とは
・phpMyAdmin 使い方

データベースを作成する

以下の手順でphpMyAdminで学習用のデータベースを作成していきましょう!

1.メニュータブのデータベースをクリック
SQL_4.png

2.データベース名を入力

今回はdb_testという名前のDB(データベース)を作りましょう。
SQL_5.png

db_testと入力し、作成をクリック

SQL_6.png

左側のメニューバーに先程作成したdb_testが追加されましたね!
これでデータベースの作成は完了です。

★検索ワード
・phpMyAdmin DB作成

テーブルを作成する

「一つ前のデータベースを作成する」で作成したdb_testというデータベースの中にテーブル(表)を作りましょう!

1.テーブル名を入力
test01という名前のテーブルを作りましょう。
SQL_7.png

名前の入力欄にtest01を入力、カラムはで設定し、実行を押してください。

2.カラムを入力

ここではテーブルの項目の名前やデータ型、長さ等を入力します。
データ型についてはこちらを参考
https://blog.proglus.jp/695/

データ型がINTの長さは設定が必須ではないので今回は入力しません。
以下のように記入できたら右下の保存するを押して保存しましょう。
SQL_8.png

このようにdb_testの中にtest01というテーブルができていれば、成功です。
SQL_9.png

データを登録する

続いて、データを登録していきます。
今回は下記のようなデータをtest01に登録したいと思います。

id name age code
1 タロウ 18 001
2 ハナコ 22 001
3 イチロウ 48 002
4 キョウコ 46 002
5 ポチ 3 003

以下の手順でphpMyAdminから登録できます。
1.データを登録したいテーブルをクリック
SQL_10.png

2.挿入をクリック
SQL_11.png

3.値を入力
まずは先程の表にあった、タロウのデータを作成します。
に表を参考にデータを入れます。
idに1、nameにタロウ、ageに18、codeに001をそれぞれ入力してください。
SQL_12.png

入力ができたら実行をクリック
下記の画像のような画面が表示されればOKです!
SQL_13.png

それではメニュータブから、表示をクリックしデータを確認しましょう。

4.データの確認
データがうまく登録できているか確認しましょう!
下記の画像のようになっていればOKです!
SQL_14.png

先ほどと同じ要領で残りのデータを登録しましょう!

id name age code
1 タロウ 18 001
2 ハナコ 22 001
3 イチロウ 48 002
4 キョウコ 46 002
5 ポチ 3 003

SQL_15.png

画像のように登録できたら、次へ進みましょう。

★検索ワード
・phpMyAdmin テーブル作成
・DB カラムとは

用語解説

さて、ここまで流れに沿って進めてきましたが、ここで用語の解説をしていきます。
テーブル、カラム、レコードなど、慣れない言葉が出てきましたね。
以下画像で見るとわかりやすいので、構造ごと覚えてしまいましょう。

テーブル、カラム、レコードの関係図
SQL_16.png

また、データベースを扱う際の用語でよく出てくるものをここで挙げておきますので、
しっかりと覚えておきましょう。

・クエリ
 SQLを実行したときに、データベースに送る命令文のこと

・一意
 一意とは意味や値が一つに確定していることという意味
 データの一意とは、大量にあるデータから、1つの情報が特定できる状態を意味する。

・NULL
 null(ヌル、ナル)は、何もないという意味
 プログラミング言語などコンピュータ関係では、何も示さないものを表すのに使われる。

・NOT NULL
 データベースの項目に付ける制限(制約)のひとつ
 この制限のつけられたカラムにはNULL(空の値)は入れられない。

・AUTO_INCREMENT機能
 AUTO_INCREMENTとはそのまま訳すと自動増加という意味
 カラムにAUTO_INCREMENTを指定すると、MySQLが自動的に
 一意の連続した番号を生成してくれる。

・PRIMARY KEY(主キー)
 テーブルに登録されるレコード(行)の全体の中から、
 ひとつのデータを特定するためのもの
 つまりPRIMARY KEY(主キー)を設定したカラムには同じ値を入れることができない。

・予約語
 テーブル名やカラム名で使えない語句のこと
 これは全て覚える必要はないので、命名する時にエラーが出た場合、
 確認していきましょう。
 以下予約語一覧
 https://dev.mysql.com/doc/refman/5.6/ja/reserved-words.html

・インデント
 インデントとは、コードの行頭に空白を挿入して先頭の文字を右にずらすこと
 インデントは直接プログラムの処理には関係ないですが、
 見やすい(可読性の高い)コードを書くというのはとても重要です。
 システム開発の現場では様々な人が同じソースコードに触ります。
 その際、あなたが書いたソースコードも別の人が触って追記や修正をします。
 そのため視覚的にわかりやすいコードを書くことが作業の効率化につながります。
 環境にもよりますが、
 ここでは基本的にインデントは半角スペース2つを使いましょう。

SQLでテーブルを作成する(CREATE)

さて、今まではphpmyAdminの画面上の操作で色々と作ってきましたが、
それらの操作はSQL文を使うことでも実行できます。

PHPからDBに接続して操作するときや、一度に大量のデータを操作するときなどにSQL文を使用します。
なので、SQL文の使い方を覚えていきましょう。

今回はdb_testの中にtest02テーブルを作っていきたいと思います。
以下の表を参考に作成していきましょう!

id code occupation
1 001 会社員
2 002 自営業
3 003 学生
4 004 公務員

では最初にphpMyAdminのトップページ
http://localhost:8888/phpMyAdmin/
もしくは
http://localhost/phpMyAdmin/
にアクセスしましょう。
そしてメニュータブのSQLをクリックしてください。
SQL_17.png

以下のような画面が表示さればOKです!

SQL_18.png

このテキストエリアにSQLを書いていきます。
 ※入力フォームにSELECT * FROM WHERE 1と表示されていたら、消してから書いてください

今回はテーブルを新規作成したいのでCREATE文を使います。
書き方は以下のとおりです。

CREATE
CREATE TABLE DB.テーブル名 (
  column1 データ型(長さ) その他オプション,
  column2 データ型(長さ) その他オプション,
  column3 データ型(長さ) その他オプション,
  column4 データ型(長さ) その他オプション
);

分解して説明していきます。

まず、それぞれの値の区切りには半角スペースを使います。

CREATE TABLE・・・これはテーブル(TABLE)を作る(CREATE)ということを宣言しています
DB名.テーブル名・・・ここで、テーブルを作る対象のDB名と新規作成するテーブルのテーブル名を宣言しています
そして以下の内容を();で囲むことでCREATE TABLEの命令の範囲を示しています。

column1 データ型(長さ) その他オプション,
column2 データ型(長さ) その他オプション,
column3 データ型(長さ) その他オプション,
column4 データ型(長さ) その他オプション

ここでは、各カラムの名前、データ型(長さを指定したい時は長さを記入)
その他オプション(NOT NULL やAUTO_INCREMENTなど)を指定します。

カラムごとに,(カンマ)で区切ります。
最後の行はカンマはいりません。
最後の行にカンマを入れるとエラーになってしまうので気を付けましょう。

また、改行をしなくても命令文は動きますが、
実際の開発現場を意識し、見やすいコードを書く練習のために改行を行う癖をつけておきましょう!

ここではインデントを半角スペース2個分とします。

では早速以下のコードを書いていきましょう。

CREATE
CREATE TABLE db_test.test02 (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  code VARCHAR(255),
  occupation VARCHAR(255)
);

書けたら、実行しましょう。
SQL_19.png

うまく作成できているか確認してみましょう!
下記の画像のようになっていればOKです!
SQL_20.png

これでテーブルの作成が完了しました!

エラーが出るようであれば、コードの記述に間違いがあるので、見本のコードどおりに記述できているか確認しましょう。

★検索ワード
・SQL CREATE 使い方
・SQL データ型

SQLでデータを登録する(INSERT)

では次はデータ(レコード)を登録していきましょう。
レコードの新規登録にはINSERT文を使います。

使い方は以下のとおりです!

INSERT
INSERT INTO DB.テーブル名 (カラム名1,カラム名2,カラム名3) VALUES(値1, 値2, 値3);

test02の一番上のレコードを追加するSQLを書きます。

INSERT
INSERT INTO db_test.test02 (id, code, occupation) VALUES(1, "001", "会社員");

記述したカラム名の順番通りに VALUESを指定するようにしましょう。

ここでデータ型に注意してください!
VALUESの内容を見ていただきたいのですが

VALUES(1, “001”, “会社員”);

001会社員””(クォーテーション)で囲んでいます。
これは文字列型(VARCHAR等)を記載するときのルールで、
文字列をダブルクォーテーション(”)またはシングルクォーテーション(’)で囲んで表現します。

数値を入れたい場合はそのまま書いてOKです。
数値をクォーテーションでくくってしまうと、文字列として扱われてしまうので注意してください。

このテーブルの場合は特に、idは数値(int)、codeは文字列(VARCHAR)であることに注意してください。

CREATE文を実行したところと同じページでINSERT文を記述し、実行しましょう!
SQL_21.png

同じ要領で残りのデータを登録しましょう!

SQL_22.png

画像のようにすべてのデータが登録できればOKです!

★検索ワード
・SQL INSERT 使い方
・SQL レコードとは

SQLでデータを取得する(SELECT)

SELECT文とはDBからデータを取得する命令文です。
膨大なデータの中から対象となるデータを探したり、
特定のカラムだけを並べたりするときにSELECT文を使います。

今まで学習してきた、CREATEやINSERTとは違ってSELECTは情報を取得するだけですので、直接データに変更を加えるものではありません。

使い方は以下のとおりです!

SELECT
SELECT カラム名 FROM DB.テーブル名;

以下のようにすれば複数のカラムを指定する事もできます!

SELECT
SELECT カラム名1, カラム名2  FROM DB.テーブル名;

※テーブル名のみでも取得はできますが、どのDBから取得しているのかをわかりやすくするために、DB名とセットで書く癖をつけておきましょう。

では、test01テーブルからデータの取得をしてみましょう!

SELECT
SELECT name, age FROM db_test.test01;

SQL_23.png

実行し、下記の画像のようにtest01テーブルに存在しているデータの中からnameとageの値のみ取得できていればOKです!
SQL_24.png

また、カラム名のところに*(アスタリスク)をつけることで、
全てのカラムを選択することができます。

SELECT
SELECT * FROM db_test.test01;

実行してみましょう!
SQL_25.png

画像のようにtest01テーブルからすべてのデータが取得できていればOKです!

★検索ワード
・SQL SELECT 使い方

条件検索(WHERE)

句とは命令文の後に付いて、その中の構成要素として使われます。
このWHERE句はSELECT文や、のちに説明するUPDATE文の中でよく使われます。

WHERE句は検索、絞り込みに使います。

使い方は以下のとおりです!

WHERE
SELECT * FROM DB.テーブル名 WHERE 条件式;

条件式には以下のようなものがあります。
=,<,>,AND,OR など


age >= 19 ・・・ ageカラムの値が19以上のものを取得する

name = “サトウ” ・・・ nameカラムの値が”サトウ”のものを取得する

name != “ナカタ” ・・・ nameカラムの値が”ナカタ”以外のものを取得する

以下のような種類の演算子があります。

演算子 説明
= 等しい
大きい
小さい
>= 大きい、もしくは等しい
<= 小さい、もしくは等しい
!= 等しくない
<> 等しくない
AND 2つの条件を結合し、両方の条件が真
OR 2つの条件のうち、どちらか一方が真
NOT 式の結果を反転
BETWEEN a AND b 対象のフィールドが a と b の範囲内
IN 対象のフィールドが式の一覧の1つに一致
LIKE 対象のフィールドがパターンに一致

では、実際にWHERE句を使用してみましょう!

WHERE
SELECT * FROM db_test.test01 WHERE age = 22;

SQL_26.png

画像のような検索結果が表示されていればOKです!

★検索ワード
・SQL WHERE 使い方

データの更新(UPDATE)

UPDATE文はすでにあるレコードを編集したいときに使います。
WHERE句で編集対象を絞り込みつつ、使用します。

使い方は以下のとおりです!

UPDATE
UPDATE DB.テーブル名 SET 項目名=更新する値 WHERE 編集したいレコードを特定できる式;

では、実際にUPDATE文を使用してみましょう!

UPDATE
UPDATE db_test.test01 SET name = "鳥山明" WHERE id = 1;

SQL_27.png

画像のように、idが1の人のnameの値が鳥山明になっていればOKです!

条件指定をしないと全てのカラムが対象となり、データが書き変わってしまうので注意しましょう。

UPDATE
UPDATE db_test.test01 SET age = 99;

上記のUPDATE文を実行すると、以下の画像のようになってしまいます。
SQL_28.png

★検索ワード
・SQL UPDATE 使い方

データの削除(DELETE)

レコードの削除にはDELETE文を使用します。
これもUPDATEと同じく、条件指定しないと全て消えてしまうので気を付けましょう。

使い方は以下のとおりです!

DELETE
DELETE FROM DB.テーブル名 WHERE 条件式;

では、実際にDELETE文を使用してみましょう!

DELETE
DELETE FROM db_test.test01 WHERE id >= 3;

SQL_29.png

画像のようにidが1、2のデータ以外がすべて削除されればOKです!

★検索ワード
・SQL DELETE 使い方

テーブル、データベースの削除(DROP)

テーブル、データベースの削除にはDROP文を使用します。
これもUPDATEと同じく、条件指定しないと全て消えてしまうので気を付けましょう。

使い方は以下のとおりです!

DROP
DROP TABLE DB.テーブル名;

では、実際にDROP文を使用してみましょう!

DROP
DROP TABLE db_test.test01;

SQL_30.png

画像のようにtest01が削除されていればOKです!

★検索ワード
・SQL DROP 使い方

コメント

コメントはプログラムとして実行されないので、
書いたコードの説明や、メモ等に使うことができます。

使い方は以下のとおりです!

コメント
-- これはコメントです

複数行コメントの書き方は以下のとおりです!

複数コメント
/*
  コメント
  コメント
  コメント
*/

/* 〜 */で囲った部分がコメントになります。

★検索ワード
・SQL コメント

複数レコードのINSERT

先ほどDROPでテーブルごと削除してしまったので、
テスト用のテーブルが消えてしまいましたね。

今から同じものを作りますが、こんなときもSQLを使うと、
最初に行った画面操作より楽に作ることができます。

手順としては以下です。
①CREATE文でテーブルの作成
②INSERT文でデータの一括作成

INSET文はVALUESの値をいくつも連続で指定すれば、複数行のデータを一括で作ることができます。
では、実際にINSERT文で複数のレコードを一括で作成しましょう!

INSERT
-- テーブル作成のCREATE文
CREATE TABLE db_test.test01 (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  age INT NOT NULL,
  code VARCHAR(255)
);

-- 複数レコード一括INSERT
INSERT INTO 
  db_test.test01
  (id, name, age, code)
  VALUES 
  (1, 'タロウ', 18, '001'),
  (2, 'ハナコ', 22, '001'),
  (3, 'イチロウ', 48, '002'),
  (4, 'キョウコ', 46, '002'),
  (5, 'ポチ', 3, '003');

SQL_31.png

画像のようにtest01テーブルが作成され、データが作成されていればOKです!

★検索ワード
・SQL INSERT 複数

IN

IN句は条件式などに使用します。
IN句内のリストに一致するものを取得できます。

使い方は以下のとおりです!

IN
[対象の要素名] IN([1,2,3]);

では、実際にIN句を使用してみましょう!

IN
SELECT id,name FROM db_test.test01 WHERE name IN("タロウ","ハナコ");

SQL_32.png

画像のようにnameの値がタロウとハナコのデータを取得できていればOKです!

★検索ワード
・SQL IN 使い方

LIKE

IN句と同じように条件式に使用でき、文字列を部分一致検索します。
基本的にWHERE句の後ろに、条件の一つとして記述することになります。

また、LIKE句には、ワイルドカードと呼ばれるものと一緒に使います。
ワイルドカード
% ・・・ 0文字以上の任意の文字列
_ ・・・ 任意の1文字

使い方は以下のとおりです!

LIKE
SELECT 列名 FROM テーブル名 WHERE 列名 LIKE '検索文字';

では、実際にLIKE句を使用してみましょう!

LIKE
SELECT id,name FROM db_test.test01 WHERE name LIKE "キ%";

SQL_33.png

今回はnameの値がキ%という条件で検索したので、nameの値がキから始まるデータを取得しています。
なので、画像のようにnameの値がキョウコのデータを取得できていればOKです!

★検索ワード
・SQL LIKE 使い方

NOT

直後の条件式などを否定する際に使用します。

使い方は以下のとおりです!

NOT
SELECT カラム名 FROM テーブル名 WHERE カラム名 NOT LIKE '検索文字';

では、実際にNOTを使用してみましょう!

NOT
SELECT id,name FROM db_test.test01 WHERE name NOT LIKE "キ%";

SQL_34.png

今度は先程のLIKE句の説明で検索したのとは反対にnameの値がキから始まらないデータを検索しています。
なので、画像のようにnameの値がキョウコ以外のデータを取得できていればOKです!

★検索ワード
・SQL NOT 使い方

iS NULL

指定されたカラムがnullのものを取得します。

使い方は以下のとおりです!

isNULL
SELECT カラム名 FROM テーブル名 WHERE カラム名 is NULL;

では、実際にis NULLを使用してみましょう!

isNULL
--検索用のデータを作成
INSERT INTO db_test.test01 VALUES (6,"コジロウ",1,null);

--検索実行
SELECT * FROM db_test.test01 WHERE code is NULL;

SQL_35.png

画像のようにcodeの値がnullであるコジロウのデータを取得できていればOKです!

★検索ワード
・SQL is NULL 使い方

COUNT

COUNTとは集計関数といって、数を数える関数です。
関数とは、単一の値もしくはデータの集合を処理して、その結果を返すものです。
関数を使うことで、四捨五入、合計値や平均値の算出といった処理を簡単に記述することができます。

カラムごとにカウントもできます。
その場合NULLはカウントしません。

使い方は以下のとおりです!

COUNT
SELECT COUNT(カラム名) FROM テーブル名;

では、実際にCOUNTを使用してみましょう!

COUNT
SELECT COUNT(code) FROM db_test.test01;

SQL_36.png

画像のようにCOUNT(code)が5と表示されていればOKです!

また、COUNT(*)とすることで全てのカラム(登録されているデータの数)をカウントできます。

その場合は下記のように使用します!

COUNT
SELECT COUNT(*) FROM db_test.test01;

こちらを実行すると以下の画像のようにCOUNT(*)が6と表示されます!
SQL_37.png

★検索ワード
・SQL COUNT 使い方

GROUP BY

GROUP BYは集計関数と一緒に使われることが多いです。
カラムごとの集計をするときに使用します。

使い方は以下のとおりです!

GROUPBY
SELECT カラム名、COUNT(カラム名) FROM db_test.test01 GROUP BY code;

では、実際にGROUP BYを使用してみましょう!

GROUPBY
SELECT code, COUNT(code) FROM db_test.test01 GROUP BY code;

SQL_38.png

画像のようにcodeの値ごとのカウント数が取得できていればOKです!
GROUP BYを使用することで、より詳細にカウント数を取得することができます!

★検索ワード
・SQL GROUP BY 使い方

AS

ASはCOUNTなどで取得した値についてカラム名を指定できます。
以下のコードをそれぞれ実行し、動きを見比べてみましょう!

AS
-- ①code集計
SELECT code, COUNT(code) FROM db_test.test01 GROUP BY code;
-- ②code集計 COUNT(code)のカラム名
SELECT code, COUNT(code) AS "各codeの数" FROM db_test.test01 GROUP BY code;

①code集計
SQL_39.png

②code集計 COUNT(code)のカラム名
SQL_40.png

①でCOUNT(code)となっているカラム名が②では各codeの数となっています!
このようにカラム名を変更し、どういった値を集計しているのかということをわかりやすく表示させることができます。

★検索ワード
・SQL AS 使い方

HAVING

HAVINGの説明の前に以下のコードを実行してください。

HAVING
SELECT * FROM db_test.test01 HAVING code = "001";

お気づきかもしれませんが、HAVINGはWHEREと同じ動きをします。
ただ、実行されるタイミングが違います。

SQLの命令文は以下の順番で実行されます
①WHERE

②GROUP BY

③HAVING

このため,GROUP BYを使わない処理では
WHERE,HAVINGを使い分けなくても問題ないですが、

GROUP BYを使う場合は使い分けていきましょう。

以下のSQL文を実行してみましょう!

HAVING
SELECT code, COUNT(code) AS code_count FROM db_test.test01 GROUP BY code HAVING code_count>1;

SQL_41.png

画像のようにカラムがcodeで、カウント数が1よりも大きいデータのカウント数が表示されていればOKです!

★検索ワード
・SQL HAVING 使い方

CASE

CASEは条件分岐を行うための命令です。

使い方は以下のとおりです!

CASE
SELECT
  *,
  CASE
    WHEN 条件式 THEN 条件を満たしたら表示する内容
    WHEN 条件式 THEN 条件を満たしたら表示する内容
    ELSE 条件を満たしていなかったら表示する内容
  END
FROM DB.テーブル名;

CASEの後にWHENで条件を書いて、THENでその条件に当てはまったものを出力します。
また、ELSEは他の条件全てに当てはまらなかったときに出力する処理を書きます。
最後にENDで閉じます。

ちなみにWHENの条件はいくつ書いてもOKです。

参考例①

CASE
SELECT
  *,
  CASE
    WHEN age >= 40 THEN "ベテラン"
    WHEN age <= 25 THEN "若手"
    ELSE "その他"
  END
FROM db_test.test01;

ASで名前を付けてあげると見やすいですね。

参考例②

CASE
SELECT
  *,
  CASE
    WHEN age >= 40 THEN "ベテラン"
    WHEN age <= 25 THEN "若手"
    ELSE "その他"
  END AS "区分"
FROM db_test.test01;

★検索ワード
・SQL CASE 使い方

SUM

こちらのSUMも関数です。
カラムの数値の合計値を取得できます。
※数値カラムのみ使用可能

使い方は以下のとおりです!

SUM
SELECT SUM(カラム名) FROM テーブル名;

参考例

SUM
-- 年齢の合計値を取得
SELECT SUM(age) FROM db_test.test01;

★検索ワード
・SQL SUM 使い方

AVG

こちらのAVGも関数です。
カラムの数値の平均値を取得できます。
※数値カラムのみ使用可能。

使い方は以下のとおりです!

AVG
SELECT AVG(カラム名) FROM テーブル名;

参考例

AVG
-- 年齢の平均値を取得
SELECT AVG(age) FROM db_test.test01;

★検索ワード
・SQL AVG 使い方

MAX,MIN

これらの関数MAXとMINは
MAXはカラムの数値の最大値、MINは最小値を取得できます。
※数値カラムのみ使用可能。

使い方はそれぞれ以下のとおりです!

MAX
SELECT MAX(カラム名) FROM テーブル名;
MIN
SELECT MIN(カラム名) FROM テーブル名;

参考例

MAX
SELECT MAX(age) FROM db_test.test01;
MIN
SELECT MIN(age) FROM db_test.test01;

★検索ワード
・SQL MAX 使い方
・SQL MIN 使い方

ORDER BY

ORDER BYは指定したカラムを対象に昇順(または降順)に並び替えることができます。
昇順(ASC)、降順(DESC)を指定可能

使い方はそれぞれ以下のとおりです!

ASC
SELECT カラム名 FROM テーブル名 ORDER BY カラム名 ASC;
DESC
SELECT カラム名 FROM テーブル名 ORDER BY カラム名 DESC;

参考例

ASC
SELECT * FROM db_test.test01 ORDER BY age ASC;
DESC
SELECT * FROM db_test.test01 ORDER BY age DESC;

##サブクエリ
SQL文を実行した結果を、さらに別のSQL文に利用することができます。

この時、SQL文のなかにSQL文を書くことになります。これを、サブクエリといいます。

今回は全体の平均年齢以上の人だけを表示するSQL文を例に挙げてみましょう!

順序だてて考えていくと、
①全体の平均年齢を出す
② ①の結果を条件式にしてレコード取得

つまり①のクエリがサブクエリになります。

では、実際にSQL文を見てみましょう!

サブクエリ
SELECT * FROM db_test.test01 WHERE age >= (SELECT AVG(age) FROM db_test.test01);

上記のSQL文の()内の部分SELECT AVG(age) FROM db_test.test01が平均年齢を出している箇所になります。
そして、こちらの箇所がサブクエリと呼ばれる箇所です。
()内のSQL文の実行結果は23.0000です。
これは、test01のageカラムの平均値が23であるということを示しています。

サブクエリの箇所で行われている処理が理解できたところで、実際にSQL文を実行してみましょう!

SQL_42.png

画像のように、test01テーブルの中からageの値が平均値以上(23以上)のデータのみ取得できていればOKです!

★検索ワード
・SQL ORDER BY 使い方

INNER JOIN

INNER JOINとは複数のテーブル同士のデータを取得し、結合を行い、データを取得したりする際に使用します。
言葉ではわかりづらいかと思いますので実際に使用してみましょう!

使い方は以下のとおりです!

INNERJOIN
 SELECT 取得するカラム FROM DB.テーブルA INNER JOIN DB.テーブルB 
 ON Aの対象カラム = Bの対象カラム;

以下のSQL文を実行してみましょう!

INNERJOIN
SELECT * FROM db_test.test01
INNER JOIN db_test.test02
ON db_test.test01.code = db_test.test02.code;

SQL_43.png

画像のようにデータが取得できていればOKです!
何が起こっているのかを詳しく説明していきます!
まず、SELECT * FROM db_test.test01でtest01テーブルのデータをすべて取得しています。
次にINNER JOIN db_test.test02でdb_test.test02テーブルのデータをSELECT文で取得したtest01テーブルと同じように取得しています。
最後に、ON db_test.test01.code = db_test.test02.codeでtest01テーブルとtest02テーブルのcodeカラムの値が同じもの同士を結合しています。
上記の例では、test01テーブルとtest02テーブルのすべてのデータを取得していますが、
指定したカラムだけを取得することもできます。

カラム指定
SELECT test01.id, name, test01.code, occupation FROM db_test.test01
INNER JOIN db_test.test02
ON db_test.test01.code = db_test.test02.code;

上記のSQL文を実行すると下記画像のように表示されます。
SQL_44.png

★検索ワード
・SQL INNER JOIN 使い方

LEFT(RIGHT) JOIN

LEFT(RIGHT) JOINもINNER JOIN同様に複数のテーブルのデータ同士を結合し取得するために使用されます。

まずは使用してみましょう!

使い方は以下のとおりです!

LEFTJOINとRIGHTJOIN
 SELECT 取得するカラム FROM DB.テーブルA LEFT(RIGHT) JOIN DB.テーブルB 
 ON Aの対象カラム = Bの対象カラム;

まずはLEFT JOINを実行しましょう!
こちらでは、idが6のnameがコジロウのnameカラムのデータが表示されます。

LEFTJOIN
SELECT * FROM db_test.test01 LEFT JOIN db_test.test02 ON db_test.test01.code =db_test.test02.code;

SQL_45.png

画像のようにデータが取得できていればOKです!

次に、RIGHT JOINを実行しましょう!
こちらでは、idが6のnameがコジロウのnameカラムのデータは表示されていません。

RIGHTJOIN
SELECT * FROM db_test.test01 RIGHT JOIN db_test.test02 ON db_test.test01.code =db_test.test02.code;

SQL_46.png

なんとなく違いはわかっていただけたかと思います。
では、詳しく説明していきます。

まず、LEFT JOIN, RIGHT JOINは、LEFT OUTER JOIN, RIGHT OUTER JOINの省略系です。
LEFTであろうと、RIGHTであろうと、OUTER JOINという属性のクエリです。

OUTER JOINとは、複数のテーブルがあり、それを結合する際、優先テーブルを1つ決め、そこにある情報は全て表示しながら、他のテーブル情報に対になるデータがあれば表示する(ない場合はNULLで補完表示)。
という機能となります。
よって、先程のSQL文を実行した際にnameがコジロウのnameカラムのデータがLEFT JOINを使用した際には表示され、RIGHT JOINを使用した際には表示が行われなかったのです。
そして、LEFT, RIGHTは、そのテーブルが優先テーブルなのかを決めるために使っています。

★検索ワード
・SQL LEFT JOIN 使い方
・SQL RIGHT JOIN 使い方
・SQL OUTER JOIN 使い方

SQLの実行順序

SQLの実行される順序について説明していきます。
HAVINGとWHEREの説明でも少し触れましたが、以下がSQLの実行順序です。

1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE または WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP

意図しない動きがあった時はこの順序が関係しているかもしれませんので、チェックしましょう。

★検索ワード
・SQL 実行順序

おめでとうございます!

SQLの教材を最後までお読みいただき、ありがとうございました。
SQLの概要はわかっていただけましたか?

アプリケーション開発とデータベースの使用は切っても切れない関係にあるので、しっかりと理解を深めておきましょう!

0

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