샘플 스키마 : HR

설명하는 과정에서 예제로 주어진 문장은 눈으로 보지만 말고 직접 실행시켜 보길 권한다.




No. 01

 

 

조인 문을 위한 준비


조인 문을 만들기 위해서는 반드시 테이블간 관계를 알아야 한다. 어떤 테이블이 어떤 테이블과 공통컬럼이 있는가 등의 내용을 명확하게 알지 못한다면 정확한 정보를 제공하는 조인 문을 절대 만들지 못할 것이다.


우리가 사용하고 있느 HR 스키마의 구조를 보면 다음과 같다.


HR schema 구조


이렇게 스키마의 구조를 도표로 표현한 것을 ERD(Entity-Relationship Diagram)이라고 한다.

이런 자료들을 문서로 가지고 있거나 직접 테이블 구조를 보는 명령어를 통해 구조를 파악하는 것은 매우 중요하다.

실제 현장에서는 ERD를 웬만하면 볼 수 없을 것이고, 스스로 테이블 구조를 파악해야 할 것이다.

테이블 구조의 생성, 수정, 삭제, 파악 등의 방법은 나중에 배워보도록 하고,

지금은 HR 스키마의 ERD를 보고 대충 구조를 기억해 놓자. 이미 실습을 통해 몇 개의 테이블은 대충 파악됐을 것이다. 이런 관계들을 일부러 외우지는 말자. 헷갈린다면 그냥 ERD를 보고하면 그만이다.

[SQL 00] 에도 같은 그림이 있다.




No. 02

 

 

조인 문을 만드는 과정


이제부터 조인문을 만드는 과정을 단계별로 설명할 것이다. SQL은 비절차적 언어이기 때문에 단계를 만들어서 한다는 것은 옳은 방법은 아니라고 생각한다. 단지 조인문의 초보자들에게 여러 방법 중 이런 방법이 있다는 것을 설명해주는 것이라 생각하면 될 것 같다.

지금까지는 두 가지 조인밖에 배우지 않았고, 앞으로 많은 조인 방법을 배울 것이다. 종류는 다르지만 조인문을 만드는 과정은 크게 다르지 않다. 이 과정들이 조인문을 만들 때 도움이 되기를 바란다.

SQL문을 연습하다보면 자연스럽게 자신만의 편한 방법을 찾게 될 것이다.

절대로 설명되는 과정들을 외워서 메뉴얼처럼 생각하지말자!


1. 검색 대상과 조건을 찾는다.

 - 검색 대상은 SELECT 절에, 조건은 WHERE 절에 기술한다.


2. 검색될 정보를 가지고 있는 테이블을 파악한다.

 - FROM 절에 기술한다.


3. 테이블간의 관계를 확인한다. (연결 고리를 찾는다)

 - 연결 고리가 없다면 중계자 역할을 할 수 있는 테이블을 추가한다.


4. 조인 조건을 기술한다.


5. 전체 문장을 다듬는다.



위에 제시한 단계별로 지문으로부터 SQL문을 만들어 보자.


▶ 사원번호가 200번 이하인 사원들의 이름과 일하고 있는 부서이름, 도시이름을 검색한다.


 1. 검색 대상과 조건을 찾는다.

 

 § 검색 대상

     이름 : first_name

     부서이름 : department_name

     도시이름 : city

 § 조건

     사원번호가 200번 이하 : employee_id <= 200



 SELECT first_name, department_name, city

 FROM

 WHERE employee_id <= 200;


 2. 검색될 정보를 가지고 있는 테이블을 파악한다.

 

 SELECT 절과 WHERE 절에 사용된 컬럼이 포함된 테이블을 찾는다.

 - first_name : employees 테이블

 - department_name : departments 테이블

 - city : locations 테이블 



 SELECT first_name , department_name ,city

 FROM employees, departments, locations

 WHERE  employee_id <= 200;


 3. 테이블간의 관계를 확인한다.(연결 고리를 찾는다)

                         공통컬럼                               공통컬럼

 employees (department_id) departments (location_id) locations


 4. 조인 조건을 기술한다. 

 

 테이블 간의 연결고리를 이용하여 조인 조건을 기술한다.


 

 SELECT first_name, department_name, city

 FROM employees, departments, locations

 WHERE employee.department_id = departments.department_id

 AND departments.location_id = locations.location_id

 AND employee_id <= 200; 


 5. 전체 문장을 다듬는다.

 

 새로운 컬럼을 SELECT 절에 추가하거나, 별명을 지정하는 등의 부가적인 요소들을 추가한다.

 부가적인 요소를 추가할 때 조인되는 테이블에 있는 컬럼인지 결과를 변형시켜 잘못된 정보를 출력하게 하는 요소인지 점검한다.



 SELECT first_name, department_name, city

 FROM employees e, departments d, locations l

 WHERE e.department_id = d.department_id

 AND d.location_id = l.location_id

 AND employee_id <= 200;




조인문을 만드는 과정을 배워봤다. 테이블의 이름, 구조 등을 완전히 알고 있다면 SELECT 절부터 WHERE 절까지 막힘없이 기술할 수 있겠지만, 그런 것들을 기억하기는 쉽지 않다. 실제 현장에 가도 마찬가지일 것이다. 물론 자신이 테이블을 만드는 상황이라면 쉽게 파악할 수 있지만, 대부분은 누군가가 만들어 놓은 테이블을 이용한다.

SQL 문을 만드는 과정은 새로운 환경에서는 쉽지 않다. 문장의 앞뒤를 오가면서 수정하고 삽입하는 과정을 거쳐야 할 것이다. 제 블로그를 통해서 공부하시는 분들 중에 SELECT 문을 만들면서 한 번에 쭉 문장을 기술하지 못한다고 스스로를 자책하는 분이 있을 수 있지만, 절대 그런 고민은 할 필요가 없다. 능숙한 전문가라도 항상 자신이 만든 SQL문을 확인하고 수정하는 작업을 거친다.




+ Recent posts