오늘의 작성 내용은 관계형 데이터베이스가 무엇인지 간단하게 설명하는 것을 시작으로 SQL의 기본적인 문법인 SELECT절에 관한 설명을 작성하겠습니다.
1) 데이터란 무엇인가?
- 데이터는 컴퓨터로 작업을 수행할 때 처리 대상이 되는 것을 의미한다.(이미지, 음성, 텍스트, 등)
- 현실 세계에서 측정되거나 수집된 사실이나 어떤 값
2) 데이터베이스란 무엇인가?
- 데이터베이스란 앞서 말한 데이터를 효과적으로 가공하여 유용한 정보를 얻기 위해 고안된 방법이다.
- 데이터베이스는 데이터를 일정한 체계에 따라 통합하여 디스크나 메모리에 저장한 것이다.
- 데이터의 독립성, 중복 저장 최소화, 통합 처리, 자체 관리 등의 이점이 있다
- 거의 모든 애플리케이션은 데이터베이스를 사용하여 데이터의 관리 및 처리를 진행한다. (모든 애플리케이션X)
- 데이터베이스의 구축 및 관리를 돕는 프로그램을 'DBMS' 또는 '데이터베이스 관리 시스템'이라고 부른다
3) 관계형 데이터베이스란?
- 관계형 데이터베이스는 E.F.Codd 박사가 1970년도에 발표한 정규화 이론에 따라 데이터의 일관성 문제를 해결한 데이터베이스이다
- 2차원의 행(Row)과 열(Column)의 테이블(Table)로 구성되어 있다
- SQL이라는 공통된 질의 언어를 정의하여 원하는 정보를 보다 쉽게 조회, 가공, 추출이 가능하다.

1) TABLE = ENTITY = Relation
2) Column = Field = Attribute
3) Row = Record = Tuple = Instance
- SQL은 구조화된 질의언어를 뜻한다
- SQL은 원하는 결과만을 서술하는 언어로 비절차적 언어의 특성을 띄고 있다.
(∴단, PL/SQL, T-SQL의 경우 프로시저, 함수, 트리거 등을 작성하는 문법의 경우 절차적 언어의 특징도 포함하고 있다)
| DDL(Data Definition Language) 데이터 정의 언어 |
- 스키마를 정의하는 명령어 - CREATE, ALTER, DROP, RENAME, TRUNCATE - ROLLBACK 불가능 |
| DML(Data Manipulation Language) 데이터 조작 언어 |
- 테이블의 데이터를 조회, 입력, 수정, 삭제하는 명령어 - 커밋(COMMIT) 이전에 롤백(ROLLBACK) 가능 - SELECT, INSERT, UPDATE, DELETE, MERGE |
| DCL(Dato Control Language) 데이터 제어 언어 |
- 사용자 접근 권한을 부여하는 명령어 - GRANT, REVOKE |
| TCL(Transaction Control Language) 트랜잭션 제어 언어 |
- 트랙잭션의 제어를 다루는 명령어 |
| DROP | TRUNCATE | DELETE | |
| 명령어 구분 | DDL | DDL | DML |
| 삭제 범위 | 테이블 자체 | 테이블 내 모든 데이터 | 테이블 내 범위 지정 가능 |
| 로그 여부 | X | X | O |
| 롤백 가능 여부 | X | X | O |
- 데이터를 조회하는 명령어
- WHERE문을 사용하여 특정 조건 조회 가능
SQL의 실행 순서
| 순서 | 작성 순서 | 실행 순서 |
| 1 | SELECT | FROM |
| 2 | FROM | WHERE |
| 3 | WHERE | GROUP BY |
| 4 | GROUP BY | HAVING |
| 5 | HAVING | SELECT |
| 6 | ORDER BY | ORDER BY |
작성 예시
SELECT * FROM [Table_name]
WHERE [Column_name] [연산자]
GROUP BY [Column_name]
HAVING [조건]
ORDER BY [Column_name] desc
| 순서 | 연산자 | 설명 |
| 1 | 산술 연산자(*,/,+,-) | 사칙연산 |
| 2 | 연결 연산자 / 합성 연결자(||) | 문자열 연결 |
| 3 | 비교 연산자(<,>,<=,>=,=) | 크기 비교 |
| 4 | IS NULL/ LIKE / IN | 조건 비교 |
| 5 | BETWEEN | 범위 비교 |
| 6 | NOT 연산자 | 논리 부정 |
| 7 | AND 연산자 | 논리 곱 |
| 8 | OR 연산자 | 논리 합 |
1. 산술연산자
| 연산자 | 설명 | 연산 우선순위 |
| () | 우선적으로 계산 할 식을 묶는다 | 1 |
| * | 곱셈을 수행한다 | 2 |
| / | 나눗셈을 실행한다 | |
| %, MOD | 나머지 연산을 실행한다 | |
| + | 덧셈을 실행한다 | 3 |
| - | 뺄셈을 실행한다 |
- 단일행 연산만 가능하다
∴ NULL 과의 연산시 NULL값을 반환한다
∴ 0으로 나눌시 오류가 발생한다
2. 합성연산자 / 연결연산자
'||'는 합성 연산자로 문자열을 연결할 때 사용한다
예시)
예시 TABLE
| 입학년도 | 입학순서 |
| 2017 | 001 |
| 2017 | 002 |
| 2018 | 001 |
| 2018 | 002 |
SELECT '입학년도' || '입학순서' as '학번' FROM FRESHMAN
결과 TABLE
| 학번 |
| 2017001 |
| 2017002 |
| 2018001 |
| 2018002 |
| 종류 | 설명 | 작성법 | |
| 1 | LOWER | 모든 문자열을 소문자로 변경하여 반환한다 | SELECT LOWER(칼럼/문자) FROM 테이블; |
| 2 | UPPER | 모든 문자열을 대문자로 변환하여 반환한다 | SELECT UPPER(칼럼/문자) FROM 테이블; |
| 3 | CHR(CHAR) | ASCII 코드에 해당하는 문자를 반환한다 | SELECT CHR(num) FROM 테이블; |
| 4 | TRIM | 지정된 문자열을 제거하여 반환한다 | SELECT TRIM('문자열') FROM 테이블; |
| 5 | LTRIM | 좌측에서 지정된 문자열을 제거하여 반환한다 | SELECT LTRIM('문자열' FROM 칼럼/문자) FROM 테이블; |
| 6 | RTRIM | 우측에서 지정된 문자열을 제거하여 반환한다 | SELECT RTRIM('문자열' FROM 칼럼/문자) FROM 테이블; |
| 7 | SUBSTR | 지정된 범위의 문자열을 반환한다 | SELECT SUBSTR('칼럼/문자',시작,끝) FROM 테이블; |
| 8 | LENGTH | 문자열의 길이를 반환한다 | SELECT LENGTH(칼럼/문자) FROM 테이블; |
| 9 | REPLACE | 기존 문자열을 지정된 문자열로 변경하여 반환한다 | SELECT REPLACE(칼럼/문자,'기존 문자열','대체할 문자열') FROM 테이블 |
- TRIM 함수의 경우 LEADING / TRAILING / BOTH 를 활용하여 시작 지점을 선택 가능하다
(∴ 시작 지점을 별도로 지정을 안한다면 BOTH 적용)
| 종류 | 설명 | 작성법 | |
| 1 | ABS | 숫자의 절대값을 반환한다 | SELECT ABS(칼럼/숫자형) FROM 테이블; |
| 2 | MOD(%) | 숫자의 나머지값을 반환한다 | SELECT MOD(칼럼/숫자형,나누는 칼럼/숫자형) FROM 테이블; |
| 3 | ROUND | 숫자의 반올림 한 값을 반환한다 | SELECT ROUND(칼럼/숫자형, 반올림 자릿수) FROM 테이블; |
| 4 | TRUNC | 숫자의 버림값을 반환한다 | SELECT TRUNC(칼럼/숫자형, 버림 자릿수) FROM 테이블; |
| 5 | FLOOR | 숫자의 내림값을 반환한다(정수) | SELECT FLOOR(칼럼/숫자형) FROM 테이블; |
| 6 | CEIL | 숫자의 올림값을 반환한다(정수) | SELECT CEIL(칼럼/숫자형) FROM 테이블; |
| 7 | SIGN | 숫자의 음수, 양수 여부를 반환한다 | SELECT SIGN(칼럼/숫자형) FROM 테이블; |
| 종류 | 설명 | 작성법 | |
| 1 | SYSDATE | 오늘 날짜를 날짜형으로 반환한다 | SELECT SYSDATE FROM 테이블; |
| 2 | EXTRACT | 칼럼 혹은 입력된 값에서 DATE, MONTH, YEAR, MINUTE 등을 추출한다. 추출한 값은 숫자형 데이터이다 |
SELECT EXTRACT(DATE from 칼럼/날짜형) FROM 테이블; |
| 종류 | 설명 | 작성법 | |
| 1 | TO_DATE | 문자열을 날짜형 데이터로 변환하여 반환한다 | SELECT TO_DATE(240604,YYMMDD) FROM 테이블; |
| 2 | TO_NUMBER | 문자열을 숫자형 데이터로 변환하여 반환한다 | SELECT TO_NUMBER('240604') FROM 테이블; |
| 3 | TO_CHAR | 숫자열/날짜형 값을 문자열 데이터로 변환하여 반환한다 | SELECT TO_CHAR(240604) FROM 테이블; |
| 종류 | 설명 | 작성법 | |
| 1 | NVL | NULL에 해당하는 값을 변환하여 반환한다 | SELECT NVL(칼럼,변환할 값) FROM 테이블; |
| 2 | NULLIF | 입력된 인자가 같은면 NULL을 반환하고 다르면 철번째 인자를 반환한다 |
SELECT NULLIF(칼럼,비교값) FROM 테이블; |
| 3 | COALESCE | NULL이 아닌 첫번째 인자를 반환한다 | SELECT COALESCE(칼럼,칼럼,,,) FROM 테이블; |
- 특정 값을 가지면 이를 대체하는 새 값을 반환하는 연산
1. CASE 작성법
[형식 1]
SELECT [칼럼명]
CASE [칼럼명]
WHEN [값1] THEN [값A]
WHEN [값2] THEN [값B]
ELSE 값 [값E]
END
FROM TABLE;
[형식 2]
SELECT [칼럼명]
CASE
[칼럼명] <비교연산자> [값1] THEN [값A]
[칼럼명] <비교연산자> [값1] THEN [값A]
ELSE 값 [값E]
END
FROM TABLE;
[형식 3]
SELECT DECODE(칼럼명,값1,값A,값2,값B,값3,값C,,,,) FROM TABLE;
| SQLD 공부 10일 차! (7) | 2025.06.08 |
|---|---|
| SQLD 공부 9일 차! (0) | 2025.06.05 |
| SQLD 공부 6일 차 (2) (3) | 2025.06.02 |
| SQLD 공부 6일 차! (1) | 2025.05.30 |
| SQLD 공부 5일 차 (6) | 2025.05.27 |