[Oracle SQL] 정렬, 집합 연산(ORDER BY, UNION, UNION ALL, INTERSECT, MINUS)과 SQL연산자(BETWEEN, IN, IS NULL, LIKE)
|2023. 11. 20. 17:19
본 게시글은 이수안컴퓨터연구소의 데이터베이스 유튜브 동영상을 개인적으로 정리하는 글입니다.
ORDER BY
- ORDER BY 키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력
- ORDER BY 키워드와 함께 정렬 기준이 되는 속성과 정렬 방식을 지정
- 오름차순(기본): ASC / 내림차순: DESC
- 널 값은 오름차순에서는 맨 마지막에 출력되고, 내림차순에서는 맨 먼저 출력됨
- 여러 기준에 따라 정렬하려면 정렬 기준이 되는 속성을 차례대로 제시
--employees 테이블에서 first_name, last_name를 출력하되, first_name를 기준으로 오름차순으로 정렬
SELECT first_name, last_name FROM employees ORDER BY first_name;
--employees 테이블에서 first_name, last_name를 출력하되, first_name를 기준으로 내림차순으로 정렬
SELECT first_name, last_name FROM employees ORDER BY first_name DESC;
--departments 테이블에서 department_name를 오름차순으로 출력
SELECT department_name FROM departments ORDER BY department_name;
--departments 테이블에서 department_name를 내림차순으로 출력
SELECT department_name FROM departments ORDER BY department_name DESC;
--locations 테이블에서 country_id, city를 country_id를 기준으로 오름차순으로 출력하되 동일 항목에 대해선 city를 기준으로 오름차순 정렬
SELECT country_id, city FROM locations ORDER BY country_id, city;
--departments 테이블에서 location_id, department_name를 location_id를 기준으로 내림차순으로 출력하되 동일 항목에 대해선 department_name를 기준으로 오름차순 정렬
SELECT location_id, department_name FROM departments ORDER BY location_id DESC, department_name;
SQL 연산자
BETWEEN 연산자
• 두 값의 범위에 해당하는 데이터만 출력할 때 사용되는 확장 연산자
--employees테이블에서 employee_id가 120이상 130이하인 모든 컬럼을 출력
SELECT * FROM employees WHERE employee_id BETWEEN 120 AND 130;
--employees테이블에서 salary가 10000이상 12000이하인 모든 컬럼을 출력
SELECT * FROM employees WHERE salary BETWEEN 10000 AND 12000;
IN 연산자
• 여러 개의 데이터 값을 지정하여 일치하는 데이터만 출력할 때 사용
--employees테이블에서 first_name이 'Steven', 'John', 'Peter'인 모든 컬럼을 출력
SELECT * FROM employees WHERE first_name IN ('Steven', 'John', 'Peter');
--counturies테이블에서 country_id가 'US', 'IL', 'SG' 인 모든 컬럼을 출력
SELECT * FROM countries WHERE country_id IN ('US', 'IL', 'SG');
--locations 테이블에서 city가 'Sao Paulo', 'London', 'Southlake'가 아닌 모든 컬럼을 출력
SELECT * FROM locations WHERE city NOT IN ('Sao Paulo', 'London', 'Southlake');
IS NULL 연산자
• 특정 속성의 값이 NULL 값인지를 비교하여 데이터 조회
--locations 테이블에서 state_province이 null인 모든 컬럼을 출력
SELECT * FROM locations WHERE state_province IS NULL;
--employees 테이블에서 commission_pct이 null이 아닌 모든 컬럼을 출력
SELECT * FROM employees WHERE commission_pct IS NOT NULL;
LIKE 연산자
• 문자열 속성에서 부분적으로 일치하는 것만 출력할 때 사용
기호 | 설명 |
% | 0개 이상의 문자 (문자의 내용과 개수는 상관 없음) |
_ | 1개의 문자 (문자의 내용은 상관 없음) |
기호 | 설명 |
LIKE ‘data%’ | data로 시작하는 문자열 (길이 상관 없이 data로 시작) |
LIKE ‘%data’ | data로 끝나는 문자열 (길이 상관 없이 data로 끝남) |
LIKE ‘%data%’ | data가 포함된 문자열 (길이 상관 없이 data가 포함) |
LIKE ‘data____’ | data로 시작하는 8자리 문자열 |
LIKE ‘____data’ | data로 끝나는 8자리 문자열 |
--locations테이블에서 city가 South로 시작하는 모든 컬럼을 출력
SELECT * FROM locations WHERE city LIKE 'South%';
--locations테이블에서 street_address가 St로 끝나는 모든 컬럼을 출력
SELECT * FROM locations WHERE street_address LIKE '%St';
--locations테이블에서 city가 South로 시작하고 총 9글자인 모든 컬럼을 출력
SELECT * FROM locations WHERE city LIKE 'South____';
집합 연산자
• 연산자 앞뒤의 값을 비교하여 데이터 조회
연산자 | 설명 |
UNION | 합집합 (중복 제외) |
UNION ALL | 합집합 (중복 포함) |
MINUS | 차집합 |
INTERSECT | 교집합 |
--employees테이블에서 department_id가 60인 집합과 employees테이블에서 department_id가 100인 집합의 합집합에서 employee_id, first_name, department_id 컬럼을 출력
SELECT employee_id, first_name, department_id FROM employees WHERE department_id = 60
UNION
SELECT employee_id, first_name, department_id FROM employees WHERE department_id = 100;
--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 합집합 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
UNION
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;
--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 합집합(중복 포함) 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
UNION ALL
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;
--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 차집합 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
MINUS
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;
--employees테이블에서 employees테이블에서 employee_id가 160 이하인 집합과 employee_id가 140이상인 집합의 교집합 중에 employee_id, first_name 컬럼을 출력
SELECT employee_id, first_name FROM employees WHERE employee_id <= 160
INTERSECT
SELECT employee_id, first_name FROM employees WHERE employee_id >= 140;
연습 문제
--jobs 테이블에서 job_title 기준으로 정렬하여 직업 조회
SELECT job_title FROM jobs ORDER BY job_title;
--countres 테이블에서 country_name 기준으로 내림차순으로 정렬
SELECT country_name FROM countries ORDER BY country_name DESC;
--employees 테이블에서 salary가 10000에서 12000 사이인 직원 조회
SELECT * FROM employees WHERE salary BETWEEN 10000 AND 12000;
--employees 테이블에서 job_id가 IT_PROG와 ST_MAN인 직원 조회
SELECT * FROM employees WHERE job_id IN('IT_PROG','ST_MAN');
--employees 테이블에서 manager_id가 NULL인 직원 조회
SELECT * FROM employees WHERE manager_id IS NULL;
--departments 테이블에서 manager_id가 NULL이 아닌 부서 조회
SELECT * FROM departments WHERE manager_id IS NOT NULL;
--employees 테이블에서 job_id가 'AD'로 시작하는 직원 조회
SELECT * FROM employees WHERE job_id LIKE 'AD%';
--employees 테이블에서 first_name에서 'ni'를 포함하는 직원 조회
SELECT * FROM employees WHERE first_name LIKE '%ni%';
--locations 테이블에서 location_id, street_address, city 에 대해 location_id가 3000 이하인 데이터와 2000 이상인 데이터를 합집합(중복포함)
SELECT location_id, street_address, city FROM locations WHERE location_id <= 3000
UNION ALL
SELECT location_id, street_address, city FROM locations WHERE location_id >= 2000;
--locations 테이블에서 location_id, street_address, city 에 대해 location_id가 3000 이하인 데이터와 2000 이상인 데이터를 차집합
SELECT location_id, street_address, city FROM locations WHERE location_id <= 3000
MINUS
SELECT location_id, street_address, city FROM locations WHERE location_id >= 2000;
--locations 테이블에서 location_id, street_address, city 에 대해 location_id가 3000 이하인 데이터와 2000 이상인 데이터를 교집합
SELECT location_id, street_address, city FROM locations WHERE location_id <= 3000
INTERSECT
SELECT location_id, street_address, city FROM locations WHERE location_id >= 2000;
'데이터베이스 > Oracle SQL' 카테고리의 다른 글
[Oracle SQL] 집계 및 그룹 함수(COUNT(), SUM(), AVG(), MAX(), MIN(), GROUP BY, HAVING) (0) | 2023.11.22 |
---|---|
[Oracle SQL] 숫자, 날짜, 변환, 일반 함수 (1) | 2023.11.21 |
[Oracle SQL] 함수와 문자 함수(LOWER(), UPPER(), INITCAP(), SUBSTR(), REPLACE(), CONCAT(), LENGTH(), INSTR(), LPAD(), RPAD(), LTRIM(), RTRIM()) (1) | 2023.11.21 |
[Oracle SQL] 조건 검색과 비교, 논리 연산(WHERE, AND, OR, NOT) (1) | 2023.11.20 |
[Oracle SQL] SELECT 문 (1) | 2023.11.19 |