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を開いてみてください
①ヘッダーメニューにあるTools
をクリック
②phpMyAdmin
をクリック
下記のLanguage
という項目から言語を日本語に変更できるので、設定しておきましょう!
★検索ワード
・phpMyAdmin とは
・phpMyAdmin 使い方
データベースを作成する
以下の手順でphpMyAdminで学習用のデータベースを作成していきましょう!
2.データベース名を入力
今回はdb_test
という名前のDB(データベース)を作りましょう。
db_testと入力し、作成
をクリック
左側のメニューバーに先程作成したdb_test
が追加されましたね!
これでデータベースの作成は完了です。
★検索ワード
・phpMyAdmin DB作成
テーブルを作成する
「一つ前のデータベースを作成する」で作成したdb_testというデータベースの中にテーブル(表)
を作りましょう!
1.テーブル名を入力
test01
という名前のテーブルを作りましょう。
名前の入力欄にtest01
を入力、カラムは4
で設定し、実行
を押してください。
2.カラムを入力
ここではテーブルの項目の名前やデータ型、長さ等を入力します。
データ型についてはこちらを参考
https://blog.proglus.jp/695/
データ型がINT
の長さは設定が必須ではないので今回は入力しません。
以下のように記入できたら右下の保存する
を押して保存しましょう。
このようにdb_testの中にtest01というテーブルができていれば、成功です。
データを登録する
続いて、データを登録していきます。
今回は下記のようなデータをtest01に登録したいと思います。
id | name | age | code |
---|---|---|---|
1 | タロウ | 18 | 001 |
2 | ハナコ | 22 | 001 |
3 | イチロウ | 48 | 002 |
4 | キョウコ | 46 | 002 |
5 | ポチ | 3 | 003 |
以下の手順でphpMyAdminから登録できます。
1.データを登録したいテーブルをクリック
3.値を入力
まずは先程の表にあった、タロウのデータを作成します。
値
に表を参考にデータを入れます。
idに1
、nameにタロウ
、ageに18
、codeに001
をそれぞれ入力してください。
入力ができたら実行をクリック
下記の画像のような画面が表示されればOKです!
それではメニュータブから、表示をクリックしデータを確認しましょう。
4.データの確認
データがうまく登録できているか確認しましょう!
下記の画像のようになっていればOKです!
先ほどと同じ要領で残りのデータを登録しましょう!
id | name | age | code |
---|---|---|---|
1 | タロウ | 18 | 001 |
2 | ハナコ | 22 | 001 |
3 | イチロウ | 48 | 002 |
4 | キョウコ | 46 | 002 |
5 | ポチ | 3 | 003 |
画像のように登録できたら、次へ進みましょう。
★検索ワード
・phpMyAdmin テーブル作成
・DB カラムとは
用語解説
さて、ここまで流れに沿って進めてきましたが、ここで用語の解説をしていきます。
テーブル、カラム、レコードなど、慣れない言葉が出てきましたね。
以下画像で見るとわかりやすいので、構造ごと覚えてしまいましょう。
また、データベースを扱う際の用語でよく出てくるものをここで挙げておきますので、
しっかりと覚えておきましょう。
・クエリ
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をクリックしてください。
以下のような画面が表示さればOKです!
このテキストエリアにSQLを書いていきます。
※入力フォームにSELECT * FROM WHERE 1と表示されていたら、消してから書いてください
今回はテーブルを新規作成したいので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 TABLE db_test.test02 (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(255),
occupation VARCHAR(255)
);
うまく作成できているか確認してみましょう!
下記の画像のようになっていればOKです!
これでテーブルの作成が完了しました!
エラーが出るようであれば、コードの記述に間違いがあるので、見本のコードどおりに記述できているか確認しましょう。
★検索ワード
・SQL CREATE 使い方
・SQL データ型
SQLでデータを登録する(INSERT)
では次はデータ(レコード)を登録していきましょう。
レコードの新規登録にはINSERT文を使います。
使い方は以下のとおりです!
INSERT INTO DB名.テーブル名 (カラム名1,カラム名2,カラム名3) VALUES(値1, 値2, 値3);
test02の一番上のレコードを追加するSQLを書きます。
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文を記述し、実行しましょう!
同じ要領で残りのデータを登録しましょう!
画像のようにすべてのデータが登録できればOKです!
★検索ワード
・SQL INSERT 使い方
・SQL レコードとは
SQLでデータを取得する(SELECT)
SELECT文とはDBからデータを取得する命令文です。
膨大なデータの中から対象となるデータを探したり、
特定のカラムだけを並べたりするときにSELECT文を使います。
今まで学習してきた、CREATEやINSERTとは違ってSELECTは情報を取得するだけですので、直接データに変更を加えるものではありません。
使い方は以下のとおりです!
SELECT カラム名 FROM DB名.テーブル名;
以下のようにすれば複数のカラムを指定する事もできます!
SELECT カラム名1, カラム名2 FROM DB名.テーブル名;
※テーブル名のみでも取得はできますが、どのDBから取得しているのかをわかりやすくするために、DB名とセットで書く癖をつけておきましょう。
では、test01テーブルからデータの取得をしてみましょう!
SELECT name, age FROM db_test.test01;
実行し、下記の画像のようにtest01テーブルに存在しているデータの中からnameとageの値のみ取得できていればOKです!
また、カラム名のところに*(アスタリスク)
をつけることで、
全てのカラムを選択することができます。
SELECT * FROM db_test.test01;
画像のようにtest01テーブルからすべてのデータが取得できていればOKです!
★検索ワード
・SQL SELECT 使い方
条件検索(WHERE)
句とは命令文の後に付いて、その中の構成要素として使われます。
このWHERE句はSELECT文や、のちに説明するUPDATE文の中でよく使われます。
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句を使用してみましょう!
SELECT * FROM db_test.test01 WHERE age = 22;
画像のような検索結果が表示されていればOKです!
★検索ワード
・SQL WHERE 使い方
データの更新(UPDATE)
UPDATE文はすでにあるレコードを編集したいときに使います。
WHERE句で編集対象を絞り込みつつ、使用します。
使い方は以下のとおりです!
UPDATE DB名.テーブル名 SET 項目名=更新する値 WHERE 編集したいレコードを特定できる式;
では、実際にUPDATE文を使用してみましょう!
UPDATE db_test.test01 SET name = "鳥山明" WHERE id = 1;
画像のように、idが1の人のnameの値が鳥山明
になっていればOKです!
条件指定をしないと全てのカラムが対象となり、データが書き変わってしまうので注意しましょう。
UPDATE db_test.test01 SET age = 99;
上記のUPDATE文を実行すると、以下の画像のようになってしまいます。
★検索ワード
・SQL UPDATE 使い方
データの削除(DELETE)
レコードの削除にはDELETE文を使用します。
これもUPDATEと同じく、条件指定しないと全て消えてしまうので気を付けましょう。
使い方は以下のとおりです!
DELETE FROM DB名.テーブル名 WHERE 条件式;
では、実際にDELETE文を使用してみましょう!
DELETE FROM db_test.test01 WHERE id >= 3;
画像のようにidが1、2のデータ以外がすべて削除されればOKです!
★検索ワード
・SQL DELETE 使い方
テーブル、データベースの削除(DROP)
テーブル、データベースの削除にはDROP文を使用します。
これもUPDATEと同じく、条件指定しないと全て消えてしまうので気を付けましょう。
使い方は以下のとおりです!
DROP TABLE DB名.テーブル名;
では、実際にDROP文を使用してみましょう!
DROP TABLE db_test.test01;
画像のようにtest01
が削除されていればOKです!
★検索ワード
・SQL DROP 使い方
コメント
コメントはプログラムとして実行されないので、
書いたコードの説明や、メモ等に使うことができます。
使い方は以下のとおりです!
-- これはコメントです
複数行コメントの書き方は以下のとおりです!
/*
コメント
コメント
コメント
*/
/* 〜 */で囲った部分がコメントになります。
★検索ワード
・SQL コメント
複数レコードのINSERT
先ほどDROPでテーブルごと削除してしまったので、
テスト用のテーブルが消えてしまいましたね。
今から同じものを作りますが、こんなときもSQLを使うと、
最初に行った画面操作より楽に作ることができます。
手順としては以下です。
①CREATE文でテーブルの作成
②INSERT文でデータの一括作成
INSET文はVALUESの値をいくつも連続で指定すれば、複数行のデータを一括で作ることができます。
では、実際に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');
画像のようにtest01
テーブルが作成され、データが作成されていればOKです!
★検索ワード
・SQL INSERT 複数
IN
IN句は条件式などに使用します。
IN句内のリストに一致するものを取得できます。
使い方は以下のとおりです!
[対象の要素名] IN([値1,値2,値3…]);
では、実際にIN句を使用してみましょう!
SELECT id,name FROM db_test.test01 WHERE name IN("タロウ","ハナコ");
画像のようにname
の値がタロウとハナコのデータを取得できていればOKです!
★検索ワード
・SQL IN 使い方
LIKE
IN句と同じように条件式に使用でき、文字列を部分一致検索します。
基本的にWHERE句
の後ろに、条件の一つとして記述することになります。
また、LIKE句には、ワイルドカードと呼ばれるものと一緒に使います。
ワイルドカード
% ・・・ 0文字以上の任意の文字列
_ ・・・ 任意の1文字
使い方は以下のとおりです!
SELECT 列名 FROM テーブル名 WHERE 列名 LIKE '検索文字';
では、実際にLIKE句を使用してみましょう!
SELECT id,name FROM db_test.test01 WHERE name LIKE "キ%";
今回はnameの値がキ%
という条件で検索したので、nameの値がキから始まるデータを取得しています。
なので、画像のようにname
の値がキョウコのデータを取得できていればOKです!
★検索ワード
・SQL LIKE 使い方
NOT
直後の条件式などを否定する際に使用します。
使い方は以下のとおりです!
SELECT カラム名 FROM テーブル名 WHERE カラム名 NOT LIKE '検索文字';
では、実際にNOTを使用してみましょう!
SELECT id,name FROM db_test.test01 WHERE name NOT LIKE "キ%";
今度は先程のLIKE句の説明で検索したのとは反対にnameの値がキから始まらない
データを検索しています。
なので、画像のようにname
の値がキョウコ以外
のデータを取得できていればOKです!
★検索ワード
・SQL NOT 使い方
iS NULL
指定されたカラムがnullのものを取得します。
使い方は以下のとおりです!
SELECT カラム名 FROM テーブル名 WHERE カラム名 is NULL;
では、実際にis NULLを使用してみましょう!
--検索用のデータを作成
INSERT INTO db_test.test01 VALUES (6,"コジロウ",1,null);
--検索実行
SELECT * FROM db_test.test01 WHERE code is NULL;
画像のようにcode
の値がnullであるコジロウのデータを取得できていればOKです!
★検索ワード
・SQL is NULL 使い方
COUNT
COUNTとは集計関数といって、数を数える関数です。
関数とは、単一の値もしくはデータの集合を処理して、その結果を返すものです。
関数を使うことで、四捨五入、合計値や平均値の算出といった処理を簡単に記述することができます。
カラムごとにカウントもできます。
その場合NULLはカウントしません。
使い方は以下のとおりです!
SELECT COUNT(カラム名) FROM テーブル名;
では、実際にCOUNTを使用してみましょう!
SELECT COUNT(code) FROM db_test.test01;
画像のようにCOUNT(code)が5
と表示されていればOKです!
また、COUNT(*)とすることで全てのカラム(登録されているデータの数)をカウントできます。
その場合は下記のように使用します!
SELECT COUNT(*) FROM db_test.test01;
こちらを実行すると以下の画像のようにCOUNT(*)が6
と表示されます!
★検索ワード
・SQL COUNT 使い方
GROUP BY
GROUP BYは集計関数と一緒に使われることが多いです。
カラムごとの集計をするときに使用します。
使い方は以下のとおりです!
SELECT カラム名、COUNT(カラム名) FROM db_test.test01 GROUP BY code;
では、実際にGROUP BYを使用してみましょう!
SELECT code, COUNT(code) FROM db_test.test01 GROUP BY code;
画像のようにcodeの値ごとのカウント数が取得できていればOKです!
GROUP BYを使用することで、より詳細にカウント数を取得することができます!
★検索ワード
・SQL GROUP BY 使い方
AS
ASはCOUNTなどで取得した値についてカラム名を指定できます。
以下のコードをそれぞれ実行し、動きを見比べてみましょう!
-- ①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;
①でCOUNT(code)となっているカラム名が②では各codeの数
となっています!
このようにカラム名を変更し、どういった値を集計しているのかということをわかりやすく表示させることができます。
★検索ワード
・SQL AS 使い方
HAVING
HAVINGの説明の前に以下のコードを実行してください。
SELECT * FROM db_test.test01 HAVING code = "001";
お気づきかもしれませんが、HAVINGはWHEREと同じ動きをします。
ただ、実行されるタイミングが違います。
SQLの命令文は以下の順番で実行されます
①WHERE
↓
②GROUP BY
↓
③HAVING
このため,GROUP BYを使わない処理では
WHERE,HAVINGを使い分けなくても問題ないですが、
GROUP BYを使う場合は使い分けていきましょう。
以下のSQL文を実行してみましょう!
SELECT code, COUNT(code) AS code_count FROM db_test.test01 GROUP BY code HAVING code_count>1;
画像のようにカラムがcodeで、カウント数が1よりも大きいデータのカウント数が表示されていればOKです!
★検索ワード
・SQL HAVING 使い方
CASE
CASEは条件分岐を行うための命令です。
使い方は以下のとおりです!
SELECT
*,
CASE
WHEN 条件式 THEN 条件を満たしたら表示する内容
WHEN 条件式 THEN 条件を満たしたら表示する内容
ELSE 条件を満たしていなかったら表示する内容
END
FROM DB名.テーブル名;
CASEの後にWHENで条件を書いて、THENでその条件に当てはまったものを出力します。
また、ELSEは他の条件全てに当てはまらなかったときに出力する処理を書きます。
最後にENDで閉じます。
ちなみにWHENの条件はいくつ書いてもOKです。
参考例①
SELECT
*,
CASE
WHEN age >= 40 THEN "ベテラン"
WHEN age <= 25 THEN "若手"
ELSE "その他"
END
FROM db_test.test01;
ASで名前を付けてあげると見やすいですね。
参考例②
SELECT
*,
CASE
WHEN age >= 40 THEN "ベテラン"
WHEN age <= 25 THEN "若手"
ELSE "その他"
END AS "区分"
FROM db_test.test01;
★検索ワード
・SQL CASE 使い方
SUM
こちらのSUMも関数です。
カラムの数値の合計値を取得できます。
※数値カラムのみ使用可能
使い方は以下のとおりです!
SELECT SUM(カラム名) FROM テーブル名;
参考例
-- 年齢の合計値を取得
SELECT SUM(age) FROM db_test.test01;
★検索ワード
・SQL SUM 使い方
AVG
こちらのAVGも関数です。
カラムの数値の平均値を取得できます。
※数値カラムのみ使用可能。
使い方は以下のとおりです!
SELECT AVG(カラム名) FROM テーブル名;
参考例
-- 年齢の平均値を取得
SELECT AVG(age) FROM db_test.test01;
★検索ワード
・SQL AVG 使い方
MAX,MIN
これらの関数MAXとMINは
MAXはカラムの数値の最大値、MINは最小値を取得できます。
※数値カラムのみ使用可能。
使い方はそれぞれ以下のとおりです!
SELECT MAX(カラム名) FROM テーブル名;
SELECT MIN(カラム名) FROM テーブル名;
参考例
SELECT MAX(age) FROM db_test.test01;
SELECT MIN(age) FROM db_test.test01;
★検索ワード
・SQL MAX 使い方
・SQL MIN 使い方
ORDER BY
ORDER BYは指定したカラムを対象に昇順(または降順)に並び替えることができます。
昇順(ASC)、降順(DESC)を指定可能
使い方はそれぞれ以下のとおりです!
SELECT カラム名 FROM テーブル名 ORDER BY カラム名 ASC;
SELECT カラム名 FROM テーブル名 ORDER BY カラム名 DESC;
参考例
SELECT * FROM db_test.test01 ORDER BY age ASC;
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文を実行してみましょう!
画像のように、test01テーブルの中からageの値が平均値以上(23以上)のデータのみ取得できていればOKです!
★検索ワード
・SQL ORDER BY 使い方
INNER JOIN
INNER JOINとは複数のテーブル同士のデータを取得し、結合を行い、データを取得したりする際に使用します。
言葉ではわかりづらいかと思いますので実際に使用してみましょう!
使い方は以下のとおりです!
SELECT 取得するカラム FROM DB名.テーブルA INNER JOIN DB名.テーブルB
ON Aの対象カラム = Bの対象カラム;
以下のSQL文を実行してみましょう!
SELECT * FROM db_test.test01
INNER JOIN db_test.test02
ON db_test.test01.code = db_test.test02.code;
画像のようにデータが取得できていれば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 INNER JOIN 使い方
LEFT(RIGHT) JOIN
LEFT(RIGHT) JOINもINNER JOIN同様に複数のテーブルのデータ同士を結合し取得するために使用されます。
まずは使用してみましょう!
使い方は以下のとおりです!
SELECT 取得するカラム FROM DB名.テーブルA LEFT(RIGHT) JOIN DB名.テーブルB
ON Aの対象カラム = Bの対象カラム;
まずはLEFT JOINを実行しましょう!
こちらでは、idが6
のnameがコジロウ
のnameカラムのデータが表示されます。
SELECT * FROM db_test.test01 LEFT JOIN db_test.test02 ON db_test.test01.code =db_test.test02.code;
画像のようにデータが取得できていればOKです!
次に、RIGHT JOINを実行しましょう!
こちらでは、idが6
のnameがコジロウ
のnameカラムのデータは表示されていません。
SELECT * FROM db_test.test01 RIGHT JOIN db_test.test02 ON db_test.test01.code =db_test.test02.code;
なんとなく違いはわかっていただけたかと思います。
では、詳しく説明していきます。
まず、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の概要はわかっていただけましたか?
アプリケーション開発とデータベースの使用は切っても切れない関係にあるので、しっかりと理解を深めておきましょう!