テーブル結合
- INNER JOIN:内部結合(共通部分のみ)
データがある列のみ結合
外部結合より、高速
$ SELECT <列名>, ... FROM <テーブル名1> INNER JOIN <テーブル名2> ON <テーブル名1.列名> = <テーブル名2.列名>; AS構文: hoge AS a これの意味は、hoge を a と名づける。 例: $ SELECT * FROM hoge AS a INNER JOIN piyo AS b ON a.columnA = b.columnB;
- LEFT OUTER JOIN:外部結合(元のテーブルと結合先の共通部分)
データがない列の値は、「NULL」にして結合
$ SELECT <列名>, ... FROM <テーブル名1> LEFT OUTER JOIN <テーブル名2> ON <テーブル名1.列名> = <テーブル名2.列名>; ・ LEFT OUTER JOIN テーブル名1 が元のテーブルになる。 ・ RIGHT OUTER JOIN テーブル名2 が元のテーブルになる。 例: $ SELECT * FROM hoge AS a LEFT OUTER JOIN piyo AS b ON a.columnA = b.columnB;
mysql> SELECT -> e.emp_no, -> e.first_name, -> e.gender, -> d.dept_no -> FROM -> employees AS e INNER JOIN dept_manager AS d -> ON e.emp_no = d.emp_no -> ; +--------+-------------+--------+---------+ | emp_no | first_name | gender | dept_no | +--------+-------------+--------+---------+ | 110022 | Margareta | M | d001 | | 110039 | Vishwani | M | d001 | | 110085 | Ebru | M | d002 | | 110114 | Isamu | F | d002 | | 110183 | Shirish | F | d003 | | 110228 | Karsten | F | d003 | | 110303 | Krassimir | F | d004 | | 110344 | Rosine | F | d004 | | 110386 | Shem | M | d004 | | 110420 | Oscar | M | d004 | | 110511 | DeForest | M | d005 | | 110567 | Leon | F | d005 | | 110725 | Peternela | F | d006 | | 110765 | Rutger | F | d006 | | 110800 | Sanjoy | F | d006 | | 110854 | Dung | M | d006 | | 111035 | Przemyslawa | M | d007 | | 111133 | Hauke | M | d007 | | 111400 | Arie | M | d008 | | 111534 | Hilary | F | d008 | | 111692 | Tonny | F | d009 | | 111784 | Marjo | F | d009 | | 111877 | Xiaobin | F | d009 | | 111939 | Yuchang | M | d009 | +--------+-------------+--------+---------+ 24 rows in set
SELECT d.dept_name, e.first_name, e.last_name, dm.from_date, dm.to_date FROM departments AS d INNER JOIN dept_manager AS dm ON d.dept_no = dm.dept_no INNER JOIN employees AS e ON dm.emp_no = e.emp_no ; 解説: d テーブル の dept_no と dm テーブル の dept_no の共通部分をもつレコードを抽出。 さらに、 dm の emp_no と e テーブルの emp_no の共通部分をもつレコードを抽出。 その上で、以下の列を表示する d.dept_name, e.first_name, e.last_name, dm.from_date, dm.to_date +--------------------+-------------+--------------+------------+------------+ | dept_name | first_name | last_name | from_date | to_date | +--------------------+-------------+--------------+------------+------------+ | Customer Service | Tonny | Butterworth | 1985-01-01 | 1988-10-17 | | Customer Service | Marjo | Giarratana | 1988-10-17 | 1992-09-08 | | Customer Service | Xiaobin | Spinelli | 1992-09-08 | 1996-01-03 | | Customer Service | Yuchang | Weedman | 1996-01-03 | 9999-01-01 | | Development | DeForest | Hagimont | 1985-01-01 | 1992-04-25 | | Development | Leon | DasSarma | 1992-04-25 | 9999-01-01 |