SELECT ... 何を出力するのか FROM ... どの表から出力するのか WHERE ... 選択条件 ORDER BY ... 結果のソートTop
a | b | a AND b | a OR b | NOT a | |
---|---|---|---|---|---|
false | false | false | false | true | |
false | true | false | true | true | |
true | false | false | true | false | |
true | true | true | true | false | |
select * FROM 表名 または select 式 [as 列別名] [, 式 [as 列別名], ...] FROM 表名
select * FROM employee結果表
EMP_ID DEPT_ID EMP_NAME BIRTHDAY HIREDATE SEX SAL ----------- ----------- -------------------- ---------- ---------- ----------- ----------- 1 10 羽生 章洋 1978-10-10 1990-12-17 1 800.00 2 10 釜本 喜美子 1975-05-20 1991-02-20 2 1600.00 3 20 安部 弘江 1974-06-01 1991-02-22 2 1250.00 4 20 松村 秀和 1970-09-13 1991-04-02 1 2975.00 5 30 萩原 恵理子 1985-03-16 2008-09-28 2 1250.00 6 30 岡田 奈緒子 1983-12-24 2007-05-01 2 2850.00 7 30 井上 尚志 1971-10-17 2000-11-15 1 2450.00 8 40 西口 麻衣子 1986-12-14 2008-12-03 2 3000.00 9 40 滝本 順三 1978-04-02 2004-12-18 1 5000.00 10 40 工藤 新一 1990-02-10 1999-04-01 1 1500.00 11 90 毛利光太郎 1970-12-31 1990-04-01 1 8000.00 11 レコードが選択されました。
select emp_name, birthday FROM employee結果表
EMP_NAME BIRTHDAY -------------------- ---------- 羽生 章洋 1978-10-10 釜本 喜美子 1975-05-20 安部 弘江 1974-06-01 松村 秀和 1970-09-13 萩原 恵理子 1985-03-16 岡田 奈緒子 1983-12-24 井上 尚志 1971-10-17 西口 麻衣子 1986-12-14 滝本 順三 1978-04-02 工藤 新一 1990-02-10 毛利光太郎 1970-12-31 11 レコードが選択されました。
select emp_name, birthday AS 誕生日 FROM employee結果表
EMP_NAME 誕生日 -------------------- ---------- 羽生 章洋 1978-10-10 釜本 喜美子 1975-05-20 安部 弘江 1974-06-01 松村 秀和 1970-09-13 萩原 恵理子 1985-03-16 岡田 奈緒子 1983-12-24 井上 尚志 1971-10-17 西口 麻衣子 1986-12-14 滝本 順三 1978-04-02 工藤 新一 1990-02-10 毛利光太郎 1970-12-31 11 レコードが選択されました。
select emp_name, sal FROM employee結果表
EMP_NAME SAL -------------------- ----------- 羽生 章洋 800.00 釜本 喜美子 1600.00 安部 弘江 1250.00 松村 秀和 2975.00 萩原 恵理子 1250.00 岡田 奈緒子 2850.00 井上 尚志 2450.00 西口 麻衣子 3000.00 滝本 順三 5000.00 工藤 新一 1500.00 毛利光太郎 8000.00 11 レコードが選択されました。
select emp_name, sal * 12 AS 年収 FROM employee結果表
EMP_NAME 年収 -------------------- ---------------------- 羽生 章洋 9600.00 釜本 喜美子 19200.00 安部 弘江 15000.00 松村 秀和 35700.00 萩原 恵理子 15000.00 岡田 奈緒子 34200.00 井上 尚志 29400.00 西口 麻衣子 36000.00 滝本 順三 60000.00 工藤 新一 18000.00 毛利光太郎 96000.00 11 レコードが選択されました。
select emp_name, cast(sal * 12 AS int) AS 年収 FROM employee結果表
EMP_NAME 年収 -------------------- ----------- 羽生 章洋 9600 釜本 喜美子 19200 安部 弘江 15000 松村 秀和 35700 萩原 恵理子 15000 岡田 奈緒子 34200 井上 尚志 29400 西口 麻衣子 36000 滝本 順三 60000 工藤 新一 18000 毛利光太郎 96000 11 レコードが選択されました。
select '担当者 ' || emp_name || ' の誕生日は ' || char(birthday) || ' です。' AS 誕生日 FROM employee結果表
誕生日 ------------------------------------------------------------ 担当者 羽生 章洋 の誕生日は 1978-10-10 です。 担当者 釜本 喜美子 の誕生日は 1975-05-20 です。 担当者 安部 弘江 の誕生日は 1974-06-01 です。 担当者 松村 秀和 の誕生日は 1970-09-13 です。 担当者 萩原 恵理子 の誕生日は 1985-03-16 です。 担当者 岡田 奈緒子 の誕生日は 1983-12-24 です。 担当者 井上 尚志 の誕生日は 1971-10-17 です。 担当者 西口 麻衣子 の誕生日は 1986-12-14 です。 担当者 滝本 順三 の誕生日は 1978-04-02 です。 担当者 工藤 新一 の誕生日は 1990-02-10 です。 担当者 毛利光太郎 の誕生日は 1970-12-31 です。 11 レコードが選択されました。
形式1 case when 条件式1 then 値1 when 条件式2 then 値2 : else 値n end 形式2 case 列名 when 値11 then 値12 when 値12 then 値21 : else 値n end
select emp_name, sex FROM employee結果表
EMP_NAME SEX -------------------- ----------- 羽生 章洋 1 釜本 喜美子 2 安部 弘江 2 松村 秀和 1 萩原 恵理子 2 岡田 奈緒子 2 井上 尚志 1 西口 麻衣子 2 滝本 順三 1 工藤 新一 1 毛利光太郎 1 11 レコードが選択されました。
select emp_name, case when sex = 1 then '男' else '女' end FROM employee結果表
EMP_NAME 2 -------------------- -- 羽生 章洋 男 釜本 喜美子 女 安部 弘江 女 松村 秀和 男 萩原 恵理子 女 岡田 奈緒子 女 井上 尚志 男 西口 麻衣子 女 滝本 順三 男 工藤 新一 男 毛利光太郎 男 11 レコードが選択されました。
select emp_name, case when sex = 1 then '男' else '女' end AS 性別 FROM employee結果表
EMP_NAME 性別 -------------------- ---- 羽生 章洋 男 釜本 喜美子 女 安部 弘江 女 松村 秀和 男 萩原 恵理子 女 岡田 奈緒子 女 井上 尚志 男 西口 麻衣子 女 滝本 順三 男 工藤 新一 男 毛利光太郎 男 11 レコードが選択されました。
select emp_name, sal FROM employee WHERE sal >= 2000結果表
EMP_NAME SAL -------------------- ----------- 松村 秀和 2975.00 岡田 奈緒子 2850.00 井上 尚志 2450.00 西口 麻衣子 3000.00 滝本 順三 5000.00 毛利光太郎 8000.00 6 レコードが選択されました。
select emp_name, sal FROM employee WHERE sex = 2結果表
EMP_NAME SAL -------------------- ----------- 釜本 喜美子 1600.00 安部 弘江 1250.00 萩原 恵理子 1250.00 岡田 奈緒子 2850.00 西口 麻衣子 3000.00 5 レコードが選択されました。
select emp_name, sal FROM employee WHERE emp_name = '安部 弘江'結果表
EMP_NAME SAL -------------------- ----------- 安部 弘江 1250.00 1 レコードが選択されました。
select emp_name, sal, birthday FROM employee WHERE birthday >= '1980-01-01'結果表
EMP_NAME SAL BIRTHDAY -------------------- ----------- ---------- 萩原 恵理子 1250.00 1985-03-16 岡田 奈緒子 2850.00 1983-12-24 西口 麻衣子 3000.00 1986-12-14 工藤 新一 1500.00 1990-02-10 4 レコードが選択されました。
select emp_name, sal, birthday FROM employee WHERE emp_id = 20結果表
EMP_NAME SAL BIRTHDAY -------------------- ----------- ---------- 0 レコードが選択されました。
select emp_name, sal FROM employee WHERE sal >= 2000 AND sal <= 3000結果表
EMP_NAME SAL -------------------- ----------- 松村 秀和 2975.00 岡田 奈緒子 2850.00 井上 尚志 2450.00 西口 麻衣子 3000.00 4 レコードが選択されました。
select emp_name, sal FROM employee WHERE sal >= 2000 AND sex = 2結果表
EMP_NAME SAL -------------------- ----------- 岡田 奈緒子 2850.00 西口 麻衣子 3000.00 2 レコードが選択されました。
select emp_name, sal FROM employee WHERE emp_id = 2 or emp_id = 4 or emp_id = 7結果表
EMP_NAME SAL -------------------- ----------- 釜本 喜美子 1600.00 松村 秀和 2975.00 井上 尚志 2450.00 3 レコードが選択されました。
select emp_name, sal FROM employee WHERE sal >= 2000 or sex = 2結果表
EMP_NAME SAL -------------------- ----------- 釜本 喜美子 1600.00 安部 弘江 1250.00 松村 秀和 2975.00 萩原 恵理子 1250.00 岡田 奈緒子 2850.00 井上 尚志 2450.00 西口 麻衣子 3000.00 滝本 順三 5000.00 毛利光太郎 8000.00 9 レコードが選択されました。
select emp_name, sal FROM employee WHERE sal >= 2000 AND sal <= 3000 or sex = 2結果表
EMP_NAME SAL -------------------- ----------- 釜本 喜美子 1600.00 安部 弘江 1250.00 松村 秀和 2975.00 萩原 恵理子 1250.00 岡田 奈緒子 2850.00 井上 尚志 2450.00 西口 麻衣子 3000.00 7 レコードが選択されました。
select emp_name, sal FROM employee WHERE not (sal >= 2000 AND sal <= 3000 or sex = 2)結果表
EMP_NAME SAL -------------------- ----------- 羽生 章洋 800.00 滝本 順三 5000.00 工藤 新一 1500.00 毛利光太郎 8000.00 4 レコードが選択されました。
x BETWEEN a AND b | x >= a AND x <= b |
x NOT BETWEEN a AND b | x < a OR x > b |
select emp_name, sal FROM employee WHERE sal BETWEEN 2000 AND 3000結果表
EMP_NAME SAL -------------------- ----------- 松村 秀和 2975.00 岡田 奈緒子 2850.00 井上 尚志 2450.00 西口 麻衣子 3000.00 4 レコードが選択されました。
x IN (a, b) | x = a OR x = b |
x NOT IN (a, b) | x != a AND x != b |
select emp_name, sal FROM employee WHERE emp_id IN (2, 4, 7)結果表
EMP_NAME SAL -------------------- ----------- 釜本 喜美子 1600.00 松村 秀和 2975.00 井上 尚志 2450.00 3 レコードが選択されました。
文字列式 [NOT] LIKE パターン 文字列式 [NOT] LIKE パターン ESCAPE エスケープ文字
select * FROM customer WHERE address like '%大阪市%'結果表
CUST_ID CUST_NAME ADDRESS TEL FAX ----------- -------------------- ---------------------------------------- -------------------- -------------------- 3 北島 浩二 大阪府大阪市北区 06-1234-XXXX 06-1234-XXXX 17 高沢 千夏 大阪府大阪市大淀区 06-6777-XXXX 06-6777-XXXX 2 レコードが選択されました。
select * FROM customer WHERE address not like '東京都%'結果表
CUST_ID CUST_NAME ADDRESS TEL FAX ----------- -------------------- ---------------------------------------- -------------------- -------------------- 1 阪上 徹 和歌山県和歌山市 073-123-XXXX 073-123-XXXX 3 北島 浩二 大阪府大阪市北区 06-1234-XXXX 06-1234-XXXX 5 関根 修一 大阪府泉佐野市 0724-99-XXXX 0724-99-XXXX 11 加藤 昭夫 神奈川県川崎市 044-505-XXXX 044-505-XXXX 12 石橋 健太郎 札幌市中央区 011-555-XXXX - 16 安井 和義 愛知県東海市 0560-448-XXXX 0560-448-XXXX 17 高沢 千夏 大阪府大阪市大淀区 06-6777-XXXX 06-6777-XXXX 19 吉田 正也 神奈川県川崎市 044-888-XXXX 044-888-XXXX 8 レコードが選択されました。
select * FROM customer WHERE cust_name like '_田%' -- "_" は、日本語の下線です結果表
CUST_ID CUST_NAME ADDRESS TEL FAX ----------- -------------------- ---------------------------------------- -------------------- -------------------- 6 木田 直美 東京都中央区 03-3333-XXXX - 13 米田 恵美子 東京都港区虎ノ門 03-3987-XXXX 03-3987-XXXX 14 松田 純一 東京都千代田区大手町 03-3975-XXXX 03-3975-XXXX 18 島田 良子 東京都渋谷区 03-3698-XXXX - 19 吉田 正也 神奈川県川崎市 044-888-XXXX 044-888-XXXX 20 藤田 幹夫 東京都中央区 03-3578-XXXX - 6 レコードが選択されました。□参考
select * FROM customer WHERE cust_name like '_田%' -- "_" は、半角の下線です結果表
CUST_ID CUST_NAME ADDRESS TEL FAX ----------- -------------------- ---------------------------------------- -------------------- -------------------- 0 レコードが選択されました。
IS NULL IS NOT NULL
select * FROM customer WHERE fax IS NOT NULL結果表
CUST_ID CUST_NAME ADDRESS TEL FAX ----------- -------------------- ---------------------------------------- -------------------- -------------------- 1 阪上 徹 和歌山県和歌山市 073-123-XXXX 073-123-XXXX 2 松坂 宏 東京都千代田区 03-3158-XXXX 03-3258-XXXX 3 北島 浩二 大阪府大阪市北区 06-1234-XXXX 06-1234-XXXX 4 永井 光夫 東京都渋谷区 03-3124-XXXX 03-0124-XXXX 5 関根 修一 大阪府泉佐野市 0724-99-XXXX 0724-99-XXXX 7 片桐 昇 東京都新宿区 03-1111-XXXX 03-1111-XXXX 8 田中 正敏 東京都品川区 03-2222-XXXX 03-2222-XXXX 9 西口 和夫 東京都目黒区下目黒 03-3333-XXXX 03-3333-XXXX 10 山口 克巳 東京都大田区 03-4444-XXXX 03-4444-XXXX 11 加藤 昭夫 神奈川県川崎市 044-505-XXXX 044-505-XXXX 13 米田 恵美子 東京都港区虎ノ門 03-3987-XXXX 03-3987-XXXX 14 松田 純一 東京都千代田区大手町 03-3975-XXXX 03-3975-XXXX 15 松下 晴彦 東京都板橋区 03-3123-XXXX 03-3123-XXXX 16 安井 和義 愛知県東海市 0560-448-XXXX 0560-448-XXXX 17 高沢 千夏 大阪府大阪市大淀区 06-6777-XXXX 06-6777-XXXX 19 吉田 正也 神奈川県川崎市 044-888-XXXX 044-888-XXXX 16 レコードが選択されました。
COALESCE(式, 値)
select prod_name, cost * discount FROM product結果表
PROD_NAME 2 -------------------- -------------------- テレビ 17500.0000 ビデオ 9600.0000 MDプレーヤー 18800.0000 ステレオ 39200.0000 デジタルカメラ 14880.0000 プリンタ 18800.0000 電気シェーバー - ホイールマウス - アイロン 8000.0000 リモコン - 10 レコードが選択されました。
select prod_name, cost * coalesce(discount, 1) FROM product結果表
PROD_NAME 2 -------------------- ------------------------ テレビ 17500.0000 ビデオ 9600.0000 MDプレーヤー 18800.0000 ステレオ 39200.0000 デジタルカメラ 14880.0000 プリンタ 18800.0000 電気シェーバー 13800.0000 ホイールマウス 8500.0000 アイロン 8000.0000 リモコン 5800.0000 10 レコードが選択されました。
SELECT DISTINCT ...
select DISTINCT dept_id FROM employee結果表
DEPT_ID ----------- 10 20 30 40 90 5 レコードが選択されました。
ORDER BY 式 [ ASC | DESC ] [, ...]
select * FROM employee ORDER BY birthday結果表
EMP_ID DEPT_ID EMP_NAME BIRTHDAY HIREDATE SEX SAL ----------- ----------- -------------------- ---------- ---------- ----------- ----------- 4 20 松村 秀和 1970-09-13 1991-04-02 1 2975.00 11 90 毛利光太郎 1970-12-31 1990-04-01 1 8000.00 7 30 井上 尚志 1971-10-17 2000-11-15 1 2450.00 3 20 安部 弘江 1974-06-01 1991-02-22 2 1250.00 2 10 釜本 喜美子 1975-05-20 1991-02-20 2 1600.00 9 40 滝本 順三 1978-04-02 2004-12-18 1 5000.00 1 10 羽生 章洋 1978-10-10 1990-12-17 1 800.00 6 30 岡田 奈緒子 1983-12-24 2007-05-01 2 2850.00 5 30 萩原 恵理子 1985-03-16 2008-09-28 2 1250.00 8 40 西口 麻衣子 1986-12-14 2008-12-03 2 3000.00 10 40 工藤 新一 1990-02-10 1999-04-01 1 1500.00 11 レコードが選択されました。
select * FROM employee ORDER BY sal DESC結果表
EMP_ID DEPT_ID EMP_NAME BIRTHDAY HIREDATE SEX SAL ----------- ----------- -------------------- ---------- ---------- ----------- ----------- 11 90 毛利光太郎 1970-12-31 1990-04-01 1 8000.00 9 40 滝本 順三 1978-04-02 2004-12-18 1 5000.00 8 40 西口 麻衣子 1986-12-14 2008-12-03 2 3000.00 4 20 松村 秀和 1970-09-13 1991-04-02 1 2975.00 6 30 岡田 奈緒子 1983-12-24 2007-05-01 2 2850.00 7 30 井上 尚志 1971-10-17 2000-11-15 1 2450.00 2 10 釜本 喜美子 1975-05-20 1991-02-20 2 1600.00 10 40 工藤 新一 1990-02-10 1999-04-01 1 1500.00 3 20 安部 弘江 1974-06-01 1991-02-22 2 1250.00 5 30 萩原 恵理子 1985-03-16 2008-09-28 2 1250.00 1 10 羽生 章洋 1978-10-10 1990-12-17 1 800.00 11 レコードが選択されました。
select * FROM employee ORDER BY sex, sal DESC結果表
EMP_ID DEPT_ID EMP_NAME BIRTHDAY HIREDATE SEX SAL ----------- ----------- -------------------- ---------- ---------- ----------- ----------- 11 90 毛利光太郎 1970-12-31 1990-04-01 1 8000.00 9 40 滝本 順三 1978-04-02 2004-12-18 1 5000.00 4 20 松村 秀和 1970-09-13 1991-04-02 1 2975.00 7 30 井上 尚志 1971-10-17 2000-11-15 1 2450.00 10 40 工藤 新一 1990-02-10 1999-04-01 1 1500.00 1 10 羽生 章洋 1978-10-10 1990-12-17 1 800.00 8 40 西口 麻衣子 1986-12-14 2008-12-03 2 3000.00 6 30 岡田 奈緒子 1983-12-24 2007-05-01 2 2850.00 2 10 釜本 喜美子 1975-05-20 1991-02-20 2 1600.00 3 20 安部 弘江 1974-06-01 1991-02-22 2 1250.00 5 30 萩原 恵理子 1985-03-16 2008-09-28 2 1250.00 11 レコードが選択されました。
select prod_name, cost * discount FROM product ORDER BY 2 DESC結果表
PROD_NAME 2 -------------------- -------------------- 電気シェーバー - ホイールマウス - リモコン - ステレオ 39200.0000 MDプレーヤー 18800.0000 プリンタ 18800.0000 テレビ 17500.0000 デジタルカメラ 14880.0000 ビデオ 9600.0000 アイロン 8000.0000 10 レコードが選択されました。
select prod_name, cost * coalesce(discount, 1) AS sprice FROM product ORDER BY sprice DESC結果表
PROD_NAME SPRICE -------------------- ------------------------ ステレオ 39200.0000 MDプレーヤー 18800.0000 プリンタ 18800.0000 テレビ 17500.0000 デジタルカメラ 14880.0000 電気シェーバー 13800.0000 ビデオ 9600.0000 ホイールマウス 8500.0000 アイロン 8000.0000 リモコン 5800.0000 10 レコードが選択されました。
□サンプル表
c ------ 10 20 NULL 30 NULL 20□実行結果
select count(c), sum(c), avg(c), min(c), max(c) FROM groupfunction 1 2 3 4 5 ----------- ----------- ----------- ----------- ----------- 4 80 20 10 30 1 レコードが選択されました。 select count(DISTINCT c), sum(DISTINCT c), avg(DISTINCT c), min(DISTINCT c), max(DISTINCT c) FROM groupfunction 1 2 3 4 5 ----------- ----------- ----------- ----------- ----------- 3 60 20 10 30 1 レコードが選択されました。 select count(*), count(c), count(DISTINCT c) FROM groupfunction 1 2 3 ----------- ----------- ----------- 6 4 3 1 レコードが選択されました。
select sum(sal), avg(sal), min(sal), max(sal) FROM employee結果表
1 2 3 4 --------------------------------- --------------------------------- ----------- ----------- 30675.00 2788.636363636363636363636363 800.00 8000.00 1 レコードが選択されました。
select count(*), sum(sal), avg(sal), min(sal), max(sal) FROM employee WHERE dept_id = 30結果表
1 2 3 4 5 ----------- --------------------------------- --------------------------------- ----------- ----------- 3 6550.00 2183.333333333333333333333333 1250.00 2850.00 1 レコードが選択されました。
select count(DISTINCT dept_id) FROM employee結果表
1 ----------- 5 1 レコードが選択されました。
GROUP BY 列名
HAVING 条件式
select dept_id, sum(sal), avg(sal), min(sal), max(sal) FROM employee GROUP BY dept_id結果表
DEPT_ID 2 3 4 5 ----------- --------------------------------- --------------------------------- ----------- ----------- 10 2400.00 1200.000000000000000000000000 800.00 1600.00 20 4225.00 2112.500000000000000000000000 1250.00 2975.00 30 6550.00 2183.333333333333333333333333 1250.00 2850.00 40 9500.00 3166.666666666666666666666666 1500.00 5000.00 90 8000.00 8000.000000000000000000000000 8000.00 8000.00 5 レコードが選択されました。
select sex, count(*) FROM employee GROUP BY sex結果表
SEX 2 ----------- ----------- 1 6 2 5 2 レコードが選択されました。
select dept_id, sex, count(*), avg(sal) FROM employee GROUP BY dept_id, sex結果表
DEPT_ID SEX 3 4 ----------- ----------- ----------- --------------------------------- 10 1 1 800.000000000000000000000000 10 2 1 1600.000000000000000000000000 20 1 1 2975.000000000000000000000000 20 2 1 1250.000000000000000000000000 30 1 1 2450.000000000000000000000000 30 2 2 2050.000000000000000000000000 40 1 2 3250.000000000000000000000000 40 2 1 3000.000000000000000000000000 90 1 1 8000.000000000000000000000000 9 レコードが選択されました。
select dept_id, sum(sal), avg(sal), min(sal), max(sal) FROM employee GROUP BY dept_id having sum(sal) <= 5000結果表
DEPT_ID 2 3 4 5 ----------- --------------------------------- --------------------------------- ----------- ----------- 10 2400.00 1200.000000000000000000000000 800.00 1600.00 20 4225.00 2112.500000000000000000000000 1250.00 2975.00 2 レコードが選択されました。
select dept_id, sum(sal), avg(sal), min(sal), max(sal) FROM employee WHERE sex = 1 GROUP BY dept_id having sum(sal) <= 5000結果表
DEPT_ID 2 3 4 5 ----------- --------------------------------- --------------------------------- ----------- ----------- 10 800.00 800.000000000000000000000000 800.00 800.00 20 2975.00 2975.000000000000000000000000 2975.00 2975.00 30 2450.00 2450.000000000000000000000000 2450.00 2450.00 3 レコードが選択されました。
表名 JOIN 表名 ON 結合条件
表名.列名 相関名.列名
select e.emp_id, emp_name, d.dept_id, dept_name FROM employee e JOIN department d ON e.dept_id = d.dept_id結果表
EMP_ID EMP_NAME DEPT_ID DEPT_NAME ----------- -------------------- ----------- -------------------- 1 羽生 章洋 10 営業部 2 釜本 喜美子 10 営業部 3 安部 弘江 20 開発部 4 松村 秀和 20 開発部 5 萩原 恵理子 30 企画部 6 岡田 奈緒子 30 企画部 7 井上 尚志 30 企画部 8 西口 麻衣子 40 管理部 9 滝本 順三 40 管理部 10 工藤 新一 40 管理部 10 レコードが選択されました。
select d.dept_id, dept_name, e.emp_id, emp_name FROM department d JOIN employee e ON d.mgr_id = e.emp_id結果表
DEPT_ID DEPT_NAME EMP_ID EMP_NAME ----------- -------------------- ----------- -------------------- 10 営業部 1 羽生 章洋 20 開発部 3 安部 弘江 30 企画部 5 萩原 恵理子 40 管理部 8 西口 麻衣子 4 レコードが選択されました。
select d.dept_id, d.dept_name, d.adept_id, d2.dept_name FROM department d JOIN department d2 ON d.adept_id = d2.dept_id結果表
DEPT_ID DEPT_NAME ADEPT_ID DEPT_NAME ----------- -------------------- ----------- -------------------- 10 営業部 30 企画部 20 開発部 30 企画部 30 企画部 40 管理部 40 管理部 40 管理部 50 製造部 50 製造部 5 レコードが選択されました。
select e.emp_id, e.emp_name, d.dept_id, dept_name, mgr_id, e2.emp_name FROM employee e JOIN department d ON e.dept_id = d.dept_id JOIN employee e2 ON mgr_id = e2.emp_id結果表
EMP_ID EMP_NAME DEPT_ID DEPT_NAME MGR_ID EMP_NAME ----------- -------------------- ----------- -------------------- ----------- -------------------- 1 羽生 章洋 10 営業部 1 羽生 章洋 2 釜本 喜美子 10 営業部 1 羽生 章洋 3 安部 弘江 20 開発部 3 安部 弘江 4 松村 秀和 20 開発部 3 安部 弘江 5 萩原 恵理子 30 企画部 5 萩原 恵理子 7 井上 尚志 30 企画部 5 萩原 恵理子 6 岡田 奈緒子 30 企画部 5 萩原 恵理子 8 西口 麻衣子 40 管理部 8 西口 麻衣子 10 工藤 新一 40 管理部 8 西口 麻衣子 9 滝本 順三 40 管理部 8 西口 麻衣子 10 レコードが選択されました。
... FROM 表A JOIN 表B ON A.fk = B.pk WHERE 選択条件 ...□SQL92 の書式
... FROM 表A, 表B WHERE A.fk = B.pk AND 選択条件 ...
select e.emp_id, emp_name, d.dept_id, dept_name FROM employee e, department d WHERE e.dept_id = d.dept_id結果表
EMP_ID EMP_NAME DEPT_ID DEPT_NAME ----------- -------------------- ----------- -------------------- 1 羽生 章洋 10 営業部 2 釜本 喜美子 10 営業部 3 安部 弘江 20 開発部 4 松村 秀和 20 開発部 5 萩原 恵理子 30 企画部 6 岡田 奈緒子 30 企画部 7 井上 尚志 30 企画部 8 西口 麻衣子 40 管理部 9 滝本 順三 40 管理部 10 工藤 新一 40 管理部 10 レコードが選択されました。
select d.dept_id, dept_name, e.emp_id, emp_name FROM department d, employee e WHERE d.mgr_id = e.emp_id結果表
DEPT_ID DEPT_NAME EMP_ID EMP_NAME ----------- -------------------- ----------- -------------------- 10 営業部 1 羽生 章洋 20 開発部 3 安部 弘江 30 企画部 5 萩原 恵理子 40 管理部 8 西口 麻衣子 4 レコードが選択されました。
select d.dept_id, d.dept_name, d.adept_id, d2.dept_name FROM department d, department d2 WHERE d.adept_id = d2.dept_id結果表
DEPT_ID DEPT_NAME ADEPT_ID DEPT_NAME ----------- -------------------- ----------- -------------------- 10 営業部 30 企画部 20 開発部 30 企画部 30 企画部 40 管理部 40 管理部 40 管理部 50 製造部 50 製造部 5 レコードが選択されました。
表名 join_type 表名 ON 結合条件 join_type: LEFT JOIN, RIGHT JOIN, FULL JOIN
□ A 表 a ----- 1 2 3 |
□ B 表 b ----- 1 3 4 |
□ A JOIN B ON a = b a b ---------- 1 1 3 3 |
□ A LEFT JOIN B ON a = b a b ---------- 1 1 2 NULL 3 3 |
□ A RIGHT JOIN B ON a = b a b ---------- 1 1 3 3 NULL 4 |
□ A FULL JOIN B ON a = b a b ---------- 1 1 2 NULL 3 3 NULL 4 |
select e.emp_id, emp_name, d.dept_id, dept_name FROM employee e left JOIN department d ON e.dept_id = d.dept_id結果表
EMP_ID EMP_NAME DEPT_ID DEPT_NAME ----------- -------------------- ----------- -------------------- 1 羽生 章洋 10 営業部 2 釜本 喜美子 10 営業部 3 安部 弘江 20 開発部 4 松村 秀和 20 開発部 5 萩原 恵理子 30 企画部 6 岡田 奈緒子 30 企画部 7 井上 尚志 30 企画部 8 西口 麻衣子 40 管理部 9 滝本 順三 40 管理部 10 工藤 新一 40 管理部 11 毛利光太郎 - - 11 レコードが選択されました。
select e.emp_id, emp_name, d.dept_id, dept_name FROM employee e right JOIN department d ON e.dept_id = d.dept_id結果表
EMP_ID EMP_NAME DEPT_ID DEPT_NAME ----------- -------------------- ----------- -------------------- 1 羽生 章洋 10 営業部 2 釜本 喜美子 10 営業部 3 安部 弘江 20 開発部 4 松村 秀和 20 開発部 5 萩原 恵理子 30 企画部 6 岡田 奈緒子 30 企画部 7 井上 尚志 30 企画部 8 西口 麻衣子 40 管理部 9 滝本 順三 40 管理部 10 工藤 新一 40 管理部 - - 50 製造部 11 レコードが選択されました。
select e.emp_id, emp_name, d.dept_id, dept_name FROM employee e full JOIN department d ON e.dept_id = d.dept_id結果表
EMP_ID EMP_NAME DEPT_ID DEPT_NAME ----------- -------------------- ----------- -------------------- 1 羽生 章洋 10 営業部 2 釜本 喜美子 10 営業部 3 安部 弘江 20 開発部 4 松村 秀和 20 開発部 5 萩原 恵理子 30 企画部 6 岡田 奈緒子 30 企画部 7 井上 尚志 30 企画部 8 西口 麻衣子 40 管理部 9 滝本 順三 40 管理部 10 工藤 新一 40 管理部 - - 50 製造部 11 毛利光太郎 - - 12 レコードが選択されました。
select e.emp_id, e.emp_name, d.dept_id, dept_name, mgr_id, e2.emp_name FROM employee e left JOIN department d ON e.dept_id = d.dept_id left JOIN employee e2 ON mgr_id = e2.emp_id結果表
EMP_ID EMP_NAME DEPT_ID DEPT_NAME MGR_ID EMP_NAME ----------- -------------------- ----------- -------------------- ----------- -------------------- 1 羽生 章洋 10 営業部 1 羽生 章洋 2 釜本 喜美子 10 営業部 1 羽生 章洋 3 安部 弘江 20 開発部 3 安部 弘江 4 松村 秀和 20 開発部 3 安部 弘江 5 萩原 恵理子 30 企画部 5 萩原 恵理子 6 岡田 奈緒子 30 企画部 5 萩原 恵理子 7 井上 尚志 30 企画部 5 萩原 恵理子 8 西口 麻衣子 40 管理部 8 西口 麻衣子 9 滝本 順三 40 管理部 8 西口 麻衣子 10 工藤 新一 40 管理部 8 西口 麻衣子 11 毛利光太郎 - - - - 11 レコードが選択されました。
select DISTINCT e.emp_id, e.emp_name, p.prod_id, p.prod_name,c.cust_id, c.cust_name FROM employee e JOIN packedsales ps ON e.emp_id = ps.emp_id JOIN customer c ON ps.cust_id = c.cust_id JOIN sales s ON ps.psales_no = s.psales_no JOIN product p ON s.prod_id = p.prod_id結果表
EMP_ID EMP_NAME PROD_ID PROD_NAME CUST_ID CUST_NAME ----------- -------------------- ----------- -------------------- ----------- -------------------- 1 羽生 章洋 101 テレビ 1 阪上 徹 1 羽生 章洋 103 MDプレーヤー 1 阪上 徹 1 羽生 章洋 102 ビデオ 2 松坂 宏 2 釜本 喜美子 103 MDプレーヤー 3 北島 浩二 2 釜本 喜美子 105 デジタルカメラ 3 北島 浩二 2 釜本 喜美子 106 プリンタ 3 北島 浩二 2 釜本 喜美子 104 ステレオ 4 永井 光夫 3 安部 弘江 105 デジタルカメラ 5 関根 修一 3 安部 弘江 106 プリンタ 6 木田 直美 4 松村 秀和 102 ビデオ 7 片桐 昇 4 松村 秀和 106 プリンタ 7 片桐 昇 4 松村 秀和 108 ホイールマウス 8 田中 正敏 5 萩原 恵理子 106 プリンタ 9 西口 和夫 5 萩原 恵理子 109 アイロン 9 西口 和夫 5 萩原 恵理子 110 リモコン 10 山口 克巳 15 レコードが選択されました。
□ A 表 a ----- 1 2 3 |
□ B 表 b ----- 1 3 4 |
□ select * FROM A union select * FROM B a --- 1 2 3 4 |
□ select * FROM A union all select * FROM B a --- 1 2 3 1 3 4 |
select 'customer ' table, count(*) count FROM customer union select 'employee ' table, count(*) count FROM employee union select 'department' table, count(*) count FROM department union select 'product ' table, count(*) count FROM product union select 'packedsales' table, count(*) count FROM packedsales union select 'sales ' table, count(*) count FROM sales結果表
TABLE COUNT ----------- ----------- department 5 product 10 employee 11 customer 20 packedsales 83 sales 125 6 レコードが選択されました。
□ A 表 a ----- 1 2 3 |
□ B 表 b ----- 1 3 4 |
□ select * FROM A except select * FROM B a --- 2 |
□ select * FROM A intersect select * FROM B a --- 1 3 |
select * FROM department WHERE adept_id <> 40
select * FROM department except select * FROM department WHERE adept_id = 40結果表
DEPT_ID DEPT_NAME LOC MGR_ID ADEPT_ID ----------- -------------------- -------------------- ----------- ----------- 10 営業部 東京都千代田区 1 30 20 開発部 東京都港区 3 30 50 製造部 東京都大田区 - 50 3 レコードが選択されました。
=> select avg(sal) FROM employee ; 1 --------------------------------- 2788.636363636363636363636363 1 レコードが選択されました。
select emp_id, emp_name, sal FROM employee WHERE sal > (select avg(sal) FROM employee)結果表
EMP_ID EMP_NAME SAL ----------- -------------------- ----------- 4 松村 秀和 2975.00 6 岡田 奈緒子 2850.00 8 西口 麻衣子 3000.00 9 滝本 順三 5000.00 11 毛利光太郎 8000.00 5 レコードが選択されました。
select emp_id, emp_name, sal FROM employee WHERE sal = (select max(sal) FROM employee)結果表
EMP_ID EMP_NAME SAL ----------- -------------------- ----------- 11 毛利光太郎 8000.00 1 レコードが選択されました。
select psales_no, e.emp_id, emp_name, total FROM packedsales ps JOIN employee e ON ps.emp_id = e.emp_id WHERE total = (select max(total) FROM packedsales)結果表
PSALES_NO EMP_ID EMP_NAME TOTAL ----------- ----------- -------------------- ----------- 1004 2 釜本 喜美子 180000.00 1 レコードが選択されました。
... WHERE x IN (subselect) ... | x = a OR x = b OR x = c |
... WHERE x > ANY (subselect) ... | x > a OR x > b OR x > c |
... WHERE x > ALL (subselect) ... | x > a AND x > b AND x > c |
=> select avg(sal) FROM employee GROUP BY dept_id ; 1 --------------------------------- 1200.000000000000000000000000 2112.500000000000000000000000 2183.333333333333333333333333 3166.666666666666666666666666 8000.000000000000000000000000 5 レコードが選択されました。
select emp_id, emp_name, sal FROM employee WHERE sal >= all (select avg(sal) FROM employee GROUP BY dept_id)結果表
EMP_ID EMP_NAME SAL ----------- -------------------- ----------- 11 毛利光太郎 8000.00 1 レコードが選択されました。
select emp_id, emp_name, sal FROM employee WHERE sal >= any (select avg(sal) FROM employee GROUP BY dept_id)結果表
EMP_ID EMP_NAME SAL ----------- -------------------- ----------- 2 釜本 喜美子 1600.00 3 安部 弘江 1250.00 4 松村 秀和 2975.00 5 萩原 恵理子 1250.00 6 岡田 奈緒子 2850.00 7 井上 尚志 2450.00 8 西口 麻衣子 3000.00 9 滝本 順三 5000.00 10 工藤 新一 1500.00 11 毛利光太郎 8000.00 10 レコードが選択されました。
select psales_no, emp_id, cust_id, total FROM packedsales WHERE total > all (select avg(total) FROM packedsales GROUP BY cust_id) ORDER BY total DESC結果表
PSALES_NO EMP_ID CUST_ID TOTAL ----------- ----------- ----------- ----------- 1004 2 4 180000.00 4 2 4 120000.00 224 2 4 120000.00 541 1 1 120000.00 433 2 3 115000.00 1001 1 1 90000.00 771 1 1 90000.00 7 レコードが選択されました。
select emp_id, emp_name, dept_id FROM employee WHERE dept_id not IN (select dept_id FROM department)結果表
EMP_ID EMP_NAME DEPT_ID ----------- -------------------- ----------- 11 毛利光太郎 90 1 レコードが選択されました。
select emp_id, emp_name, dept_id FROM employee e WHERE not exists (select * FROM department WHERE dept_id = e.dept_id)結果表
EMP_ID EMP_NAME DEPT_ID ----------- -------------------- ----------- 11 毛利光太郎 90 1 レコードが選択されました。
select emp_id, emp_name, dept_id FROM employee e WHERE not exists (select * FROM packedsales WHERE emp_id = e.emp_id)結果表
EMP_ID EMP_NAME DEPT_ID ----------- -------------------- ----------- 6 岡田 奈緒子 30 7 井上 尚志 30 8 西口 麻衣子 40 9 滝本 順三 40 10 工藤 新一 40 11 毛利光太郎 90 6 レコードが選択されました。
SELECT文節 ... 何を出力するのか FROM文節 ... どの表から出力するのか WHERE文節 ... 選択条件 ORDER BY文節 ... 結果のソート
.-ALL------. >>-SELECT----+----------+---------------------------------------> '-DISTINCT-' >-----+-*--------------------------------------------------+--->< | .-,---------------------------------------------. | | V | | '----+-expression--+--------------------------+-+--+-' | | .-AS-. | | | '-+----+--new-column-name--' | '-exposed-name.*---------------------------'
.-,-------------------------------. V | >>-FROM-----+--+--+-table-name-+------+----+------------------->< | | '-view-name--' | '-joined-table------------' joined-table .-INNER-----. >>-+-table-reference--+-----------+---JOIN--table-reference--ON--join-condition--+-> | '-| outer |-' | '-(--joined-table--)----------------------------------------------------------' >-------------------------------------------------------------->< outer .-OUTER-. |----+-LEFT--+---+-------+--------------------------------------| +-RIGHT-+ '-FULL--'
>>-WHERE--search-condition-------------------------------------><
|--+------+---+-predicate--+----------------------------------+-> '-NOT--' '-(search-condition)----------------------------' .--------------------------------------------------------. V | >--------+--------------------------------------------------+--+>< '--+-AND-+---+------+---+-predicate--+----------+--' '-OR--' '-NOT--' '-(search-condition)----' predicate >>-----+- simple predicate ----+------------------------------->< +- between predicate ---+ +- in predicate --------+ +- like predicate ------+ '- null predicate-------' simple predicate >>-expression----+- = --------+-----expression----------------->< +- <> -------+ (**) +- < --------+ +- > --------+ +- <= -------+ (**) '- >= -------' (**) between predicate >>-expression----+------+---------------------------------------> '-NOT--' >----BETWEEN--expression--AND--expression---------------------->< in predicate >>-+-expression1--+------+--IN----+-(fullselect1)----------------+-+-> | '-NOT--' | .-,----------------. | | | | V | | | | +-(------expression2----+---)--+ | | '-expression2------------------' | | .-,----------------. | | V | | '-(------expression3----+---)----+------+--IN----(fullselect2)--' '-NOT--' >-------------------------------------------------------------->< like predicate >>-match-expression----+-----+--LIKE--pattern-expression--------> '-NOT-' >-----+----------------------------+--------------------------->< '-ESCAPE--escape-expression--' null predicate >>-expression--IS----+------+--NULL---------------------------->< '-NOT--'
.-,--------------------. V .-ASC--. | >>-ORDER BY-------sort-key--+------+--+------------------------>< '-DESC-' sort-key |---+-simple-column-name--+-------------------------------------| +-simple-integer------+ '-sort-key-expression-'(*)構文は簡単のため、単純化してます。