-
오라클_시험대비_기본개념정리[1]Oracle SQL 2022. 3. 24. 18:08
<SELECT 작성법>
SELECT 컬럼명
FROM 테이블명
WHERE 조건식(만족시키는 행만 RESULT SRT에 포함;
컬럼 값 산술 연산 가능
SELECT EMP_NAME, SALARY * 12, (SALARY + (SALARY * BONUS)) * 12
컬럼 별칭
'AS 별칭' 이나 "별칭"
리터럴
임의로 지정한 문자열을 SELECT절에 사용하면 테이블에 존재하는 데이터처럼 활용 가능
리터럴은 모든 RESULT SET 표시
DISTINCT
컬럼 데이터의 중복 값을 제외하고 한 번씩만 표시
<WHERE절>
-검색할 컬럼 조건 설정
-여러 개의 조건 작성 시 AND, OR 사용
<연결 연산자>
'||' 사용하여 여러 컬럼을 하나인 것처럼 컬럼과 리터럴 연결
= 하이유의 월급은 2200000원 입니다.
SELECT EMP_NAME || '의 월급은' || SALARY || '원 입니다.'
<논리 연산자>
여러 개의 제한 조건 결과를 하나의 논리 결과로 만듬. AND, OR, NOT
AND 여러 조건이 동시에 TRUE일 경우에만 TRUE값 반환
OR 여러 조건들 중에 어느 하나의 조건만 TRUE이면 TRUE값 반환
NOT 조건에 대한 반대 값으로 반환(NULL 제외)
<비교 연산자>
표현식 사이의 관계를 비교하기 위해 사용하고 비교 결과는 논리 결과(TRUE,FALSE, NULL) 중 하나.
단, 비교하는 두 컬럼 값/표현식은 서로 동일한 데이터 타입이어야됨.
[주요 비교 연산자]
= 같다
>,< 크다/작다
>=, =< 크거나 같다/ 같거나 크다
<>, !=, ^= 같지 않다
BETWEEN AND 특정범위 포함 비교(사이의 값을 조회)
LIKE, NOT LIKE 문자 패턴 비교
IS NULL, NOT IS NULL NULL 여부 비교
IN, NOT IN 비교 값 목록에 포함/미포함 되는지 여부 비교
<BETWEEN AND>
~이상 ~이하
<NOT BETWEEN AND>
~미만 ~초과
<LIKE>
LIKE '전%' = 첫번째 자리에 '전'이 들어가는 값
LIKE '___7%' = 네번째 자리에 7이 들어가는 값
<NOT LIKE>
NOT LIKE '전%' = 첫번째 자리에 '전'이 들어가지 않은 값
LIKE '___7%' = 네번째 자리에 7이 들어가지 않은 값
<IS NULL, IS NOT NULL>
IS NULL = 값이 비어있다.
IS NOT NULL = 값이 비어있지 않다.
<IN>
비교하려는 값이 일치하면 반환
<연산자 우선순위>
1. 산술 연산자
2. 연결 연산자
3. 비교 연산자
4. IS NULL, IS NOT NULL, LIKE, IN, NOT IN
5. BETWEEN AND, NOT BETWEEN AND
6. 논리 연산자 - NOT
7. 논리 연산자 - AND
8. 논리 연산자 - OR
<함수>
하나의 큰 프로그램에서 반복적으로 사용되는 부분들을 분리하여 작성해 놓은 작은 서브 프로그램
호출하여 값을 전달하면 결과를 리턴하는 방식으로 사용
<단일 행 함수>
여러개의 값을 넣으면 --> 결과값도 여러개의 값
각 행마다 반복적으로 적용되어 입력 받는 행의 개수만큼 결과 반환
<그룹 함수>
여러개의 값을 넣으면 --> 1개의 결과값
특정 행들의 집합으로 그룹이 형성되어 적용됨. 그룹당 1개의 결과 반환
<문자 처리 함수>
LENGTH
문자열 길이 반환
LENGTH (CHAR | STRING) CHARACTER
SELECT EMP_NAME, LENGTH(EMP_NAME), EMAIL, LENGTH(EMAIL)
LENGTHB
문자열의 바이트 크기 반환
LENGTHB(CHAR | STRING) CHARACTER
SELECT EMP_NAME, LENGTHB(EMP_NAME), EMAIL, LENGTHB(EMAIL)
INSTR
특정 문자의 위치 반환
INSTR(STRING, STR, [POSITION,[OCCURRENCE]]) NUMBER
SELECT EMAIL, INSTR(EMAIL, ‘@’, -1, 1)
INSTRB
특정 문자의 위치 바이트 크기 반환
LPAD, RPAD
지정 문자열을 입력한 크기만큼 본 문자열의 왼쪽, 오른쪽부터 채워서 생성된 문자열 리턴
LTRIM, RTRIM
왼쪽, 오른쪽부터 지정한 문자를 잘라내고 남은 문자 리턴
TRIM
왼쪽, 오른쪽, 양쪽부터 지정한 문자를 잘라내고 남은 문자 리턴
SUBSTR
지정한 위치에서 지정한 길이만큼 문자 잘라내어 리턴
SUBSTRB
지정한 위치에서 지정한 바이트만큼 문자를 잘라내어 리턴
LOWER
전달받은 문자, 문자열을 소문자로 변환하여 리턴
UPPER
전달받은 문자, 문자열을 대문자로 변환하여 리턴
INITCAP
전달받은 문자, 문자열의 첫글자만 대문자로, 나머지는 소문자로 변환하여 리턴
CONCAT
인자로 전달받은 두개의 문자, 문자열을 합쳐서 리턴
SELECT CONCAT(‘가나다라’, ‘ABCD’)
FROM DUAL; 가나다라ABCD
REPLACE
전달받은 문자열 중에서 지정한 문자를 인자로 전달받은 문자로 변환하여 리턴
SELECT REPLACE(‘서울시 강남구 역삼동‘, ‘역삼동’, ‘삼성동’)
FROM DUAL; 서울시 강남구 삼성동
서울시 강남구 역삼동->역삼동을 삼성동으로 변환 리턴
<숫자 처리 함수>
ABS
인자로 전달 받은 숫자의 절대 값 리턴
SELECT ABS(-10.9) FROM DUAL; 10.9
MOD
입력받은 수를 나눈 나머지 값 반환
SELECT MOD(10, 3) FROM DUAL; 1
ROUND
특정 자릿수에서 반올림
SELECT ROUND(-10.61) FROM DUAL; -11
FLOOR
버림(소수점 아래를 잘라냄)
TRUNC
특정 자릿수에서 잘라냄
SELECT TRUNC(123.456, 2) FROM DUAL; 123.45
SELECT TRUNC(123.456, -1) FROM DUAL; 120
CEIL
올림(소수점 아래에서 올림)
SELECT CEIL(10.51) FROM DUAL; 11
SELECT CEIL(-10.11) FROM DUAL; -10
<종합문제>
SELECT ROUND(123.456) FROM DUAL; 123
SELECT ROUND(123.456, 1) FROM DUAL; 123.5
SELECT ROUND(123.456, 2) FROM DUAL; 123.46
SELECT ROUND(123.456, -1) FROM DUAL; 120
SELECT FLOOR(123.456) FROM DUAL; 123
SELECT TRUNC(123.456) FROM DUAL; 123
SELECT TRUNC(123.456, 1) FROM DUAL; 123.4
SELECT TRUNC(123.456, 2) FROM DUAL; 123.45
SELECT TRUNC(123.456, -1) FROM DUAL; 120
SELECT CEIL(123.456) FROM DUAL; 124
<날짜 처리 함수>
SYSDATE
시스템에 저장된 현재 날짜 반환
MONTHS_BETWEEN
두 날짜를 전달받아 몇 개월 차이인지 계산하여 반환
MONTHS_BETWEEN(DATE1, DATE2)
SELECT EMP_NAME, HIRE_DATE, MONTHS_BETWEEN(SYSDATE, HIRE_DATE)
ADD_MONTHS
특정 날짜에 개월 수를 더하여 반환
ADD_MONTHS(DATE, NUMBER)
SELECT EMP_NAME, HIRE_DATE, ADD_MONTHS(HIRE_DATE, 6)
NEXT_DAY
특정 날짜에서 인자로 받은 요일이 최초로 다가오는 날짜 반환
NEXT_DAY (DATE, STRING [OR NUMBER])
SELECT SYSDATE, NEXT_DAY(SYSDATE, ‘월요일’) FROM EMPLOYEE;
SELECT SYSDATE, NEXT_DAY(SYSDATE, 2) FROM EMPLOYEE;
SELECT SYSDATE, NEXT_DAY(SYSDATE, ‘월’) FROM EMPLOYEE;
LAST_DAY
해당 달의 마지막 날짜 반환
LAST_DAY(HIRE_DATE)
EXTRACT
년,월,일 정보를 추출하여 반환
EXTRACT(YEAR FROM DATE)
EXTRACT(MONTH FROM DATE)
EXTRACT(DAY FROM DATE
<형 변환 함수>
TO_CHAR
날짜형 혹은 숫자형을 문자형으로 변환
TO_CHAR(DATE[, FORMAT])
TO_CHAR(NUMBER[, FORMAT])
TO_CHAR(HIRE_DATE, 'YYYY-MM-DD'),1990-02-10
TO_CHAR(HIRE_DATE, 'YY/MON, DAY, DY')90/2월 , 토요일, 토
TO_CHAR(SALARY, ‘L999,999,999’),--> L = \ , \8,000,000
TO_CHAR(SALARY, ‘000,000,000’) 008,000,000
TO_DATE
문자형 혹은 숫자형을 날짜형으로 변환
WHERE HIRE_DATE > TO_DATE(20000101, ‘YYYYMMDD’);--2000년도 이후 입사
TO_NUMBER
문자형을 숫자형으로 변환
SELECT TO_NUMBER('1,000,000', '99,999,999') - TO_NUMBER('550,000', '999,999')
--450000
<NULL 처리 함수>
NVL
NULL값을 변경 반환
NVL(P1, P2)
NVL(BONUS, 0),-->보너스 NULL값인 정보를 0으로 반환.
<선택함수>
DECODE
비교하고자 하는 값 또는 컬럼이 조건식과 같으면 결과 값 반환
DECODE(표현식, 조건1, 결과1, 조건2, 결과2, …, DEFAULT)
DECODE(SUBSTR(EMP_NO, 8, 1), ‘1’, ‘남’, ‘2’, ‘여‘)
CASE
비교값, 컬럼이 조건식과 같으면 결과 값 반환(조건은 범위 값 가능)
CASE WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
…
ELSE 결과N
END 컬럼별칭
<그룹함수>
SUM
그룹의 누적 합계 반환
AVG
그룹의 평균 반환
COUNT
그룹의 총 개수 반환 (NULL값 제외)
- EMPLOYEE테이블에서 부서코드가 D5인 직원의 수 조회
SELECT COUNT(DEPT_CODE)
MAX
그룹의 최대 값 반환
MIN
그룹의 최소 값 반환
<SELECT문의 완전한 구조>
5: SELECT 컬럼명 AS 별칭, 계산식, 함수식 -> 조회하고자 하는 컬럼 기술
1: FROM 테이블 명 -> 컬럼이 속해있는 테이블 기술
2: WHERE 컬럼명|함수식 비교 연산자 비교값 -> SELECT에 조건식 설정
3: GROUP BY 그룹을 묶을 컬럼 명 -> 그룹함수가 적용될 그룹 기술
4: HAVING 그룹함수식 비교 연산자 비교값 -> 그룹함수에 조건식 설정
6: ORDER BY 컬럼명|별칭|컬럼순번 정렬방식 [NULLS FIRST | LAST]; -> 정렬 조건 기술
**SELECT의 별칭을 ORDER BY에서 별칭으로 사용 가능**
ORDER BY EMP_NAME ASC;
: 이름으로 오름차순(ASC)
ORDER BY EMP_NAME;
: ASC(오름차순)은 생략 가능
ORDER BY EMP_NAME DESC;
: 내림차순 : 명시적
ORDER BY DEPT_CODE;
: NULL이 들어가 있는 값은 나중에 배치한 상태로 오름차순
ORDER BY DEPT_CODE DESC NULLS FIRST;
: NULL을 먼저 배치 후 내림차순
ORDER BY DEPT_CODE DESC NULLS LAST;
: 오름차순일 때는 NULL을 나중에 배치하는게 기본,
내림차순일 때는 NULL을 먼저 배치하는게 기본
ORDER BY 급여 DESC; 내림차순
<GROUP BY>
그룹으로 묶을 기준 제안
<HAVING>
그룹 조건 설정
ROLLUP, CUBE = 집계 함수 : 그룹 별 산출한 결과물을 집계하는 함수
-->맨 하단에 NULL은 전체 합한 값
ROLLUP
: 그룹 별로 중간 집계 처리를 해주는 함수
: 인자로 전달받은 그룹 중 가장 먼저 지정한 그룹만 중간 집계 처리
CUBE
: 그룹 별 산출한 결과를 집계하는 함수
: 인자로 지정된 모든 것들의 중간 집계 처리
SET OPERATION : 집합 연산자
선생님 집합연산자에서 SELECT 절은 동일해야 되고 FROM절은 달라도 가능하다
UNION : 합집합 = OR
INTERSECT : 교집합 = AND
MINUS : 차집합
UNION ALL : UNION + INTERSECT(합집합 + 교집합)
INTERSECT 교집합 두가지 조건 다 부합해야됨.
UNION 합집합 둘중 하나만 부합해도 조회됨.'Oracle SQL' 카테고리의 다른 글
ORACLE_DML (0) 2022.03.25 ORACLE_DDL(CREATE, ALTER, DROP) (0) 2022.03.25 오라클_VIEW_예제_문제풀이[1] (0) 2022.03.23 오라클_예제_문제풀이[2] (0) 2022.03.21 오라클_예제_문제풀이 (0) 2022.03.21