Displaying Data From Multiple Tables

여러 테이블에서 데이터를 출력하기 위해 SELECT 를 사용할 수 있다.
테이블을 결합하는 것은 여러 테이블에 저장된 데이터를 보려고 할 때 유용하다.
예를 들어, employees 테이블은 부서 name이 아닌 department IDs 열의 고용자 정보를 포함하고, departments 테이블은 department IDs 와 name 열을 포함한다. department ID에 테이블을 결합함으로써, 해당하는 부서 이름에서 고용자들의 정보를 볼 수 있다.

결합 방법에는 self, inner, outer 등의 방법이 있다.

  • self-join
    : 스스로 테이블을 조합
  • inner join(simple join)
    : 결합 조건에 부합하는 행을 반환하는 두 개나 그 이상의 테이블의 결합
  • outer join
    simple join의 결과를 확장. outer join은 결합 조건에 부합하는 모든 행을 반환하고, 또한 결합 조건에 부합하지 않은 다른 한 개의 테이블에서 일부나 모든 행을 반환

outer join은 LEFT OUTER, RIGHT OUTER, FULL OUTER 세가지 타입이 있다.
여러 테이블로부터 데이터를 검색할 때, 열을 포함하는 테이블을 명백하게 명시할 수 있다.
이것은 테이블들이 같은 이름으로 열을 포함할 때 중요하다.
명백하게 열을 인증하기 위해 테이블 별명이나 employees.employee_id 처럼 완벽한 테이블 이름을 사용할 수 있다.
테이블 별명은 단순하고 SQL 코드의 크기를 줄이기 위해 사용한다.

NATURAL JOIN 문법을 사용하여 일치하는 이름과 데이터타입을 가진 모든 열에서 자동적으로 두 테이블을 결합할 수 있다.
이것은 일치된 열에서 동등한 값들을 가진 두 개의 테이블로부터 선택된 행을 결합한다.

SELECT employee_id, last_name, first_name, department_id, department_name, manager_id 
FROM employees
NATURAL JOIN departments;
-- department_id, manager_id 열이 일치하는 employees와 department에서 동일한 값을 가진 열들을 가진 두 개의 테이블에서 데이터를 검색한다.

SELECT e.employee_id, e.last_name, e.first_name, e.manager_id, department_id, d.department_name, d.manager_id
FROM employees e
JOIN departments d USING (department_id);
-- department_id 열을 가진 두 개의 테이블에서 데이터를 검색한다.
-- employees 테이블이 e, departments 테이블은 d로 별명지은 것에 주의하라.

SELECT e.employee_id, e.last_name, e.first_name, e.manager_id, department_id,
d.department_name, d.manager_id, location_id, l.country_id
FROM employees e
JOIN departments d USING (department_id)
JOIN locations l USING (location_id);
-- 세 개의 테이블에서 데이터를 검색한다.
-- 두 개의 테이블은 department_id 를 가지고, 두 개의 테이블은 location_id 를 가진다.

SELECT e.employee_id, e.last_name, e.first_name, e.department_id, d.department_name, d.manager_id
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.manager_id = 122;
-- department_id 열을 가진 두 개의 테이블에서 manager_id 의 값이 122 인 데이터를 검색한다.

SELECT e.employee_id, e.last_name, e.first_name, e.department_id, d.department_name, d.manager_id, d.location_id, l.country_id
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations l ON d.location_id = l.location_id
WHERE l.location_id = 1700;
-- 세 개의 테이블에서 데이터를 검색한다.
-- 두 개의 테이블은 department_id 를 가지고, 두 개의 테이블은 location_id 를 가진다.

SELECT e.employee_id, e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
-- right 테이블(departments)에 부합되지 않더라도 left 테이블(employees)로부터 모든 행이 검색된다.

SELECT e.employee_id, e.last_name, d.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
-- left 테이블(employees)에 부합되지 않더라도 right 테이블(departments)로부터 모든 행이 검색된다.

SELECT e.employee_id, e.last_name, d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
-- departments 테이블에 부합되지 않아도 employees 테이블로부터 모든 행이 검색되고 left 테이블(employees)에 부합되지 않아도 departments 테이블로부터 모든 행이 검색된다.


Using Bind Variables With the SQL Commands Page

SQL 명령문이 실행될 때 값을 받기 위해 SQL Commands 페이지에서 바인드 변수를 사용할 수 있다.
바인드 변수는 접두사로 콜론(:)을 사용한다.
바인드 변수 이름으로는 :b, :bind_variable, :employee_id 등 무엇이든 사용할 수 있다.

SELECT * FROM employees WHERE employee_id = :employee_id

SQL Commands 페이지에서 바인드 변수로 명령문이 실행될 때, 바인드 변수에 대한 값을 위해 새 창이 열린다.
값을 입력 후에 Submit 버튼을 클릭한다. (윈도우 팝업 창 설정이 허용되어 있어야 한다.)

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret