SQL of Oracle
SELECT 문의 기능 SELECT 문은 데이터베이스에서 정보를 검색한다. SELECT 문으로 다음을 수행할 수 있다. 프로젝션(PROJECTION) query에 의해 반환되는 테이블의 열을 선택한다. 필요한 수만큼 열을 선택할 수 있다. 선택(SELECTION) query에 의해 반환되는 테이블의 행을 선택한다. 다양한 조건을 사용하여 검색되는 행을 제한할 수 있다. 조인(JOIN) 두 테이블 사이에 링크를 지정하여 서로 다른 테이블에 저장된 데이터를 함께 가져온다.
구문설명 SELECT 하나 이상의 열로 이루어진 리스트이다. * 모든 열을 선택한다. DISTINCT 중복을 방지한다. column|expression 명명된 열 또는 표현식을 선택한다. alias 선택된 열에 다른 머리글을 지정한다. FROM table 열을 포함하는 테이블을 지정한다.
열 alias query 결과를 표시할 때 SQL Developer는 일반적으로 선택된 열의 이름을 열 머리글로 사용 한다. 열 alias를 사용하여 열 머리글을 변경할 수 있다. 공백을 구분자로 사용하여 SELECT list의 열 뒤에 alias를 지정한다. 기본적으로 alias 머리글은 대문자로 나타난다. alias가 공백이나 특수 문자(예: # 또는 $)를 포함하거나 대소문자를 구분 하는 경우 alias를 큰따옴표(“ “)로 묶는다.
첫 번째 예제는 열 alias 이름 앞에 선택 사항인 AS 키워드가 사용되었다. query 결과는 AS 키워드 사용 여부에 관계없이 동일하다. 또한 SQL 문에는 열 alias인 name 및 comm이 소문 자이지만 query 결과에는 열 머리글이 대문자로 표시된다. 열 머리글은 기본적으로 대문자로 나타난다. 두 번째 예제는 모든 사원의 성과 연간 급여를 표시한다. Annual Salary에 공백이 있으므로 큰 따옴표로 묶였다. 출력의 열 머리글은 열 alias와 정확하게 같다.
연결 연산자(||)를 사용하여 열을 다른 열, 산술식 또는 상수 값에 연결하여 문자 표현식을 생 성할 수 있다. 연산자 양쪽의 열이 결합되어 단일 출력 열이 만들어진다.
리터럴 리터럴은 SELECT 문에 포함된 문자, 숫자 또는 날짜 데이터임 날짜 및 문자 리터럴 값은 작은따옴표로 묶어야 함 각 문자열은 반환되는 각 행에 한 번 출력
별도로 지정하지 않는 한 SQL은 중복 행을 제거하지 않고 query 결과를 표시한다. 결과에서 중복 행을 제거하려면 SELECT 절에서 SELECT 키워드 바로 뒤에 DISTINCT 키워드를 포함해야 한다. DISTINCT 수식자 뒤에 여러 열을 지정할 수 있다. DISTINCT 수식자는 선택된 모든 열에 영향 을 주며 결과에는 모든 고유한 열 조합이 나타난다.
선택되는 행 제한 WHERE 절을 사용하여 query에서 반환되는 행을 제한할 수 있다. WHERE 절은 충족되어야 하 는 조건을 포함하며 FROM 절 바로 뒤에 나온다. 조건이 true인 경우 해당 조건을 충족하는 행이 반환된다. WHERE 절은 열의 값, 리터럴, 산술식 또는 함수를 비교할 수 있으며 다음 세 가지 요소로 구 성된다. 열 이름 비교 조건 열 이름, 상수 또는 값 리스트
IN 연산자는 Oracle 서버 내부에서 a=value1 or a=value2 or a=value3과 같이 OR 조건의 집 합으로 평가된다. 따라서 IN 연산자를 사용해도 성능상의 이점은 없으며 논리적으로 간결한 SELECT 문을 작성하려는 경우에만 사용된다.
LIKE 연산자 항상 검색할 값을 정확히 알 수 있는 것은 아니다. LIKE 연산자를 사용하여 문자 패턴이 일치 하는 행을 선택할 수 있다. 문자 패턴을 일치시키는 작업을 대체 문자 검색이라고 한다. 두 가지 기호(%, _)를 사용하여 검색 문자열을 구성할 수 있다. 패턴 일치를 위해 두 대체 문자(%, _)를 리터럴 문자와 결합할 수 있다. SELECT last_name FROM employees WHERE last_name LIKE ‘_o%’;
ESCAPE 식별자 실제 데이터 값이 % 및 _ 문자와 정확히 일치해야 하는 경우 ESCAPE 식별자를 사용한다. 이 옵션은 이스케이프 문자를 지정한다. ESCAPE 식별자가 백슬래시()를 이스케이프 문자로 식별한다. 이 SQL 문에서 이스케이프 문 자가 밑줄(_) 앞에 온다. 이렇게 하면 Oracle 서버가 밑줄을 wildcard가 아닌 리터럴 값을 해 석한다.
NULL 조건 NULL 조건은 IS NULL 조건과 IS NOT NULL 조건을 포함한다. IS NULL 조건은 null을 테스트한다. null 값은 사용할 수 없거나, 할당되지 않았거나, 알 수 없 거나, 적용할 수 없는 값을 의미한다. 따라서 null은 어떠한 값과도 같거나 같지 않을 수 없기 때문에 등호(=)를 사용하여 테스트할 수 없다.
데이터의 정렬 query 결과에 반환되는 행의 순서는 정의되어 있지 않다. ORDER BY 절을 사용하여 행을 정 렬할 수 있다. 그러나 SQL 문에서 ORDER BY 절을 사용하는 경우 그 뒤에 다른 절을 사용할 수 없다. 또한 표현식, alias 또는 열 위치를 정렬 조건으로 지정할 수 있다. NULLS FIRST 또는 NULLS LAST 키워드를 사용하여 반환된 행 중 null 값을 포함하는 행이 정 렬 순서상 맨 처음에 나타나거나 마지막에 나타나도록 지정할 수 있다.
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date desc;
Alias와 열 위치를 사용하여 정렬 열 alias를 사용하여 정렬 열의 위치 순서를 사용하여 정렬 ◼ Alias와 열 위치를 사용하여 정렬 열의 별칭으로 쓰여진 alias 를 사용하여 query 결과를 정렬할 수 있다. SELECT 절에 쓰여진 열의 위치를 숫자로 지정하여 정렬할 수도 있다. SELECT employee_id, last_name, salary*12 total FROM employees ORDER BY total ; SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY 3 ;
여러 열을 기준으로 정렬 두 개 이상의 열을 기준으로 query 결과를 정렬할 수 있음 각 열마다 오름차순, 내림차순을 개별적으로 지정할 수 있음 ◼ 여러 열을 기준으로 정렬 둘 이상의 열을 기준으로 query 결과를 정렬할 수 있다. ORDER BY 절에서 열을 지정하고 쉼표를 사용하여 열 이름을 구분한다. 슬라이드에 표시된 예제 query 의 결과는 department_id 를 기준으로 오름차순, salary 를 기준으로 내림차순으로 정렬된다 SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC;
함수 유형 함수의 유형은 단일 행 함수, 다중 행 함수 두 가지이다. * 단일 행 함수 함수는 단일 행에서만 실행되며 행당 하나의 결과를 반환한다. 단일 행 함수에는 여러 가지 유형이 있다.( 문자 / 숫자 / 날짜 / 변환 / 일반 ) * 다중 행 함수 행 그룹당 하나의 결과를 산출하도록 행 그룹을 조작할 수 있다. 이러한 함수는 그룹 함수라고도 하며 “그룹 함수를 사용하여 집계된 데이터를 출력할 수 있다.
단일 행 함수 데이터 조작을 위해 사용 인수를 받아들여 하나의 결과를 반환 반환되는 각 행에 대해 작업을 수행 행 당 하나의 결과를 반환 SELECT, WHERE, ORDER BY 절에 사용할 수 있음 데이터 타입을 변경할 수 있음 중첩될 수 있음 function_name [ (arg1, arg2, …) ] ◼ 단일 행 함수 단일 행 함수는 데이터 항목을 조작하는 데 사용된다. 하나 이상의 인수를 사용하고 query에 의해 반환되는 각 행에 대해 하나의 값을 반환한다. 인수는 다음 중 하나가 될 수 있다. * 유저가 제공하는 상수 * 변수 값 * 열 이름 * 표현식 단일 행 함수의 기능에는 다음이 포함된다. * query를 통해 반환되는 각 행에서 실행 * 행당 하나의 결과 반환 * 참조되는 유형이 아닌 다른 유형의 데이터 값을 반환할 수 있음 * 하나 이상의 인수를 사용할 수 있음 * SELECT, WHERE 및 ORDER BY 절에서 사용할 수 있고 중첩될 수 있음
\
문자 함수 문자 함수의 유형 함수 내용 LOWER 모든 문자를 소문자로 UPPER 모든 문자를 대문자로 INITCAP 단어의 첫 문자는 대문자로 나머지는 소문자로 CONCAT 문자열을 결합 SUBSTR 문자열중 지정한 위치에서 지정한 길이만큼 문자열 추출 LENGTH 문자의 길이를 숫자 값으로 표시 INSTR 문자내에 특정 문자열의 위치를 숫자로 표시 LPAD | RPAD 문자열을 제외한 왼쪽/오른쪽 공간에 지정한 문자로 채움 REPLACE 특정 문자열을 다른 문자열로 대체 |
숫자 함수 숫자 함수의 유형 함수 내용 ROUND 지정된 소수점 자릿수로 값을 반올림 TRUNC 지정된 소수점 자릿수로 값을 truncate MOD(M,N) M을 N으로 나눈 나머지 SIGN 숫자가 양수이면 1, 음수이면 -1, 0이면 0을 반환 함수 결과 ROUND(456.789,2) 456.79 TRUNC(456.689,2) 456.68 MOD(1300,200) 100
날짜 데이터 오라클은 내부 숫자 형식(세기, 년, 월, 일, 시, 분, 초)으로 날짜 데이터를 저장 기본 날짜 표시 형식 ➢ RR/MM/DD ➢ DD-MON-RR ➢ RR 표시 형식은 Y2K를 고려 ( 00~49 : 2000년대 / 50~99 : 1900년대 )
날짜 함수 함수 내용 SYSDATE 시스템에 저장된 현재 날짜를 반환 SYSTIMESTAMP TIMESTAMP WITH TIME ZONE 형식의 시스템 날짜를 반환 CURRENT_DATE 현재 session의 날짜를 반환 CURRENT_TIMESTAMP TIMESTAMP WITH TIME ZONE 형식의 데이터 타입으로 session time zone을 반환
날짜 조작 함수 함수 내용 MONTHS_BETWEEN(D1,D2) D1, D2 두 날짜 간의 개월 수 ADD_MONTHS(D1,N) D1날짜에 N개월 더함 NEXT_DAY(D1,’CHAR’) D1보다 이후 날짜이며 지정한 요일에 해당되는 날짜 LAST_DAY(D1) D1날짜 월에 마지막 날짜를 리턴 ROUND 날짜 반올림 TRUNC 날짜 truncate
날짜 함수 사용 함수 결과 MONTHS_BETWEEN(’95/09/01’,’94/01/11’) 19.6774194 ADD_MONTHS(’96/01/31’,1) 96/02/29 NEXT_DAY(’95/09/01’,’금요일’) 95/09/08 LAST_DAY(’95/02/01’) 95/02/28 ROUND(’15/03/20’,’MONTH’) 15/04/01 TRUNC(’15/03/20’,’MONTH’) 15/03/01
Oracle 서버는 자동으로 표현식에서 데이터 유형 변환을 수행한다. 예를 들어, 표현식 hire_date > ‘01-JAN-90’은 문자열 ‘01-JAN-90’을 암시적으로 날짜로 변환한다. 문자열이 유효한 숫자를 나타내는 경우에만 CHAR를 NUMBER로 변환할 수 있다.
암시적 데이터 유형 변환 오라클 서버는 자동으로 데이터 타입을 변환함 소스 대상 VARCHAR2 또는 CHAR NUMBER VARCHAR2 또는 CHAR DATE 소스 대상 NUMBER VARCHAR2 또는 CHAR DATE VARCHAR2 또는 CHAR
명시적 데이터 유형 변환 명시적 데이터 유형 변환은 변환 함수를 사용하여 수행된다. 변환 함수는 한 데이터 유형을 다른 데이터 유형으로 변환하며, 함수 이름의 형식은 일반적으로 TO 데이터 유형 규칙을 따른다. SQL 은 세 가지 데이터 유형 변환 함수를 제공한다.
TO_NUMBER 및 TO_DATE 함수 문자열을 숫자 데이터로 변환 TO_NUMBER(char[, ‘format_model’]) 문자열을 날짜 데이터로 변환 TO_DATE(char [,’format_model’])
NVL 함수 NULL 값을 실제 값으로 변환 ➢ 사용할 수 있는 데이터 유형은 날짜, 문자 및 숫자 ➢ 데이터 유형이 일치해야 함 NVL(commission_pct,0) NVL(hire_date, ’02/01/01’) NVL(job_id,’No Job Yet’)
SELECT last_name, salary, NVL(commission_pct, 0), (salary12) + (salary12*NVL(commission_pct, 0)) AN_SAL FROM employees WHERE hire_date < TO_DATE(’2003/01/01’, ‘yyyy/mm/dd’);
NVL2 함수 NVL2 함수는 첫번째 표현식을 검사한다. 첫번째 표현식이 null이 아니면 NVL2 함수는 두번째 표현식을 반환한다. 첫번째 표현식이 null이면 세번째 표현식이 반환된다.
SELECT last_name, salary, commission_pct, NVL2(commission_pct, ‘SAL+COMM’, ‘SAL’) INCOME FROM employees WHERE department_id IN(50,80);
NULLIF 함수 NULLIF 함수가 expr1과 expr2를 비교한다. 두 표현식이 같으면 이 함수는 null을 반환한다. 두 표현식이 다르면 이 함수는 expr1을 반환한다. 그러나 expr1에 대해 리터럴 NULL을 지정할 수 없다. 예제 ① ② ③ SELECT first_name, LENGTH(first_name) “expr1”, last_name, LENGTH(last_name) “expr2”, NULLIF(LENGTH(first_name), LENGTH(last_name)) result FROM employees;
COALESCE 함수 COALESCE 함수는 리스트에서 null이 아닌 첫 번째 표현식을 반환한다. 모든 표현식은 동일한 데이터 유형이어야 한다. [예제] …… SELECT manager_id, commission_pct, COALESCE(TO_CHAR(commission_pct), TO_CHAR(MANAGER_ID), ‘No commission and no manager’) COALESCE_NM FROM employees;
DECODE 함수 DECODE 함수는 다양한 언어에서 사용되는 IF-THEN-ELSE 논리와 비슷한 방식으로 표현식을 디코딩한다. DECODE 함수는 표현식을 각 검색 값과 비교한 후에 디코딩한다. 표현식이 검색 값과 동일하면 결과 값이 반환된다. 기본값이 생략된 경우 검색 값과 일치하는 결과 값이 없으면 null 값이 반환된다. [예제] …… …… SELECT last_name, job_id, salary, DECODE( job_id, ‘SH_CLERK’, 1.10salary, ‘MK_MAN’ , 1.15salary, ‘HR_REP’ , 1.20*salary, salary) REVISED_SALARY FROM employees;
ASE 식 CASE 식을 사용하면 프로시저를 호출하지 않고도 SQL 문에서 IF-THEN-ELSE 논리를 사용할 수 있다. 간단한 CASE 식의 경우 Oracle 서버는 expr 이 comparison_expr과 동일한 첫 번째 WHEN …THEN 쌍을 검색하여 return_expr을 반환한다. 이 조건을 충족하는 WHEN … THEN 쌍 이 없고 ELSE 절이 존재하면 Oracle 서버는 else_expr을 반환한다. 그렇지 않은 경우 Oracle 서버는 null을 반환한다. 일부 return_expr 및 else_expr에 대해서는 리터럴 NULL을 지정할 수 없다. 표현식 expr 및 comparison_expr은 동일한 데이터 유형이어야 한다.
SELECT last_name, job_id, salary CASE WHEN job_id = ‘SH_CLERK’ THEN 1.10salary WHEN job_id = ‘MK_MAN’ THEN 1.15salary WHEN job_id = ‘HR_REP’ THEN 1.20salary ELSE salary END “REVISED_SALARY” FROM employees; SELECT last_name, job_id, salary CASE job_id WHEN ‘SH_CLERK’ THEN 1.10salary WHEN ‘MK_MAN’ THEN 1.15salary WHEN ‘HR_REP’ THEN 1.20salary ELSE salary END “REVISED_SALARY” FROM employees;
그룹 함수란 그룹 함수는 행 집합 연산을 수행하여 그룹별로 하나의 결과를 산출 ◼ 그룹 함수란 단일 행 함수와 달리 그룹 함수는 행 집합에 대해 실행되어 그룹당 하나의 결과를 산출한다. 이러한 행 집합은 전체 테이블이나 그룹으로 분할된 테이블로 구성될 수 있다.
SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE ‘%REP%’; SELECT MIN(hire_date), MAX(hire_date) FROM employees;
COUNT 함수 사용 COUNT 함수의 세가지 형식 ➢ COUNT(*) ➢ COUNT(expr) ➢ COUNT(DISTINCT expr)
COUNT() COUNT()는 SELECT 문의 조건을 충족하는 테이블의 행 수를 반환하며 여기에는 중복 행 과 열에 null 값을 포함한 행이 포함된다. COUNT(expr) COUNT(expr) 은 expr에 의해 식별되는 열에 있는 null이 아닌 값의 수를 반환한다. COUNT(DISTINCT expr) expr에 의해 식별되는 열에 있는 고유하고 null이 아닌 값의 수를 반환한다.
그룹 함수 및 Null 값 그룹 함수는 열에 있는 null 값을 무시 NVL 함수는 강제로 그룹 함수에 null 값이 포함되도록 함
SELECT AVG(commission_pct), AVG(NVL(commission_pct,0)) FROM employees;
데이터 소그룹 생성 : GROUP BY 절 GROUP BY 절을 사용하여 테이블 행을 더 작은 그룹으로 나눔 그룹 함수에 속하지 않는 SELECT 절의 모든 열은 GROUP BY 절에 반드시 있어야 함 GROUP BY 절에 사용된 열은 SELECT 절에 없어도 됨 ◼ 데이터 소그룹 생성 GROUP BY 절을 사용하여 테이블의 행을 더 작은 그룹으로 나눌 수 있다. 그런 다음 그룹 함 수를 사용하여 각 그룹에 대한 요약 정보를 반환할 수 있다. 지침 * SELECT 절에 그룹 함수를 포함하면 GROUP BY 절에 개별 열이 나타나지 않을 경우 개별 열도 선택할 수 없다. GROUP BY 절에 열 리스트를 포함하는 데 실패하면 오류 메시지가 나타난다. * WHERE 절을 사용하면 행을 그룹으로 나누기 전에 행을 제외할 수 있다. * SELECT 문에서 열을 표현식으로 대체할 수 있다. * GROUP BY 절에 열을 포함해야 합니다. * GROUP BY 절에서 열 alias를 사용할 수 없습니다. SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column]
HAVING 절을 사용하여 그룹 결과 제한 HAVING 절을 사용할 경우 Oracle 서버는 다음과 같이 그룹을 제한 ➢ 행이 그룹화됨 ➢ 그룹 함수가 적용됨 ➢ HAVING 절과 일치하는 그룹이 표시됨 ◼ HAVING 절을 사용하여 그룹 결과 제한 HAVING 절을 사용하여 표시할 그룹을 지정하면 집계 정보를 기초로 그룹을 추가로 제한할 수 있다. 구문에서 group_condition은 반환되는 행 그룹을 지정된 조건이 참인 그룹으로 제한 한다. Oracle 서버는 유저가 HAVING 절을 사용할 때 다음 단계를 수행한다. 행은 그룹화됩니다. 그룹 함수가 그룹에 적용됩니다. HAVING 절의 조건과 일치하는 그룹이 표시됩니다. HAVING 절이 GROUP BY 절 앞에 올 수도 있지만 GROUP BY 절을 앞에 배치하는 것이 더 논 리적이므로 권장된다. HAVING 절이 SELECT list의 그룹에 적용되기 전에 그룹이 형성되고 그 룹 함수가 계산된다. WHERE 절은 행을 제한하는 반면 HAVING 절은 그룹을 제한한다. SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition ] [ORDER BY column]
SELECT job_id, SUM(salary) payroll FROM employees WHERE job_id NOT LIKE ‘%REP%’ GROUP BY job_id HAVING SUM(salary) > 13000 ORDER BY SUM(salary);
==> 그룹바이는 특정 컬럼 값에 따라 그루핑해서 그 그룹들의 결과를 볼 수 있는것이고
해빙은 그룹의 조건 지정할때 where 대신 쓴
ANSI : 1999 표준을 사용한 테이블 조인 조인을 사용하여 둘 이상의 테이블 데이터를 query ◼ ANSI : 1999 표준을 사용한 테이블 조인 table1.column은 데이터가 검색되는 테이블과 열을 나타낸다. NATURAL JOIN은 동일한 열 이름에 준하여 두 테이블을 조인한다. JOIN table2 USING column_name은 열 이름을 기반으로 Equijoin을 수행한다. JOIN table2 ON table1.column_name = table2.column_name performs은 ON 절의 조건을 기 반으로 Equijoin을 수행한다. LEFT/RIGHT/FULL OUTER는 OUTER join을 수행하는 데 사용된다. CROSS JOIN은 두 테이블에서 Cartesian product를 반환한다. SELECT table1.column, table2.column FROM table1 [ NATURAL JOIN table2 ] [ JOIN table2 USING(column_name) ] [ JOIN table2 ON table1.column_name = table2.column_name ] [ LEFT | RIGHT | FULL OUTER JOIN table2 ON table1.column_name = table2.column_name ] [ CROSS JOIN table2 ] |
SELECT employee_id, last_name, d.department_id, department_name FROM employees e JOIN departments d ON e.department_id = d.department_id;
테이블 3개 조인
SELECT employee_id, first_name, city, department_name FROM employees e JOIN departments d ON (e.department_id = d.department_id) JOIN locations l ON (d.location_id = l.location_id);
위에꺼는 가장 일반적인 조인이고 데이터가 일치하는게 있는 경우에만 결과를 보여준다. 이런걸 inner join
OUTER JOIN을 사용하여 일치되지 않는 행 반환 조인 조건을 충족하지 못하는 행은 query 결과에 나타나지 않는다. 슬라이드 예제에서는 EMPLOYEES 테이블과 DEPARTMENTS 테이블에 간단한 equijoin을 사용 하여 오른쪽에 결과를 반환한다. 결과 집합에 다음은 포함되지 않는다. * 부서 ID 190(이유: EMPLOYEES 테이블에 해당 부서 ID가 기록된 사원이 없음) * 성이 Grant인 사원(부서 ID가 할당되지 않음) 사원이 없는 부서 레코드 또는 부서가 배정되지 않은 사원을 반환하려면 OUTER join을 사용 하면 된다.
Subquery 정의
하나의 SELECT 명령문 안에 포함되어 있는 또 다른 SELECT문장 subquery는 main query 전에 실행
Subquery 결과는 main query에서 사용됨
SELECT column1, column2, … FROM table
WHERE expr operator
( SELECT
** FROM**
** [WHERE**
** [GROUP BY**
** [HAVING**
column, …
** table**
] ]
] )
subquery는 다른 SELECT 문의 절에 포함된 SELECT 문이다. Subquery를 사용하여 단순하면서 도 강력한 명령문을 구축할 수 있다. subquery는 테이블 자체의 데이터에 종속되는 조건을 사 용하여 테이블에서 행을 선택해야 하는 경우에 매우 유용하다.
다음을 포함하여 다양한 SQL 절에 subquery를 배치할 수 있다.
- WHERE 절
- HAVING 절
- FROM 절
operator는 >, = 또는 IN 등의 비교 조건을 포함한다.
비교 조건은 단일 행 연산자(>, =, >=, <, <>, <=)와 다중 행 연산자(IN, ANY, ALL, EXISTS)로 구분된다.
일반적으로 subquery가 먼저 실행되고 그 출력이 main query query 조건을 완료하는 데 사 용된다
Subquery 사용 규칙
Subquery는 괄호로 묶음
가독성을 위해 비교 조건의 오른쪽에 subquery를 배치
Subquery는 비교 연산자의 양쪽 어디에나 사용할 수 있음 Single-row subquery에는 단일 행 연산자를 사용
multiple-row subquery에는 다중 행 연산자를 사용
Subquery 사용 규칙
subquery는 괄호로 묶어야 한다.
가독성을 위해 비교 조건의 오른쪽에 subquery를 배치한다. 그러나 subquery는 비교 연산자 의 양쪽 어디에나 사용할 수 있다.
subquery에서는 단일 행 연산자와 다중 행 연산자라는 두 가지 유형의 비교 조건을 사용한다.
집합 연산자
-
집합 연산자는 둘 이상의 구성 요소 query 결과를 하나의 결과로 조합
-
모든 집합 연산자의 우선 순위는 같음
-
SQL문장에 여러 집합 연산자가 포함된 경우 위에서 아래로
연산작업 수행
UNION UNION ALL INSERSECT
집합연산자
의미
중복된 행을 제거하고 양쪽 query의 모든 행 반환 중복된 행을 포함하여 양쪽 query의 모든 행 반환 양쪽 query에 공통적으로 존재하는 행을 반환

➢ DENSE_RANK() ➢ ROW_NUMBER() ➢ CUME_DIST()
➢ NTILE()