12_SQL. Łączenie wielu tabel w SQL Oracle

Skorzystamy z tabel EMPLOYEES, JOB_HISTORY i DEPARTMENTS z bezpłatnej bazy Oracle HR dostępnej tutaj: http://www.oracle.com/technetwork/database/express-edition/downloads/index.html

 Łączenie wielu tabel w SQL prowadzi się używając klauzuli WHERE i operatora AND 

Przy łączeniu wielu tabel w zapytaniu należy poprzedzać nazwy kolumn nazwami tabel.

Połączenie trzech baz za pomocą wspólnego klucza DEPARTMENT_ID

 

SELECT

EMPLOYEES.FIRST_NAME,

EMPLOYEES.LAST_NAME,

JOB_HISTORY.START_DATE,

JOB_HISTORY.END_DATE,

DEPARTMENTS.DEPARTMENT_NAME

FROM EMPLOYEES, DEPARTMENTS, JOB_HISTORY

WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID AND EMPLOYEES.DEPARTMENT_ID = JOB_HISTORY.DEPARTMENT_ID;

Otrzymujemy tabelę wynikową:

Teraz zrobimy łączenie wielu tabel w SQL za pomocą różnych kluczy.

SELECT

EMPLOYEES.FIRST_NAME,

EMPLOYEES.LAST_NAME,

JOB_HISTORY.START_DATE,

JOB_HISTORY.END_DATE,

DEPARTMENTS.DEPARTMENT_NAME,

JOBS.JOB_TITLE

FROM EMPLOYEES, DEPARTMENTS, JOB_HISTORY, JOBS

WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID

AND EMPLOYEES.DEPARTMENT_ID = JOB_HISTORY.DEPARTMENT_ID

AND JOBS.JOB_ID = EMPLOYEES.JOB_ID;

Otrzymujemy tabelę wynikową:

Teraz połączymy trzy tabele z warunkiem, że maksymalna pensja będzie większa od 15 000.

SELECT

EMPLOYEES.FIRST_NAME,

EMPLOYEES.LAST_NAME,

JOB_HISTORY.START_DATE,

JOB_HISTORY.END_DATE,

DEPARTMENTS.DEPARTMENT_NAME,

JOBS.JOB_TITLE,

JOBS.MAX_SALARY

FROM EMPLOYEES, DEPARTMENTS, JOB_HISTORY, JOBS

WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID

AND EMPLOYEES.DEPARTMENT_ID = JOB_HISTORY.DEPARTMENT_ID

AND JOBS.JOB_ID = EMPLOYEES.JOB_ID

AND JOBS.MAX_SALARY > 15000;

 

Otrzymujemy tabelę wynikową: