質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

受付中

オラクル:三つのテーブルの結合の仕方

DEVELOPER-SYU
DEVELOPER-SYU

総合スコア15

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

2回答

0リアクション

0クリップ

153閲覧

投稿2018/02/13 21:43

従業員、従業員の部署、給料のグレードを示す三つのテーブルが与えられた中で
部署名とその部署の給料グレード、部署にいる従業員の最低給料、平均のコミッションを紐ずけた形で
表示させるSQL文を書くことを求められています。

SQL> select * 2 from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 training San Francisco
SQL> select * 2 from salgrade; GRADE LOSAL HISAL ---------- ---------- ---------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999
SQL> select * 2 from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7839 KING PRESIDENT 17-NOV-81 5000 10 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7566 JONES MANAGER 7839 02-APR-81 3000 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7900 JAMES CLERK 7698 03-DEC-81 950 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- --------- ---------- ---------- DEPTNO ---------- 7876 ADAMS CLERK 7788 12-JAN-83 1100 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 1456 John Smith Analyst 7566 01-JAN-02 3000 20 15 rows selected.

正解のSQL文とテーブルは下記のようになるようなのですが
わからない点が4点ほどあります。
ご存知でしたらお伺いできますと幸いです。

① どのように給料グレード(grade)を部署のテーブルに結合して
表示しているのか。
where句では従業員テーブルと部署テーブルのみが内部結合で
紐づけられているように見えます。
WHERE d.deptno=e.deptno

②そもそもこの方法は結合なのでしょうか。

③having句がこの時、どのような操作の為にあるのかよくわかりません。。

④group by句に以下の5つのカラムを含めないといけないことは
文法上の制約なのでわかるのですが
これがどのような動作を与えるのか
イメージがつきません。
GROUP BY d.deptno,d.dname,s.grade,s.losal,s.hisal

SQL> SELECT d.dname,s.grade,MIN(e.sal) "Min Sal",AVG(NVL(e.comm,0)) "AVG Comm" FROM emp e,dept d,salgrade s WHERE d.deptno=e.deptno GROUP BY d.deptno,d.dname,s.grade,s.losal,s.hisal HAVING MIN(e.sal) BETWEEN s.losal AND s.hisal; DNAME GRADE Min Sal    AVG Comm -------------- ---------- ----------  ---------- SALES  1 950       366.666667 ACCOUNTING 2   1300       0 RESEARCH 1    800    0

テーブルの表がずれてしまっていて申し訳ございません。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Orlofsky

2018/02/13 23:24

SQLの質問には必要なCREATE TABLE文, INSERT文も提示できるとコメントが付き易いです。 SQL*Plusから ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD' ; SET PAGESIZE 100 としてから、 select * from emp; を実行して 結果は [対応しているMarkdownの機能](https://teratail.com/help#about-markdown) の[コードを入力]で載せると良いでしょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます