落書きノート

ふと自分が気になった事を書いてます

SQLで問題を解く

SQL> select *
  2  from dept natural join emp;

    DEPTNO DNAME      LOC            EMPNO ENAME      JOB          MGR HIREDATE    SAL       COMM
---------- -------------- ------------- ---------- ---------- --------- ---------- -------- ---------- ----------
    10 ACCOUNTING    NEW YORK        7782 CLARK      MANAGER        7839 81-06-09     2450
    10 ACCOUNTING    NEW YORK        7839 KING       PRESIDENT       81-11-17      5000
    10 ACCOUNTING    NEW YORK        7934 MILLER     CLERK          7782 82-01-23     1300
    20 RESEARCH      DALLAS          7566 JONES      MANAGER        7839 81-04-02     2975
    20 RESEARCH      DALLAS          7902 FORD       ANALYST        7566 81-12-03     3000
    20 RESEARCH      DALLAS          7876 ADAMS      CLERK          7788 87-05-23     1100
    20 RESEARCH      DALLAS          7369 SMITH      CLERK          7902 80-12-17      800
    20 RESEARCH      DALLAS          7788 SCOTT      ANALYST        7566 87-04-19     3000
    30 SALES     CHICAGO         7521 WARD       SALESMAN       7698 81-02-22     1250       500
    30 SALES     CHICAGO         7844 TURNER     SALESMAN       7698 81-09-08     1500     0
    30 SALES     CHICAGO         7499 ALLEN      SALESMAN       7698 81-02-20     1600       300
    30 SALES     CHICAGO         7900 JAMES      CLERK          7698 81-12-03      950
    30 SALES     CHICAGO         7698 BLAKE      MANAGER        7839 81-05-01     2850
    30 SALES     CHICAGO         7654 MARTIN     SALESMAN       7698 81-09-28     1250      1400

14行が選択されました。

SQL> select dname, count(empno) 人数
  2  from dept, emp
  3  where dept.deptno = emp.deptno
  4  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
RESEARCH        5
SALES           6

SQL> select dname, count(empno) 人数
  2  from dept natural join emp
  3  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
RESEARCH        5
SALES           6

SQL> select dname, count(empno) 人数
  2  from dept join emp using(deptno)
  3  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
RESEARCH        5
SALES           6

SQL> select dname, count(empno) 人数
  2  from dept join emp on (dept.deptno = emp.deptno)
  3  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
RESEARCH        5
SALES           6

SQL> select dname, count(empno) 人数
  2  from dept, emp
  3  where dept.deptno = emp.deptno(+)
  4  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
OPERATIONS      0
RESEARCH        5
SALES           6

SQL> select dname, count(empno) 人数
  2  from dept left outer join emp using(deptno)
  3  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
OPERATIONS      0
RESEARCH        5
SALES           6

SQL> select dname, count(empno) 人数
  2  from emp right outer join dept using(deptno) 
  3  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
OPERATIONS      0
RESEARCH        5
SALES           6

SQL> select dname, count(empno) 人数
  2  from dept full outer join emp using(deptno)
  3  group by dname;

DNAME                人数
-------------- ----------
ACCOUNTING      3
OPERATIONS      0
RESEARCH        5
SALES           6

SQL> select * from emp
  2  where comm is null;

     EMPNO ENAME      JOB          MGR HIREDATE    SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK          7902 80-12-17      800           20
      7566 JONES      MANAGER        7839 81-04-02     2975           20
      7698 BLAKE      MANAGER        7839 81-05-01     2850           30
      7782 CLARK      MANAGER        7839 81-06-09     2450           10
      7788 SCOTT      ANALYST        7566 87-04-19     3000           20
      7839 KING       PRESIDENT       81-11-17      5000           10
      7876 ADAMS      CLERK          7788 87-05-23     1100           20
      7900 JAMES      CLERK          7698 81-12-03      950           30
      7902 FORD       ANALYST        7566 81-12-03     3000           20
      7934 MILLER     CLERK          7782 82-01-23     1300           10

10行が選択されました。

SQL> select *
  2  from customer, slip
  3  where customer.cust_id = slip.cust_id;

   CUST_ID CUST_NAME        ADDRESS                     SLIP_ID    CUST_ID SLIP_DAT
---------- -------------------- ---------------------------------------- ---------- ---------- --------
         1 古千谷商店           東京都足立区古千谷本町                            7          1 95-07-03
         2 千代田商事           東京都千代田区大手町                              1          2 95-06-19
         2 千代田商事           東京都千代田区大手町                              4          2 95-06-26
         2 千代田商事           東京都千代田区大手町                              6          2 95-07-03
         3 竹の塚マート         東京都足立区竹の塚                                5          3 95-06-29
         4 竹里屋               埼玉県春日部市竹里                                3          4 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            2          5 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            8          5 95-07-07

8行が選択されました。

SQL> select * 
  2  from customer natural join slip;

   CUST_ID CUST_NAME        ADDRESS                     SLIP_ID SLIP_DAT
---------- -------------------- ---------------------------------------- ---------- --------
         1 古千谷商店           東京都足立区古千谷本町                            7 95-07-03
         2 千代田商事           東京都千代田区大手町                              1 95-06-19
         2 千代田商事           東京都千代田区大手町                              4 95-06-26
         2 千代田商事           東京都千代田区大手町                              6 95-07-03
         3 竹の塚マート         東京都足立区竹の塚                                5 95-06-29
         4 竹里屋               埼玉県春日部市竹里                                3 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            2 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            8 95-07-07

8行が選択されました。

SQL> select *
  2  from customer join slip using (cust_id);

   CUST_ID CUST_NAME        ADDRESS                     SLIP_ID SLIP_DAT
---------- -------------------- ---------------------------------------- ---------- --------
         1 古千谷商店           東京都足立区古千谷本町                            7 95-07-03
         2 千代田商事           東京都千代田区大手町                              1 95-06-19
         2 千代田商事           東京都千代田区大手町                              4 95-06-26
         2 千代田商事           東京都千代田区大手町                              6 95-07-03
         3 竹の塚マート         東京都足立区竹の塚                                5 95-06-29
         4 竹里屋               埼玉県春日部市竹里                                3 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            2 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            8 95-07-07

8行が選択されました。

SQL> select *
  2  from customer join slip
  3  on (customer.cust_id = slip.cust_id);

   CUST_ID CUST_NAME        ADDRESS                     SLIP_ID    CUST_ID SLIP_DAT
---------- -------------------- ---------------------------------------- ---------- ---------- --------
         1 古千谷商店           東京都足立区古千谷本町                            7          1 95-07-03
         2 千代田商事           東京都千代田区大手町                              1          2 95-06-19
         2 千代田商事           東京都千代田区大手町                              4          2 95-06-26
         2 千代田商事           東京都千代田区大手町                              6          2 95-07-03
         3 竹の塚マート         東京都足立区竹の塚                                5          3 95-06-29
         4 竹里屋               埼玉県春日部市竹里                                3          4 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            2          5 95-06-23
         5 西日本商会           大阪府大阪市西区北堀江                            8          5 95-07-07

8行が選択されました。

SQL> select *
  2  from goods, account;

  GOODS_ID GOODS_NAME       UNIT_PRICE ACCOUNT_ID    SLIP_ID   GOODS_ID    QTY
---------- -------------------- ---------- ---------- ---------- ---------- ----------
         1 片手鍋                      500          1          1          2         10
         1 片手鍋                      500          2          1          3          5
         1 片手鍋                      500          3          1          1         15
         1 片手鍋                      500          4          2          1         20
         1 片手鍋                      500          5          3          3          5
         1 片手鍋                      500          6          3          4          5
         1 片手鍋                      500          7          4          1         15
         1 片手鍋                      500          8          4          2         10
         1 片手鍋                      500          9          5          3          7
         1 片手鍋                      500         10          6          1         15
         1 片手鍋                      500         11          6          2         10
         1 片手鍋                      500         12          6          3          5
         1 片手鍋                      500         13          6          4          5
         1 片手鍋                      500         14          7          1          8
         1 片手鍋                      500         15          7          2          5
         1 片手鍋                      500         16          8          1         20
         2 両手鍋                      800          1          1          2         10
         2 両手鍋                      800          2          1          3          5
         2 両手鍋                      800          3          1          1         15
         2 両手鍋                      800          4          2          1         20
         2 両手鍋                      800          5          3          3          5
         2 両手鍋                      800          6          3          4          5

  GOODS_ID GOODS_NAME       UNIT_PRICE ACCOUNT_ID    SLIP_ID   GOODS_ID    QTY
---------- -------------------- ---------- ---------- ---------- ---------- ----------
         2 両手鍋                      800          7          4          1         15
         2 両手鍋                      800          8          4          2         10
         2 両手鍋                      800          9          5          3          7
         2 両手鍋                      800         10          6          1         15
         2 両手鍋                      800         11          6          2         10
         2 両手鍋                      800         12          6          3          5
         2 両手鍋                      800         13          6          4          5
         2 両手鍋                      800         14          7          1          8
         2 両手鍋                      800         15          7          2          5
         2 両手鍋                      800         16          8          1         20
         3 中華鍋                     1800          1          1          2         10
         3 中華鍋                     1800          2          1          3          5
         3 中華鍋                     1800          3          1          1         15
         3 中華鍋                     1800          4          2          1         20
         3 中華鍋                     1800          5          3          3          5
         3 中華鍋                     1800          6          3          4          5
         3 中華鍋                     1800          7          4          1         15
         3 中華鍋                     1800          8          4          2         10
         3 中華鍋                     1800          9          5          3          7
         3 中華鍋                     1800         10          6          1         15
         3 中華鍋                     1800         11          6          2         10
         3 中華鍋                     1800         12          6          3          5

  GOODS_ID GOODS_NAME       UNIT_PRICE ACCOUNT_ID    SLIP_ID   GOODS_ID    QTY
---------- -------------------- ---------- ---------- ---------- ---------- ----------
         3 中華鍋                     1800         13          6          4          5
         3 中華鍋                     1800         14          7          1          8
         3 中華鍋                     1800         15          7          2          5
         3 中華鍋                     1800         16          8          1         20
         4 フライパン                 1500          1          1          2         10
         4 フライパン                 1500          2          1          3          5
         4 フライパン                 1500          3          1          1         15
         4 フライパン                 1500          4          2          1         20
         4 フライパン                 1500          5          3          3          5
         4 フライパン                 1500          6          3          4          5
         4 フライパン                 1500          7          4          1         15
         4 フライパン                 1500          8          4          2         10
         4 フライパン                 1500          9          5          3          7
         4 フライパン                 1500         10          6          1         15
         4 フライパン                 1500         11          6          2         10
         4 フライパン                 1500         12          6          3          5
         4 フライパン                 1500         13          6          4          5
         4 フライパン                 1500         14          7          1          8
         4 フライパン                 1500         15          7          2          5
         4 フライパン                 1500         16          8          1         20

64行が選択されました。

SQL> select slip_date, cust_name
  2  from customer natural join slip
  3  where cust_id = 5;

SLIP_DAT CUST_NAME
-------- --------------------
95-06-23 西日本商会
95-07-07 西日本商会

SQL> select slip_date, cust_name
  2  from customer, slip
  3  where customer.cust_id = slip.cust_id
  4  and customer.cust_id = 5;

SLIP_DAT CUST_NAME
-------- --------------------
95-06-23 西日本商会
95-07-07 西日本商会

SQL> select slip_date, cust_name
  2  from customer, slip
  3  where customer.cust_id = slip.cust_id
  4  and slip.cust_id = 5;

SLIP_DAT CUST_NAME
-------- --------------------
95-06-23 西日本商会
95-07-07 西日本商会

SQL> select slip_id, slip_date, customer.cust_id, cust_name, address
  2  from slip, customer
  3  where slip.cust_id = customer.cust_id
  4  order by slip_id;

   SLIP_ID SLIP_DAT    CUST_ID CUST_NAME        ADDRESS
---------- -------- ---------- -------------------- ----------------------------------------
         1 95-06-19          2 千代田商事           東京都千代田区大手町
         2 95-06-23          5 西日本商会           大阪府大阪市西区北堀江
         3 95-06-23          4 竹里屋               埼玉県春日部市竹里
         4 95-06-26          2 千代田商事           東京都千代田区大手町
         5 95-06-29          3 竹の塚マート         東京都足立区竹の塚
         6 95-07-03          2 千代田商事           東京都千代田区大手町
         7 95-07-03          1 古千谷商店           東京都足立区古千谷本町
         8 95-07-07          5 西日本商会           大阪府大阪市西区北堀江

8行が選択されました。

SQL> select slip_id, slip_date, cust_id, cust_name, address
  2  from slip natural join customer
  3  order by slip_id;

   SLIP_ID SLIP_DAT    CUST_ID CUST_NAME        ADDRESS
---------- -------- ---------- -------------------- ----------------------------------------
         1 95-06-19          2 千代田商事           東京都千代田区大手町
         2 95-06-23          5 西日本商会           大阪府大阪市西区北堀江
         3 95-06-23          4 竹里屋               埼玉県春日部市竹里
         4 95-06-26          2 千代田商事           東京都千代田区大手町
         5 95-06-29          3 竹の塚マート         東京都足立区竹の塚
         6 95-07-03          2 千代田商事           東京都千代田区大手町
         7 95-07-03          1 古千谷商店           東京都足立区古千谷本町
         8 95-07-07          5 西日本商会           大阪府大阪市西区北堀江

8行が選択されました。

SQL> select slip_id, slip_date, cust_id, cust_name, address
  2  from slip join customer using (cust_id)
  3  order by slip_id;

   SLIP_ID SLIP_DAT    CUST_ID CUST_NAME        ADDRESS
---------- -------- ---------- -------------------- ----------------------------------------
         1 95-06-19          2 千代田商事           東京都千代田区大手町
         2 95-06-23          5 西日本商会           大阪府大阪市西区北堀江
         3 95-06-23          4 竹里屋               埼玉県春日部市竹里
         4 95-06-26          2 千代田商事           東京都千代田区大手町
         5 95-06-29          3 竹の塚マート         東京都足立区竹の塚
         6 95-07-03          2 千代田商事           東京都千代田区大手町
         7 95-07-03          1 古千谷商店           東京都足立区古千谷本町
         8 95-07-07          5 西日本商会           大阪府大阪市西区北堀江

8行が選択されました。

SQL> select slip_id, slip_date, customer.cust_id, cust_name, address
  2  from slip join customer on (slip.cust_id = customer.cust_id)
  3  order by slip_id;

   SLIP_ID SLIP_DAT    CUST_ID CUST_NAME        ADDRESS
---------- -------- ---------- -------------------- ----------------------------------------
         1 95-06-19          2 千代田商事           東京都千代田区大手町
         2 95-06-23          5 西日本商会           大阪府大阪市西区北堀江
         3 95-06-23          4 竹里屋               埼玉県春日部市竹里
         4 95-06-26          2 千代田商事           東京都千代田区大手町
         5 95-06-29          3 竹の塚マート         東京都足立区竹の塚
         6 95-07-03          2 千代田商事           東京都千代田区大手町
         7 95-07-03          1 古千谷商店           東京都足立区古千谷本町
         8 95-07-07          5 西日本商会           大阪府大阪市西区北堀江

8行が選択されました。