SQL Union
실습을 위한 테이블 작성 SQL문
1
2
3
4
5
6
7
8
9
|
create table employees_role as select * from employees where 1=0;
insert into employees_role values(101, 'Neena', 'Kochhar', 'NKOCHHAR', '515.123.4568', '1989-09-21', 'AD_VP', 17000.00, NULL, 100, 90);
insert into employees_role values(101, 'Neena', 'Kochhar', 'NKOCHHAR', '515.123.4568', '1989-09-21', 'AD_VP', 17000.00, NULL, 100, 90);
insert into employees_role values(101, 'Nee', 'Ko', 'NKOCHHAR', '515.123.4568', '1989-09-21', 'AD_VP', 17000.00, NULL, 100, 90);
insert into employees_role values(200, 'Neena', 'Kochhar', 'NKOCHHAR', '515.123.4568', '1989-09-21', 'AD_VP', 17000.00, NULL, 100, 90);
insert into employees_role values(200, 'Nee', 'Kochhar', 'NKOCHHAR', '515.123.4568', '1989-09-21', 'AD_VP', 17000.00, NULL, 100, 90);
insert into employees_role values(300, 'GilDong', 'Conan', 'CONAN', '010-123-4567', '2009-03-01', 'IT_PROG', 23000.00, NULL, 100, 90);
commit;
select * from employees_role;
|
cs |
ex1) union 합집합 중복 제거
employee_id, last_name이 같을 경우 중복제거 하시오 → 110 레코드
1
2
3
4
|
SELECT employee_id, last_name
FROM employees
UNION SELECT employee_id, last_name
FROM employees_role;
|
cs |
ex2) union all 합집합 중복 포함
employee_id, last_name이 같을경우 중복을 허용 하시오 → 113 레코드
1
2
3
4
|
SELECT employee_id, last_name
FROM employees
UNION ALL SELECT employee_id, last_name
FROM employees_role;
|
cs |
ex3) minus - 차집합
employees_role과 중복되는 레코드는 제거하고
employees에만 있는 사원명단을 구하시오
(단, employee_id, last_name만 표시) → 106 레코드
1
2
3
4
|
SELECT employee_id, last_name
FROM employees MINUS
SELECT employee_id, last_name
FROM employees_role;
|
cs |
ex4) intersect - 교집합
employees와 employees_role에서 중복되는 레코드의 사원명단을 구하시오
(단, employee_id, last_name만 표시) → 1 레코드
1
2
3
4
|
SELECT employee_id, last_name
FROM employees INTERSECT
SELECT employee_id, last_name
FROM employees_role;
|
cs |
[문제1] employees와 employees_role에서 레코드의 사원명단을 구하시오
조건1) 사원이름, 업무ID, 부서ID을 표시하시오
조건2) employees 에서는 부서ID가 10인사원만
employees_role에서는 업무ID가 IT_PROG만 검색
조건3) 중복되는 레코드는 제거
1
2
3
4
5
6
7
8
|
SELECT first_name||' '||last_name AS 사원이름,
job_id AS 업무ID,
department_id AS 부서ID
FROM employees WHERE department_id = 10
UNION SELECT first_name||' '||last_name AS 사원이름,
job_id AS 업무ID,
department_id AS 부서ID
FROM employees_role WHERE job_id='IT_PROG';
|
cs |
ex5) SET operator과 IN operator관계
job_title이 'Stock Manager' 또는 'Programmer'인 사원들의 사원명과 job_title을 표시하시오
employees, jobs
last_name job_title
--------------------------------
Kaufling StockManager
Hunlod Programmer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
--JOIN & IN 활용 - 0.002초
SELECT last_name, job_title
FROM employees
JOIN jobs USING(job_id)
WHERE job_title in('Stock Manager', 'Programmer');
--JOIN & UNION 활용
SELECT last_name, job_title
FROM employees
JOIN jobs USING(job_id)
WHERE job_title='Stock Manager'
UNION
SELECT last_name, job_title
FROM employees
JOIN jobs USING(job_id)
WHERE job_title='Programmer'
ORDER BY 2;
|
cs |
ex9) 컬럼명이 다른경우의 SET operator
[SET operator] - 집합연산자 : 두개 이상의 쿼리결과를 하나로 결합시키는 연산자
쿼리1과 쿼리2의 select 목록은 반드시동일(컬럼개수, 데이터타입)해야 하므로
이를 위해 Dummy Column을 사용할수 있다
1
2
3
4
5
6
7
|
SELECT last_name, employee_id, hire_date
FROM employees
WHERE department_id=20
UNION
SELECT department_name, department_id, NULL
FROM departments
WHERE department_id=20;
|
cs |
lombok 적용
1. 사용이유
bean 클래스에 @Data 애너테이션 하나로 세터 게터를 만들어줌.
2. 사용법
lombok.jar 다운로드 https://projectlombok.org/download
명령프롬프트에서 java -jar 다운경로\lombok.jar로 설치 실행
이클립스 설치위치 확인 후 Install
c:\Program Files\java\jre1.8.0_251\lib\ext 경로에 jar파일을 넣어줌
bean클래스에 @Data 애너테이션 입력 후 import 처리
3. 결과
하단의 netlify스샷 확인
github octotree + t + netlify
크롬 웹스토어 - Github dark theme, Octotree
netlify를 활용한 변경내용 확인하기!
github.com/~~~ 주소에서
github-history.netlify.com/~~~ 로 변경해주면 된다!
다른 사람의 코드를 보기만 하려면 이게 테마가 더 좋아서
자세히 코드를 분석할 땐 이걸로 보는 게 나을듯
'Database' 카테고리의 다른 글
주소 db 만들기 - SQL developer 임포트 기능 활용 & cmd에서 ctl 파일 활용 (0) | 2020.06.11 |
---|---|
SQL 2020-06-08 : rownum, subquery, ceil, view (0) | 2020.06.08 |
SQL 예제 4일차, 로그인&회원가입- 2020-05-29 (0) | 2020.05.29 |
SQL 예제 3일차, html -> javascript -> java서블릿 응답 - 2020-05-28 (0) | 2020.05.28 |
SQL 예제 8문제, 이클립스EE+톰캣 연동- 2020-05-27 (0) | 2020.05.27 |