カラムを別名で取得
テーブルを作成したときのカラム名で取得するのではなく、別の名前で取得することも可能。
後述する「表結合」を行う際に必要になる。
SELECT
カラム1 AS 別名1,
カラム2 AS 別名2,
カラム3 AS 別名3
FROM
テーブル名
表を結合する
「表結合」を行うことで、複数の表のデータをまとめて参照することが可能ができる。
RDBを説明した際に、「言語データ」と「用途データ」という2つのデータに分けたが、
ここでいうデータというものは「テーブル」の事を指す。つまり、「言語テーブル」と「用途テーブル」そのものをデータとして扱う。
「表結合」を行うと、データの参照がより効率的になる。
表結合を行うには、複数のテーブルが必要。
まず、新しいテーブルを作成。
CREATE TABLE examples(
id int(10) PRIMARY KEY NOT NULL,
languages_id int(11),
example VARCHAR(20)
);
examplesテーブルにデータを登録
INSERT INTO examples(
id,
languages_id,
example
)VALUES(
1,
1,
'Minecraft'
),(
2,
2,
'RDB'
),(
3,
3,
'文字'
),(
4,
4,
'色付け'
),(
5,
1,
'Evernote'
),(
6,
1,
'Android'
),(
7,
20,
'AI'
);
表結合には、内部結合(INNER JOIN)と外部結合(OUTER JOIN)の2種類がある。
内部結合(INNER JOIN)
SELECT
/*参照するテーブルとそのカラム ※ここで定義したものが参照され、表示される*/
テーブル名1.カラム名1,
テーブル名1.カラム名2,
テーブル名2.カラム名1,
テーブル名2.カラム名2
/*どのテーブルを結合するか*/
FROM
テーブル名1
INNER JOIN
テーブル名2
ON
/*結合する条件*/
2つのテーブルの結合条件
上記をもとに、languagesテーブルとexamplesテーブルを連結してみる。
SELECT
languages.id,
languages.language,
examples.example
FROM
languages
INNER JOIN
examples
ON
languages.id = books.languages_id;
結果は以下の通り。
外部結合(OUTER JOIN)
外部結合は左右それぞれのテーブルの指定したカラムの値が一致するレコードに加えてどちらかのテーブルにしか存在しないデータについても取得する。基本となる構文は次の通り。
外部結合(LEFT JOIN)の基本構文
SELECT
テーブル名1.カラム名1,
テーブル名1.カラム名2,
テーブル名2.カラム名1,
テーブル名2.カラム名2
FROM
/*↓こちらにしかないデータも取得する*/
テーブル名1
LEFT JOIN
テーブル名2
ON
2つのテーブルの結合条件
外部結合(RIGHT JOIN)の基本構文
SELECT
テーブル名1.カラム名1,
テーブル名1.カラム名2,
テーブル名2.カラム名1,
テーブル名2.カラム名2
FROM
テーブル名1
RIGHT JOIN
/*↓こちらにしかないデータも取得する*/
テーブル名2
ON
2つのテーブルの結合条件
基本的に内部結合の場合と同じだが、外部結合では結合の対象となっているカラムの値が一致しているデータに加え、カラムの値がどちらかのテーブルにしかなかった場合でもデータとして取得する。
この時、LEFT JOINでは、FROMの後に書かれたテーブルのデータだけを取得し、
RIGHT JOINでは、JOINの後に書かれたテーブルのデータだけを取得する。
LEFT JOINで結合した場合
SELECT
languages.id,
languages.language,
examples.example
FROM
languages
LEFT JOIN
examples
ON
authors.id = books.author_id;
examplesにないところはNULLで表示される。
RIGHT JOINで結合した場合
SELECT
languages.id,
languages.language,
examples.example
FROM
languages
RIGHT JOIN
examples
ON
authors.id = books.author_id;
シーケンス番号の自動生成
指定したカラムに対してMySQLが自動的に一意のシーケンス番号を生成する機能。
利用するにはAUTO_INCREMENTで設定する。構文は以下の通り。
CREATE TABLE authors (
Id int(11) PRIMARY KEY AUTO_INCREMENT NOT NULL,
language VARCHAR(10),
use VARCHAR(20)
);
基本的にAUTO_INCREMENTが設定されたカラムには自動で値が格納されていくように利用するが、
任意の数値、また重複した値を格納する事も可能。
AUTO_INCREMENTをテーブル内で設定する場合は次の点に注意。
・AUTO_INCREMENTを設定するカラムには同時にインデックスを設定する必要がある
・AUTO_INCREMENTはテーブル内の1つのカラムにしか設定できない
・AUTO_INCREMENTを設定したカラムにはDEFAULTは設定できない
・AUTO_INCREMENTには正の値しか格納できない(負の数も可能だが予期しない結果となる)
<前回の記事>
・データベース、SQL・MySQLの基礎
https://qiita.com/TaikiTkwkbysh/items/8efc5faf8da2062a8a95
・データベース、SQL・MySQLの基礎(テーブルの作成から削除)
https://qiita.com/TaikiTkwkbysh/items/d1d38dda0f5844f7603b
・データベース、SQL・MySQLの基礎(データの登録〜並び替えて参照)
https://qiita.com/TaikiTkwkbysh/items/04b0db468490f0d79b67
<次回の記事>
・データベース、SQL・MySQLの基礎(命名規約)