DB/MySQL
중복된 값을 제거하는 DISTINCT 키워드
태로미
2023. 2. 1. 00:06
▶▶ DISTINCT 키워드
– "중복된 값"을 자동으로 "제거"해주는 키워드.
– SELECT절의 모든 요소에 대해 일괄 중복값을 제거하는 형태로 동작.
– 여러 컬럼 요소들에 대한 중복값 제거는, 컬럼 목록의 값이 모두 일치한 경우에만 중복값으로 인정하고 제거함.
– 컬럼의 값들 중 하나라도 다른 값이 있는 경우, 해당 값을 개별값으로 보고 중복값으로 인정하지 않음.
EX1 ) 하나의 컬럼 사용
mysql> SELECT DISTINCT department_id
-> FROM employees;
+---------------+
| department_id |
+---------------+
| NULL | // 소속부서 없는 사람
| 10 |
| 20 |
...
| 80 |
| 90 |
| 100 |
| 110 |
+---------------+
→ 각 사원의 소속부서를 모두 알기보다는 부서 id만 알고 싶을 때 사용 (중복제거)
EX2 ) 두 컬럼이상 사용
mysql> SELECT DISTINCT department_id, job_id
-> FROM employees;
+---------------+------------+
| department_id | job_id |
+---------------+------------+
| 90 | AD_PRES | // 90번 부서의 AD_PRES
| 90 | AD_VP | // 90번 부서의 AD-VP // job_id의 값이 다름, 중복값이 아님!
| 60 | IT_PROG |
...
| 40 | HR_REP |
| 70 | PR_REP |
| 110 | AC_MGR |
| 110 | AC_ACCOUNT |
+---------------+------------+
→ 두 컬럼을 쌍으로 묶어서 봐야 함, 두 컬럼 값 모두 동일한 중복값만 제거함.
Q1 ) employees 테이블로부터 employee_id, last_name, job_id, hire_date를 출력하되,
컬럼 제목을 각각 Emp #, Employee, job, Hire Date로 지정하여 출력하시오.
A1 )
mysql> SELECT employee_id AS "Emp #", last_name "Employee",
-> job_id job, hire_date "Hire Date"
-> FROM employees;
+-------+-------------+------------+------------+
| Emp # | Employee | job | Hire Date |
+-------+-------------+------------+------------+
| 100 | King | AD_PRES | 1987-06-17 |
| 101 | Kochhar | AD_VP | 1989-09-21 |
| 102 | De Haan | AD_VP | 1993-01-13 |
...
| 204 | Baer | PR_REP | 1994-06-07 |
| 205 | Higgins | AC_MGR | 1994-06-07 |
| 206 | Gietz | AC_ACCOUNT | 1994-06-07 |
+-------+-------------+------------+------------+
107 rows in set (0.00 sec)
→ column alias 설정시, mysql은 큰따옴표"" 없이 대소문자 구별 가능.
근데 오라클에서는 아님, 되도록 대소문자 구분은 큰따옴표"" 사용.
→ # '샵' 보다는 '해시태그'라고 읽기
Q2 ) employees 테이블로부터 사원들이 담당하고 있는 업무 리스트를 출력하시오.
A2 )
// 사원들이 담당하고 있는 업무 리스트 출력 → job id
// 모든 사원들의 업무 리스트는 중복 업무값이 발생 → DISTINCT로 중복값 제거
mysql> SELECT DISTINCT job_id
-> FROM employees;
+------------+
| job_id |
+------------+
| AC_ACCOUNT |
| AC_MGR |
| AD_ASST |
...
| SH_CLERK |
| ST_CLERK |
| ST_MAN |
+------------+
19 rows in set (0.00 sec)