본문 바로가기

Study/SQLD

[SQLD] SQLD 2과목 SQL 기본 및 활용(1)

데이터베이스(Database)와 DBMS (Database Management System)

- 데이터베이스 : 데이터의 집합

- DBMS : 데이터를 효과적으로 관리하기 위한 시스템 (ORACLE, MYSQL 등)

 

관계형 데이터베이스 구성 요소

- 계정 : 데이터 접근 제한 위한 여러 업무별/시스템별 계정 존재

- 테이블 : DBMS의 DB 안에서 데이터가 저장되는 형식

- 스키마 : 테이블이 어떠한 구성으로 되어있는지, 어떤 정보 가지고 있는지에 대한 기본적인 구조

 

테이블

- 행(로우), 열(컬럼) 갖는 2차원 구조로 구성

- 데이터 입력해 저장하는 최소 단위

- 컬럼은 속성이라고도 부름

 

특징

- 하나의 테이블은 반드시 하나의 유저 (계정) 소유여야 함

- 테이블간 관계는 일대일 (1:1), 일대다 (1:N), 다대다 (N:M) 관계 가질 수 있음

- 테이블명은 중복될 수 없지만, 소유자 다른 경우 같은 이름으로 생성 가능

- 행 단위로 데이터 입력, 삭제되며 수정은 값 단위로 가능


SQL (Structured Query Language)

- 관계형 데이터베이스에서 데이터 조회 및 조작, DBMS 시스템 관리 기능 명령 언어

- 데이터 정의 (DDL), 데이터 조작 (DML), 데이터 제어 언어 (DCL) 등

- SQL 문법은 대, 소문자 구분 X


관계형 데이터베이스 특징

- 데이터 분류, 정렬, 탐색 속도 빠름

- 신뢰성 높고, 데이터 무결성 보장

- 기존 작성된 스키마 수정 어려움

- 데이터베이스 부하 분석하는 것 어려움


데이터 무결성 (integrity)

: 데이터 정확성과 일관성 유지하고, 데이터에 결손과 부정합 없음 보증하는 것

 

데이터 무결성 종류

1. 개체 무결성 : 테이블 기본키 구성하는 컬럼 (속성)은 NULL 값이나 중복값 가질 수 X

2. 참조 무결성 : 외래키 값은 NULL 이거나 참조 테이블 기본키 값과 동일해야 함

3. 도메인 무결성 : 주어진 속성 값이 정의된 도메인에 속한 값이어야 함

4. NULL 무결성 : 특정 속성에 대해 NULL 허용하지 않는 특징

5. 고유 무결성 : 특정 속성에 대해 값 중복되지 않는 특징

6. 키 무결성 : 하나의 릴레이션 (관계)에는 적어도 하나의 키 존재해야 함

(테이블이 서로 관계 가질 경우 반드시 하나 이상 조인키 가짐)


ERD (Entity Relationship Diagram)

- 테이블 간 서로 상관 관계 그림을 표현한 것

- 구성요소에는 엔터티 (Entity), 관계 (Relationship), 속성 (Attribute) 있음


SQL 종류

구분 종류
DDL
(Data Definitioin Language)
CREATE, ALTER, DROP, TRUNCATE
DML
(Data Manipulation Language)
INSERT, DELETE, UPDATE, MERGE
DCL
(Data Control Language)
GRANT, REVOKE
TCL
(Transaction Control Language)
COMMIT, ROLLBACK
DQL
(Data Query Language)
SELECT

 

 

 


SELECT문 구조

- 6개 절로 구성

- 각 절은 순서대로 작성해야 함

- 내부 파싱 (문법적 해석) 순서는 나열된 순서와 다름

- FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY 순서대로 실행

 

SELECT * | 컬럼명 | 표현식

FROM 테이블명 또는 뷰명

WHERE 조회 조건

GROUP BY 그룹핑 컬럼명

HAVING 그룹핑 필터링 조건

ORDER BY 정렬 컬럼명


SELECT 절

- SELECT 문장 사용해 불러올 컬럼명, 연산 결과 작성하는 절

- * 사용해 테이블 내 전체 컬럼명 불러올 수 있음

- 원하는 컬럼을 ,로 나열해 작성 가능 (순서대로  출력)

- Alias (별칭) 지정 가능

- 대소문자 구분하지 않아도 인식


컬럼 Alias (별칭)

- 컬럼명 대신 출력할 임시 이름 지정 (SELECT절에서만 정의 가능, 원본 컬럼명 변경되지 X)

- 컬럼명 뒤에 AS와 함께 컬럼 별칭 전달 (AS 생략 가능)

 

특징 및 주의사항

- SELECT 문보다 늦게 수행되는 ORDER BY절에서만 컬럼 별칭 사용 가능 (그 외 절에서 사용시 에러 발생)

- 한글 사용 가능

- 이미 존재하는 예약어는 별칭으로 사용 X

 

별칭에 반드시 쌍따옴표 붙여야 하는 경우

- 별칭에 공백 포함

- 별칭에 특수문자 포함 ("_" 제외)

- 별칭 그대로 전달할 경우 (입력한 대소 그대로 출력하고자 할 때)


FROM절

- 테이블 불러올 테이블명 또는 뷰명 전달

- 테이블 여러 개 전달 가능 (컴마로 구분) -> 조인 조건 없이 테이블명만 나열 시 카티시안 곱 발생

- 테이블 별칭 선언 가능 (ORACLE은 AS 사용 불가, SQL Server는 사용/생략가능)

(테이블 별칭 선언 시 컬럼 구분자는 테이블 별칭으로만 전달 (테이블명으로 사용 시 에러 발생))

- ORACLE에서는 FROM절 생략 불가 (의미상 필요 없는 경우 DUAL 테이블 선언)

- SQL Server에서는 FROM절 필요 없을 경우 생략 가능

 

 


함수

- input value와 output value 관계 정의한 객체

- from절 제외한 모든 절에서 사용 가능

 

함수 기능

- 데이터 계산 수행

- 개별 데이터 항목 수정

- 표시할 날짜 및 숫자 형식 지정

- 열 데이터 유형 (data type) 변환


함수 종류 (입력값 수에 따라)

- 단일행 함수 : input과 output 관계가 1:1

- 복수행 함수 : 여러 건 데이터 동시에 입력 받아 하나의 요약값 리턴 (그룹함수 또는 집계함수라고도 함)


입/출력값 타입에 따른 함수 분류

1. 문자형 함수

- 문자열 결합, 추출, 삭제 등 수행

- 단일행 함수 형태

- output은 대부분 문자값 (LENGTH, INSTR 제외)

함수명 함수기능 사용예시 출력 기타설명
LOWER(대상) 문자열을 소문자로 LOWER('ABC') abc  
UPPER(대상) 문자열을 대문자로 UPPER('abc') ABC  
SUBSTR(대상,m,n) 문자열 중 m위치에서
n 개의 문자열 추출
SUBSTR('ABCDE',2,3) BCD  
SUBSTR('ABCDE',2) BCDE n 생략 시 끝까지 추출
INSTR
(대상,찾을문자열,m.n)
대상에서 찾을 문자열
위치 반환

(m위치에서 시작,n번째 발견된 문자열 위치)
INSTR('A#B#C#','#') 2 m과 n 생략 시 1로 해석
INSTR
('A#B#C#','#',3,2)
6 3번째부터 두번째 발견된 # 위치
INSTR
('A#B#C#','#',-3,2)
2 뒤에서 3번째 #에서 왼쪽으로
스캔해 두 번째로 발견된 # 위치 리턴
LTRIM
(대상,삭제문자열)
문자열 중 특정 문자열을 왼쪽에서 삭제 LTRIM('AABABAA','A') BABAA 삭제문자열 생략 시 공백 삭제
RTRIM
(대상,삭제문자열)
문자열 중 특정 문자열을 오른쪽에서 삭제 RTRIM('AABABAA','A') AABAB 삭제문자열 생략 시 공백 삭제
TRIM(대상) 문자열 중 특정 문자열을 양쪽에서 삭제 TRIM(' ABCDE ') ABCDE ORACLE TRIM은 공백만 삭제 가능
LPAD(대상,n,문자열) 대상 왼쪽에 문자열 추가해 총 n의 길이 리턴 LPAD('ABC',5,'*') **ABC  
RPAD(대상,n,문자열) 대상 오른쪽에 문자열 추가해 총 n개 길이 리턴 RPAD('ABC',5,'*') ABC**  
CONCAT(대상1,대상2) 문자열 결합 CONCAT('A','B') AB 두 개 인수만 전달 가능
LENGTH(대상) 문자열 길이 LENGTH('ABCDE') 5  
REPLACE
(대상,찾을문자열
,바꿀문자열)
문자열 치환 및 삭제 REPLACE('ABBA',AB','ab') abAB 세번째 인수 생략하거나 빈문자열
전달 시 찾을 문자열 삭제 가능 
TRANSLATE
(대상,찾을문자열
,바꿀문자열)
글자를 1대1로 치환 TRANSLATE('ABBA','AB','ab') abba 매칭되는 글자끼리 치환 (A는 a로,
B는 b로 각각) 바꿀 문자열생략 불가, 빈문자열 전달 시 null 리턴

 

2. 숫자형 함수

- 숫자 입력하면 숫자 값 반환

- 단일행 함수 형태 숫자함수

함수명 함수기능 사용예시 출력 기타설명
ABS(숫자) 절대값 반환 ABS(-1.5) 1.5  
ROUND
(숫자,자리수)
소수점 특정 자리에서 반올림 ROUND(123.456,2) 123.46 소수점 둘째자리로 반올림
ROUND(123.456,-2) 100 자리수가 음수면 정수자리에서 반올림
(백의 자리에서 반올림 진행)
TRUNC
(숫자,자리수)
소수점 특정 자리에서 버림 TRUNC(123.456,2) 123.45  
SIGN(숫자) 숫자가 양수면 1 음수면 -1 0이면 0반환 SIGN(100) 1  
FLOOR(숫자) 작거나 같은 최대 정수 리턴 FLOOR(3.5) 3  
CEIL(숫자) 크거나 같은 최소 정수 리턴 CEIL(3.5) 4  
MOD
(숫자1,숫자2)
숫자1을 숫자2로 나눠 나머지 반환 MOD(7,2) 1  
POWER(m,n) m의 n 거듭제곱 POWER(2,4) 16  
SQRT(숫자) 루트가 리턴 SQRT(16) 4  

 

3. 날짜형 함수

함수명 함수기능 사용예시 출력 기타설명
SYSDATE 현재 날짜와 시간
리턴
SYSDATE 2025/05/16
10:45:30
날짜출력형식에 따라
다르게 출력

(날짜만 출력 가능)
CURRENT_DATE 현재 날짜 리턴 CURRENT_DATE 2025/05/16 날짜출력형식에 따라
다르게 출력

(시간 출력될 수 있음)
CURRENT_TIMESTAMP 현재 타임스탬프 리턴 CURRENT_TIMESTAMP 2025/05/16
10:47:20 +09:00
 
ADD_MONTHS
(날짜,n)
날짜에서 n개월 후
날짜 리턴
ADD_MONTHS
(SYSDATE, 3)
2025/08/16
10:50:15
n이 음수인 경우 n개월 이전 날짜 리턴
MONTHS_BETWEEN
(날짜1,날짜2)
날짜1과 날짜2의
개월 수 리턴
MONTHS_BETWEEN
(SYSDATE,HIREDATE)
3.7234 날짜1 < 날짜2로 전달 시 음수 리턴
LAST_DAY(날짜,n) 주어진 월 마지막
날짜 리턴
LAST_DAY(SYSDATE) 2025/05/31
10:52:35
 
NEXT_DAY(날짜,n) 주어진 날짜 이후 지정된 요일 첫 번째
날짜 리턴
NEXT_DAY(SYSDATE,1) 2025/05/11
10:54:40
1 : 일요일, 2 : 월요일, ~ , 7 : 토요일
ROUND(날짜,자리수) 날짜 반올림 ROUND
(SYSDATE,'MONTH')
2025/06/01 0:00 월 이전자리에서 반올림
TRUNC(날짜, 자리수) 날짜 버림 TRUNC
(SYSDATE,'MONTH')
2025/05/01 0:00 월 이전자리에서 버림

 

4. 변환함수

- 값 데이터 타입 변환

- 문자를 숫자로, 숫자를 문자로, 날짜를 문자로 변경

함수명 함수기능 사용예시 출력 기타설명
TO_NUMBER(문자) 숫자 타입으로 변경해 리턴 TO_NUMBER('100') 100 문자100을 숫자100으로 리턴
TO_CHAR(대상,포맷) 1) 날짜 포맷 변경 TO_CHAR(SYSDATE, 'MM/DD-YYYY') 05/16-2025 날짜 형식 변경 (리턴은 문자타입)
2) 숫자 포맷 변경 TO_CHAR
(9000,'9,999')
9,000 천단위 구분기호 생성
(리턴은 문자타입)
TO_CHAR
(9000,'09999')
09000 총 5자리로 리턴 (앞 자리수 0으로)
FORMAT(날짜,포맷) 날짜 포맷 변경 FORMAT
(GETDATE(),'YYYY')
2025 SQL Server 함수
CAST
(대상 AS 데이터타입)
대상을 주어진
데이터타입으로 변환
CAST('100' AS int) 100 문자100을 숫자100으로 리턴

 

5. 그룹함수

- 다중행 함수

- 여러 값이 input값으로 들어가서 하나의 요약된 값으로 리턴

- GROUP BY와 함께 자주 사용

함수명 함수기능 사용예시 출력 기타설명
COUNT(대상) 행의 수 리턴 SELECT COUNT(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
SUM(대상) 총 합 리턴 SELECT SUM(SAL) FROM EMP;
AVG(대상) 평균 리턴 SELECT AVG(SAL) FROM EMP;
MIN(대상) 최솟값 리턴 SELECT MIN(SAL) FROM EMP;
MAX(대상) 최댓값 리턴 SELECT MAX(SAL) FROM EMP;
VARIANCE(대상) 분산 리턴 SELECT VARIANCE (SAL) FROM EMP;
STDDEV(대상) 표준편차 리턴 SELECT STDDEV(SAL) FROM EMP;

 

6. 일반함수

함수명 함수기능 사용예시 출력 기타설명
DECODE(대상,값1,리턴1,값2,리턴2,...
,그외리턴)
대상이 값1이면 리턴1, 값2와 같으면 리턴2,...
그외에는 그외 리턴값 리턴
DECODE
(DEPTNO,10,A,B)
A 또는 B 대소비교에 따른
치환 불가

그 외 리턴 생략 시
널 리턴
NVL(대상,치환값) 대상이 널이면 치환값으로 치환해 리턴 NVL(COMM,0) COMM값 또는 0리턴  
NVL2
(대상,치환값1,치환값2)
대상이 널이면 치환값2로 치환, 널이 아니면
치환값1로 치환해 리턴
NVL2(COMM
,COMM*1.1,0)
COMM*1.1값 또는 0리턴 COMM값이 널이면 0, 널 아니면 COMM*1.1 리턴
COALESCE(대상1
,대상2,...,그외리턴)
대상들 중 널이 아닌값 출력 (가장 첫번째부터)
대상3,..., 모두가 널이면
그외 리턴값이 리턴됨
COALESCE
(NULL,100)
100 그외 리턴값 생략 시
널 리턴
ISNULL(대상,치환값) 대상이 널이면 치환값이
리턴
ISNULL(NULL,100) 100 SQL Server 함수
NULLIF(대상1,대상2) 두 값이 같으면 널 리턴,
다르면 대상1 리턴
NULLIF(10,20) 10  
CASE문 조건별 치환 및 연산 수행      

 

 


WHERE절

- 원하는 조건이 맞는 데이터만 조회하고 싶을 경우 사용

- 여러 조건 동시 전달 가능 (AND와 OR로 조건 연결)

- NULL 조회 시 IS NULL/IS NOT NULL 연산자 사용 (연산자로 조회 불가)

- 연산자 사용해 다양한 표현 가능

- 문자나 날짜 상수 표현 시 반드시 홑따옴표 사용 (다른 절에서도 동일 적용)

- ORACLE은 문자 상수의 경우 대소문자 구분

- MSSQL은 기본적으로 문자상수 대소문자 구분 X

연산자 종류 설명
= 같은 조건 검색
!=, <> 같지 않은 조건 검색
> 큰 조건 검색
>= 크거나 같은 조건 검색
< 작은 조건 검색
<= 작거나 같은 조건 검색
BETWEEN a AND b A와 B 사이에 있는 범위 값 모두 검색
IN(a, b, c) A이거나 B이거나 C인 조건 검색
LIKE 특정 패턴 가지고 있는 조건 검색
Is Null / Is Not Null Null 값 검색 / Null 아닌 값 검색
A AND B A 조건과 B 조건을 모두 만족하는 값만 검색
A OR B A 조건이나 B 조건 중 한가지라도 만족하는 값 검색
NOT A A 아닌 모든 조건 검색

 

LIKE 연산자

1. % : 자리수 제한 없는 모든이라는 의미

2. _ : _ 하나 당 한 자리수 의미

 

ex)

ENAME LIKE 'S%' : 이름이 S로 시작

ENAME LIKE '%S%' : 이름에 S를 포함

ENAME LIKE '%S' : 이름이 S로 끝남

ENAME LIKE '_S%' : 이름 두 번째 글자가 S

ENAME LIKE '__S__' : 이름 가운데 글자가 S이며 이름 길이 5글자