https://megamaker.tistory.com/371
[DB][SQLD][2024] 1-2 데이터 모델과 SQL 정리
https://megamaker.tistory.com/365 [DB][SQLD][2024] 1-1 데이터 모델링의 이해 정리이번에 SQLD 자격증을 공부하면서 뭔가 한번에 들어오는게 없어서 배운 내용을 정리하기로 했다. 출제문항수 데이터 모
megamaker.tistory.com
ㄴ 이전 게시글
SQL 기본 - 세부 항목

관계형 데이터베이스 개요
관계형 데이터베이스(RDBMS)
테이블끼리 관계를 맺는 데이터베이스
테이블
데이터를 표 형식으로 저장
Column(속성)과 Row(인스턴스)로 구성됨
SQL
관계형 데이터베이스에서 데이터를 다루는데 사용되는 언어
SELECT문
SELECT
출력할 컬럼을 지정
* 또는 컬럼명 또는 표현식이 올 수 있음
실행 순서는 FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY 순으로 실행
별칭(Alias)
컬럼명 대신 출력될 별칭을 지정 가능
컬럼명 뒤에 AS를 붙여서 사용 (AS 생략 가능)
주의할 점
- ''나 ""로 감싸서 별칭을 지정하나 공백이나 _를 제외한 특수문자를 포함하면 무조건 ""(큰따옴표)로 감싸야 함
- 수행되는 순서에 따라 ORDER BY 절에서만 SELECT 별칭 사용 가능
FROM
출력할 데이터가 저장되어 있는 테이블 또는 뷰를 지정
ORACLE
- 별칭 AS 사용 불가
- FROM 절 생략 불가(최신 버전에서는 가능)
SQL Server
- 별칭 사용 / 생략가능
- FROM 절 생략 가능
산술 연산자 우선순위
| 연산자 | 우선순위 |
| () | 1 |
| * | 2 |
| / | |
| + | 3 |
| - | |
| % (SQL Server) | 3 |
합성 연산자
| || | 문자열 결합 - 오라클 |
| + | 문자열 결합 - SQL Server |
CONCAT(문자열1, 문자열2) 함수로도 문자열 연결 가능
함수
입력을 바탕으로 결과를 반환
문자 함수
| CHR(ASCII 코드) | ASCII 코드가 어떤 문자인지 반환 ex) CHR(65) -> A |
| LOWER(문자열) | 문자열을 소문자로 변환 |
| UPPER(문자열) | 문자열을 대문자로 변환 |
| LTRIM(문자열 [, 특정 문자]) | ㅇ왼쪽 공백을 제거 ㅇ특정 문자를 지정하면 왼쪽부터 한 글자씩 특정 문자에 포함되어 있으면 삭제 ㅇSQL Server는 공백 제거만 가능 |
| RTRIM(문자열 [, 특정 문자]) | ㅇ오른쪽 공백을 제거 ㅇ특정 문자를 지정하면 오른쪽부터 한 글자씩 특정 문자에 포함되어 있으면 삭제 ㅇSQL Server는 공백 제거만 가능 |
| TRIM([위치] [특정 문자(한글자만 가능)] [FROM] 문자열) | 위치 - LEADING, TRAILING, BOTH 옵션이 하나도 없으면 문자열 왼쪽과 오른쪽 공백을 제거 위치부터 한 글자씩 특정 문자에 포함되어 있으면 삭제 |
| SUBSTR(문자열, 시작점 [, 길이]) SQL Server -> SUBSTRING |
문자열의 시작점부터 끝까지 잘라서 반환 길이를 지정하면 시작점부터 해당 길이까지만 반환 |
| INSTR(문자열, 찾을 문자, 시작점, n번째) | 문자열에서 시작점부터 n번째에 위치한 찾을 문자의 인덱스를 반(반환되는 인덱스는 시작점과 상관없이 처음부터) |
| LENGTH(문자열) SQL Server -> LEN |
문자열의 길이를 반환 |
| REPLACE(문자열, 변경 전 문자열 [, 변경 후 문자열]) | 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 변경 변경 후 문자열을 지정하지 않으면 빈 문자열로 변경(제거) |
| LPAD(문자열, 길이, 문자) | 문자열이 길이만큼의 문자열이 되도록 왼쪽부터 문자를 채움 |
숫자 함수
| ABS(숫자) | 숫자의 절대값을 반환 |
| SIGN(숫자) | 숫자의 부호를 반환 |
| ROUND(숫자 [, 자릿수]) | 숫자를 자릿수까지 반올림 자릿수가 음수면 정수부부터 왼쪽으로 |
| TRUNC(수 [, 자릿수]) | 숫자를 자릿수까지 버림 자릿수가 음수면 정수부부터 왼쪽으로 |
| CEIL(숫자) | 숫자를 정수로 올림 |
| FLOOR(숫자) | 숫자를 정수로 버림 |
| MOD(숫자1, 숫자2) |
숫자1을 숫자2로 나눈 나머지를 반환 |
| SQRT(숫자) | 루트값 반환 |
날짜 함수
| SYSDATE | 현재 년월일시분초를 반환 |
| EXTRACT(단위 FROM 날짜 데이터) | 단위 - YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 날짜에서 특정 단위만 추출 |
| ADD_MONTHS(날짜 데이터, 개월 수) SQL Server -> DATEADD |
날짜 데이터에서 개월 수를 더한 날짜를 반환 해당 일자가 존재하지 않으면 해당 월의 마지막 날이 반환 |
| CURRENT_TIMESTAMP | 현재의 타임 스탬프 반환 |
변환 함수
| TO_NUMBER(문자열) | 문자열을 숫자형으로 변환 |
| TO_CHAR(숫자 또는 날짜 [, 포맷]) | 숫자나 날짜를 문자열로 변환 포맷이 지정되면 포맷의 형태로 반환 |
| TO_DATE(문자열, 포맷) | 포맷 형식의 문자열을 날짜형으로 변환 |
NULL 관련 함수
| NVL(인수1, 인수2) SQL Server -> ISNULL(인수1, 인수2) |
인수1이 NULL이면 인수2를 반환 인수1이 NULL이 아니면 인수1을 반환 |
| NULLIF(인수1, 인수2) | 인수1과 인수2가 같으면 NULL을 반환 같지 않으면 인수1 반환 |
| COALESCE(인수1, 인수2, 인수3 ...) | 인수 중 NULL이 아닌 최초의 인수를 반환 |
| NVL2(인수1, 인수2, 인수3) | 인수1이 NULL이 아니면 인수2를 반환 인수1이 NULL이면 인수 3을 반환 |
참고) NULLIF가 아닌 IFNULL은 MySQL 함수임
그룹 함수
| COUNT(대상) | 행의 수를 반환 |
| SUM(대상) | 총합을 반환 |
| MAX(대상) | 최댓값을 반환 |
| MIN(대상) | 최솟값을 반환 |
| AVG(대상) | 평균값을 반환 |
CASE
조건별로 반환값 다르게 가능


salary를 어디에 작성하느냐에 따라 WHEN 다음에 오는 salary = 을 생략할 수도 있다.
축약해서 사용할 때는 데이터 타입이 무조건 같아야함!!
문자 = 숫자 이면 이건 가능
DECODE(대상, 값1, 반환1, 값2, 반환2, ..., 그 외의 경우일 때 반환할 값)
CASE 문을 DECODE로 바꿔 작성 가능

WHERE 절
조건을 지정하여 원하는 행만 조회하고 싶을 때 사용
연산자 종류
| A = B | A가 B와 같은 조건 |
| A != B A <> B | A가 B와 다른 조건 |
| A > B | A가 B보다 큰 조건 |
| A >= B | A가 B보다 크거나 같은 조건 |
| A < B | A가 B보다 작은 조건 |
| A <= B | A가 B보다 작거나 같은 조건 |
| A LIKE B | A가 B와 같은 조건 |
| A IS NULL A IS NOT NULL | A가 NULL 이거나 아닌 조건 |
| A AND B | A와 B를 모두 만족하는 조건 |
| A OR B | A 또는 B를 만족하는 조건 |
| NOT A | A가 아닌 조건 |
| BETWEEN A AND B | A와 B 사이를 만족하는 조건 (A, B도 범위에 들어감) |
| IN(A, B, C, ...) | A, B, C ...에 존재하는 조건 |
NULL 관련 주의할 점!!
- NULL은 = != <> 가 아닌 IS NULL / IS NOT NULL로 비교하여야 함!!!
- A IN(B, NULL, C)의 경우는 A = B OR A = NULL OR A = C 인데 A = NULL은 불가능하므로 항상 FALSE이다. 그래서 데이터가 NULL인 것은 찾아지지 않음
- 반대로 A NOT IN (B, NULL, C)이면 A != B AND A != NULL AND A != C 인데 A != NULL은 성립하지 않으므로 아무것도 안 찾아짐
LIKE
% 또는 _ 사용 가능
%는 자릿수 제한 없는 모든 글자
_는 특정 한 자리 문자
| A% | A로 시작하는 모든 문자열 |
| %A | A로 끝나는 모든 문자열 |
| %A% | A가 포함되어 있는 모든 문자열 |
| A_ | A로 시작하는 두 글자 문자열 |
| _A | A로 끝나는 두 글자 문자열 |
| _A_ | A가 두 번째에 위치하는 세 글자 문자열 |
%자체를 조건으로 지정하고 싶으면?
SELECT *
FROM AA
WHERE name LIKE '%@%%' ESCAPE '@';
ESCAPE를 사용하여 AA 테이블에서 %가 포함된 데이터를 구함
GROUP BY, HAVING 절
GROUP BY
데이터를 그룹화하여 결과를 집계하고 요약 가능
HAVING
HAVING 절은 그룹화 결과에 사용할 조건을 지정
- WHERE에다 지정하면 GROUP BY보다 먼저 조건이 수행되므로 그룹화 조건에는 알맞지 않음
- SELECT보다 HAVING이 먼저 수행되므로 SELECT의 별칭 사용 불가
- SELECT에 작성하는 속성은 GROUP BY에서 지정된 속성만 작성 가능
ORDER BY 절
ORDER BY
출력되는 행의 순서를 변경하기 위해 사용
ASC: 오름차순 / DESC: 내림차순
- SELECT보다 나중에 수행되므로 SELECT에서 정의한 별칭 사용 가능
- 여러 속성을 명시하면 첫 번째 속성으로 정렬 후, 값이 겹치면 다음 번째 속성으로 겹치는 값끼리 추가 정렬
- GROUP BY 절과 같이 사용할 경우, GROUP BY에 명시된 속성만 ORDER BY에 사용 가능
조인
조인(JOIN)
여러 테이블의 내용을 한번에 출력할 필요가 있을 때 조인을 사용
- N개의 테이블 조인 시, 최소 N - 1개의 조인 조건 필요
- 동일한 속성명 있으면 테이블명.속성명으로 작성하거나 테이블별칭.속성명으로 작성해야 함
EQUI JOIN
자주 사용하는 조인으로, = 조건으로 조인하는 방식
NON EQUI JOIN
= 가 아닌 <, <=, >, >=, BETWEEN 등으로 조인하는 방식
INNER JOIN
조인 조건에 성립하는 행만 출력하는 방식
OUTER JOIN
조인 조건에 성립하지 않는 행들도 출력하는 방식
NATURAL JOIN
두 테이블의 같은 속성을 사용하여 자연 조인되는 방식
CROSS JOIN
모든 행끼리의 곱으로 나타내어지는 방식 (M x N)
카테시안 곱으로 나타내는 결과와 같다.
SELF JOIN
하나의 테이블로 자신을 조인하여 연결하는 조인
표준 조인
DB 벤더마다 사용되는 SQL 문법이 달라서 표준으로 사용할 수 있는 ANSI 표준이 만들어지게 됨
INNER JOIN

ON의 조건은 괄호로 감싸도 되고 감싸지 않아도 됨
USING
조인할 컬럼명이 같으면 USING을 사용해도 됨
괄호를 무조건 사용해야 함

OUTER JOIN

LEFT OUTER JOIN 또는 LEFT JOIN
조건과 일치하는 행과 나머지 행 중에서 왼쪽 테이블의 나머지 모든 행을 출력
왼쪽 테이블의 나머지 행 중에서 오른쪽 테이블의 속성값은 NULL로 출력

RIGHT OUTER JOIN 또는 RIGHT JOIN
조건과 일치하는 행과 나머지 행 중에서 오른쪽 테이블의 나머지 모든 행을 출력
오른쪽 테이블의 나머지 행 중에서 왼쪽 테이블의 속성값은 NULL로 출력

FULL OUTER JOIN 또는 FULL JOIN
두 테이블을 모두 합치고 중복을 제거
LEFT JOIN과 RIGHT JOIN을 수행한 후 UNION을 수행한 것과 동일 (UNION은 자동으로 중복 제거함 / UNION ALL은 중복 제거 X)
CROSS JOIN
M x N 카테시안곱으로 나타내는 조인

NATURAL JOIN
동일한 이름의 모든 컬럼에 대해 EQUI JOIN을 수행
WHERE, ON, USING 절에서 조건 사용 불가

ANSI 표준과 오라클 문법의 차이


다음 게시글
https://megamaker.tistory.com/374?category=657805
[DB][SQLD][2024] 2-2 SQL 활용 정리
https://megamaker.tistory.com/372 [DB][SQLD][2024] 2-1 SQL 기본 정리https://megamaker.tistory.com/371 [DB][SQLD][2024] 1-2 데이터 모델과 SQL 정리https://megamaker.tistory.com/365 [DB][SQLD][2024] 1-1 데이터 모델링의 이해 정리이
megamaker.tistory.com
'공부 > 데이터베이스' 카테고리의 다른 글
| [DB][SQLD][2024] SQLD 개념 요약 정리 (0) | 2024.08.23 |
|---|---|
| [DB][SQLD][2024] 2-3 관리 구문 정리 (0) | 2024.08.22 |
| [DB][SQLD][2024] 2-2 SQL 활용 정리 (0) | 2024.08.21 |
| [DB][SQLD][2024] 1-2 데이터 모델과 SQL 정리 (0) | 2024.08.18 |
| [DB][SQLD][2024] 1-1 데이터 모델링의 이해 정리 (0) | 2024.08.12 |