관계형 데이터베이스
- 관계형 데이터베이스
- 모든 데이터를 2차원 테이블 형태로 표현한 뒤 관계 정의
SELECT문
- Alias (별칭)
- TABLE AS T, TABLE T와 같이 사용 가능
- Alias를 설정했는데 Alias가 아닌 테이블명 사용시 에러 발생
- ALIAS 별도로 지정 X시 컬럼명 대문자로 출력
- ex) SELECT hire_date → 컬럼명 HIRE_DATE로 출력
- 산술연산자
- NULL 포함시 결과값도 NULL

함수
문자 함수
CHR(아스키코드)
- 아스키코드 매핑되는 문자로
- CHR(65) → A
LOWER(문자열)
- 소문자로 변환
- LOWER('JENNIE') → jennie
UPPER(문자열)
- 대문자로 변환
- UPPER('jennie') → JENNIE
LTRIM(문자열[,특정문자]) *[]는 옵션
- 맨왼쪽에서 특정문자 제거
- 특정 문자 지정 X시 공백 제거
- 맨왼쪽에서 지정한 문자들이 연속해서 존재하는 동안만 제거됨 (= 그뒤에 있는 건 제거 X)
- LTRIM('AAABBABC', 'A') → BBABC (연속해서 있는 A 모두 제거됨)
- LTRIM('DATABASE', 'DE') → ATABASE (D만이라도 제거됨)
RTRIM(문자열[,특정문자]) *[]는 옵션
- 맨오른쪽에서 특정문자 제거
- 특정 문자 지정 X시 공백 제거
- 맨오른쪽에서 지정한 문자들이 연속해서 존재하는 동안만 제거됨 (= 그앞에 있는 건 제거 X)
- RTRIM('ABCABCC', 'C') → ABCAB (연속해서 있는 C 모두 제거됨)
- RTRIM('SQL', 'LE') → SQ (L만이라도 제거됨)
TRIM([위치][특정 문자] [FROM] 문자열) *[]는 옵션
- 문자 한 글자만 지정 가능!!
- 옵션이 없을 경우
- 양쪽(맨왼쪽, 맨오른쪽) 공백 제거
- TRIM(' JENNIE ') → JENNIE
- LEADING
- 맨왼쪽에서만 제거
- TRIM(LEDAING '블' FROM '블랙핑크') → 랙핑크
- TRAILING
- 맨오른쪽에서만 제거
- TRIM(TRAILING '크' FROM '블랙핑크') → 블랙핑
- BOTH
- 양쪽(맨왼쪽, 맨오른쪽)에서 제거
- TRIM(BOTH 'A' FROM 'AAABACAAA') → BAC
SUBSTR(문자열, 시작점 [,길이] *[]는 옵션
- 원하는 부분만 잘라서 반환
- 길이 지정 X시 끝까지
- 문자열 맨앞 0 아니고 1부터 시작임!!
- 공백도 계산하기! 주의!
LENGTH(문자열)
REPLACE(문자열, 변경 전 문자열 [,변경 후 문자열]) *[]는 옵션
- 바꿔주는 함수
- 변경 후 문자열 명시 X시 문자열에서 변경 전 문자열을 제거함
LPAD(문자열, 길이, 문자)
- 문자열이 길이가 될 때까지 왼쪽을 특정 문자로 채움
- LPAD('JENNIE', 10, 'V') → VVVVJENNIE
CONCAT(문자열1, 문자열2)
숫자 함수
ABS(수)
SIGN(수)
ROUND(수[,자릿수]) *[]는 옵션
- 지정된 소수점 자릿수까지 반올림하여 반환
- 자릿수 명시 X시 기본값 0
- ROUND(163.76, 1) → 163.8
- ROUND(163.76) → 164
- ROUND(163.76, -1) → 160
CEIL(수)
- 소수점 이하의 수 올림해서 반환
- CEIL(72.86) → 73
- CEIL(7.1) → 8
- ROUND(수)는 반올림, CEIL(수)는 올림
FLOOR(수)
- 소수점 이하의 수 버림
- FLOOR(22.6) → 22
MOD(수1, 수2)
- 수1 % 수2 반환 (=나머지값 반환)
- 수2가 0일 경우 1 반환
날짜 함수
SYSDATE
- 현재의 연, 월, 일, 시, 분, 초 반환
- SYSDATE → 2025-03-04 02:00:58
- 날짜 데이터에서 특정 단위(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)만을 출력
- EXTRACT(YEAR FROM SYSDATE) → 2025
ADD_MONTHS(날짜 데이터, 특정 개월 수)
- 날짜 데이터에서 특정 개월 수를 더한 날짜 반환
- 일자가 존재하지 않을 경우 해당 월의 마지막 일자 반환
- ADD_MONTHS(DATE '2025-01-31', 1) → 2025-02-28
변환 함수
명시적 형변환과 암시적 형변환
명시적 형변환 - 변환 함수 사용
암시적 형변환 - DB가 내부적으로 알아서
명시적 형변환에 쓰이는 함수
- TO_NUMBER(문자열)
- 문자열 → 숫자형으로 변환
- TO_NUMBER('1234') → 1234
- TO_NUMBER('abc') → 에러 발생
- TO_CHAR(수 or 날짜[, 포맷]) *[]는 옵션
- 수 or 날짜 → (포맷 형식의) 문자형
- TO_CHAR(1234) → '1234'
- TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') → '2025-03-04 20:47:38'
NULL 관련 함수
NVL(인수1, 인수2)
- 인수1이 NULL일 경우 인수2 반환
- 인수1이 NULL이 아닐 경우 인수1 반환
NULLIF(인수1, 인수2)
- 인수1과 인수2가 같으면 NULL 반환
- 같지 않으면 인수1 반환
COALESCE(인수1, 인수2, 인수3, ...)
NVL2(인수1, 인수2, 인수3)
- 인수1이 NULL이 아닌 경우 인수2 반환
- NULL인 경우 인수3 반환
- NVL에서 한 칸 밀린 버전이라고 생각하기...
CASE
- 별도의 ELSE가 없을 경우 NULL값이 DEFAULT값이 됨
- Oracle의 DECODE 함수도 같은 기능
- DECODE또 DEFAULT값이 별도로 없을 경우 NULL값이 DEFAULT값이 됨
CASE WHEN SUBWAY_LINE = '1' THEN 'BLUE'
WHEN SUBWAY_LINE = '2' THEN 'GREEN'
WHEN SUBWAY_LINE = '3' THEN 'ORANGE'
[ELSE 'GRAY']
END
CASE SUBWAY_LINE
WHEN '1' THEN 'BLUE'
WHEN '2' THEN 'GREEN'
WHEN '3' THEN 'ORANGE'
[ELSE 'GRAY']
END
DECODE (SUBWAY_LINE, '1', 'BLUE', '2', 'GREEN', '3', 'ORANGE'[, 'GRAY'])
WHERE 절
비교 연산자
| 연산자 | 의미 |
|---|
| = | 같음 |
| < | 작음 |
| <= | 작거나 같음 |
| > | 큼 |
| >= | 크거나 같음 |
부정 비교 연산자
| 연산자 | 의미 |
|---|
| != | 같지 않음 |
| ^= | 같지 않음 |
| <> | 같지 않음 |
| not 컬럼명 = | 같지 않음 |
| not 컬럼명 > | 크지 않음 |
SQL 연산자
| 연산자 | 의미 |
|---|
| BETWEEN A AND B | A와 B 사이 (A,B 범위에 포함) |
| LIKE '비교 문자열' | % : 문자열, _ : 문자, %,_ 포함된 문자 검색시 ESCAPE 지정 |
| IN (LIST) | LIST 중 하나와 일치 ex) where col in (1, 3, 5) |
| IS NULL | NULL값 |
- LIKE 앞뒤로 '%'가 붙으면 어디에든 해당 문자열이 들어간 행을 출력함
부정 SQL 연산자
| 연산자 | 의미 |
|---|
| NOT BETWEEN A AND B | A와 B 사이가 아님 (A,B 제외되는 범위에 포함) |
| NOT IN (LIST) | LIST 중 일치하는 것이 없음 |
| IS NOT NULL | NULL값 아님 |
논리 연산자
GROUP BY, HAVING 절
GROUP BY
GROUP BY - 데이터를 그룹별로 묶을 수 있게 해줌
집계 함수
집계함수는 NULL 제외하고 연산!!
- COUNT(컬럼)
- COUNT(DISTINCT 컬럼) - 중복 제거 후 Count
- SUM(컬럼)
- AVG(컬럼)
- ex) NULL, 25, 65일 경우 (25+65)/2로 계산
- MIN(컬럼)
- MAX(컬럼)
HAVING
- GROUP BY절 사용시 WHERE 절처럼 사용하는 조건절
- 데이터를 그룹핑한 후 특정 그룹 골라낼 때 사용
- 테이블 전체가 한 개의 그룹이 되는 경우 GROUP BY 없이 HAVING만 단독으로 사용 가능
- SELECT문 논리적 수행 순서

- HAVING 절은 SELECT 절보다 먼저 수행되므로 SELECT 절에서 기술된 ALIAS 사용 불가
ORDER BY 절
ORDER BY
- Oracle은 NULL을 최댓값으로 취급함
- 문제에서 Oracle이라고 명시하지 않았을 경우 DBMS마다 다르므로 주의
- 컬럼명 말고 숫자로도 가능
- ex) ORDER BY 1 → 첫 번째 컬럼 기준으로 오름차순 정렬
JOIN
JOIN
- 테이블 간에 PK, FK의 연관 관계가 없어도 JOIN 가능
EQUI JOIN
Non EQUI JOIN
- Non EQUI JOIN (BETWEEN, >, >=, <, <=)
3개 이상 TABLE JOIN
- EQUI JOIN과 Non EQUI JOIN은 하나의 쿼리에서 같이 사용할 수 있다.
STANDARD JOIN
INNER JOIN
- JOIN 조건에 충족하는 데이터만 출력
- JOIN 조건을 ON을 사용해서 작성
OUTER JOIN
- 반대편 테이블의 옆에 (+) 기호 붙여서 작성

- 반대편 테이블에 JOIN되는 데이터가 없는 Row들을 반대편 테이블 컬럼의 값이 NULL로 출력됨
FULL OUTER JOIN
NATURAL JOIN
- 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN됨
- A NATURAL JOIN B
- NATURAL JOIN에는 ON 절 사용 불가, ALIAS 사용 불가 사용시 에러 발생
- JOIN ~~~ USING (특정 컬럼들)
- 이 형태도 NATURAL JOIN임
- 특정 컬럼들이 동일한 데이터를 가지고 있을 경우
- 단, USING 사용시 ALIAS 사용 불가
CROSS JOIN
- 조합할 수 있는 모든 경우 출력
- Cartesian Product

출처