[SQLD 총정리] 2과목 1장 SQL 기본

2024. 8. 22. 14:54·🏆 자격증/SQLD
728x90

관계형 데이터베이스 개요

관계형 데이터베이스(RDB; Relational Database)

- E.F Codd 박사의 정규화 이론에 따라 데이터의 일관성 문제를 근본적으로 해결한 데이터베이스 시스템

- 2차원 구조의 행과 열로 구성된 테이블

- SQL(Structured Query Language)이라는 공통의 질의언어를 정의해 데이터 조회, 가공, 추출이 가능

 

릴레이션 = 테이블 = 엔터티 

레코드 = 튜플 = 행 

필드 = 속성 = 열

칼럼 헤더 = 스키마 


SELECT문 (조회 쿼리)

: 데이터를 조회하는 명령어로, WHERE절을 통해 특정 조건의 열만 조회할 수 있다. 

- 테이블에 대한 별명(Alias) 부여 가능 

 

* FROM 테이블1, 테이블2, 테이블3; -> 자연적인 JOIN이 일어난다. 


TRIM 

: 문자열의 양 끝단에서 공백 또는 지정된 문자열을 제거하고 반환한다. 

TRIM([[arg1] [arg2] FROM] arg3)
# arg1: LEADING / TRAILING / BOTH, 생략될 경우 기본값은 BOTH이다. 
# arg2: 제거할 특정 문자 또는 문자열. arg2가 생략되면 공백을 제거한다. 
# arg3: 문자열 값 또는 문자열형의 칼럼

 

ex)

SELECT TRIM('  GOOD  ') FROM DUAL;

# 문장의 앞, 뒤에서 공백 제거

 

LEADING

SELECT TRIM(LEADING '가' FROM '가나다라') FROM DUAL;

# '가나다라'의 앞에서 '가' 제거

 

TRAILING

SELECT TRIM(TRAILING '라' FROM '가나다라') FROM DUAL;

# '가나다라'의 뒤에서 '라' 제거

 

BOTH

SELECT TRIM(BOTH '가' FROM '가나다라가') FROM DUAL;

# '가나다라가'의 앞, 뒤에서 '가' 제거

 

* 코드의 길이를 줄일 수 있다. 

LTRIM == TRIM LEADING

RTRIM == TRIM TRAILING

 

SUBSTR : 문자열 추출

REPLACE: 문자열 대체

LENGTH: 문자열 길이

LOWER, UPPER: 소문자 변환, 대문자 변환


함수 (NULL 관련 함수)

NVL (빈출)

: 첫 번째 인자가 Null이 아니면 첫 번째 인자를 그대로 반환하고 Null이면 두 번째 인자를 반환

( SQL Server에서는 NVL 대신 ISNULL을 사용)

NVL(arg1, arg2)
# arg1 : 칼럼 또는 표현식
# arg2 : 칼럼 또는 표현식. 단, arg1과 같은 데이터 타입을 가져야 한다.

 

ex)

SELECT EMPNO, ENAME, NVL(COMM, 0) AS COMM FROM EMP; 

# COMM 컬럼의 값이 NULL인 것을 0으로 치환하여 반환한다.

 

 

NULLIF

: 입력된 두 인자가 같으면 Null을 반환하고 다르면 첫 번째 인자를 반환

NULLIF(arg1, arg2)
# arg1 : 칼럼 또는 표현식
# arg2 : 칼럼 또는 표현식. 단, arg1과 같은 데이터 타입을 가져야 한다.

 

ex)

SELECT EMPNO, ENAME, MGR, NULLIF(MGR, 7698) AS NM
FROM EMP;

# MGR 칼럼의 값이 7698인 것을 NULL로 치환하여 반환

 

 

COALESCE (오라클 단어 - 합체하다. )

: 입력된 인자를 순서대로 평가해 Null이 아닌 첫 번째 인자를 반환

COALESCE(arg1 [[, arg2] ...])
# arg1 : 칼럼 또는 표현식
# arg2 : 칼럼 또는 표현식. 단, arg1과 같은 데이터 타입을 가져야 한다.

 

ex)

SELECT EMPNO, COALESCE(HOURLY_WAGE, SALARY, COMMISSION)
AS TOTAL_SALARY FROM WAGES;

# HOURLY_WAGE, SALARY, COMMISSION 칼럼 순으로 읽어서 NULL이 아닌 첫 번째 값을 반환

[SQLD 모든 것] 13. NULL 관련 함수 NVL NULLIF COALESCE ISNULL 아이리포

 


WHERE절

: 특정 조건을 만족하는 행만을 대상으로 연산을 수행

- SELECT, UPDATE, DELETE에 사용 가능하나 INSERT에는 사용 불가

- FROM절을 먼저 수행하므로 FROM절에서 정의한 테이블에 대한 별명(Alias)은 사용할 수 있으나,

SELECT절에서 정의한 칼럼에 대한 별명은 사용할 수 없다. 

SELECT 칼럼1 [[, 칼럼2]...]
FROM 테이블1 [[, 테이블2]...]
WHERE 조건식;

 

ex)

# SELECT절 - EMP 테이블에서 DEPTNO가 30인 모든 행을 조회
SELECT *
FROM EMP
WHERE DEPTNO = 30;

# UPDATE - DEPTNO가 30인 행에 대해서 JOB 칼럼의 값을 'SALESMAN'으로 변경한다. 
UPDATE EMP SET JOB = 'SALESMAN'
WHERE DEPTNO = 30;

# DELETE - COMM 칼럼의 값이 Null인 행을 삭제한다. 
DELETE FROM EMP
WHERE COMM IS NULL;

 

* 주의 * WHERE절에서 NULL과의 동등/부정 비교 

: IS NULL, IS NOT NULL만 사용 가능하다. 

(칼럼 = NULL, 칼럼 != NULL 등 비교연산자를 이용한 조건식은 제대로 동작하지 않는다. )

 


GROUP BY절

: 특정 값을 기준으로 데이터를 그룹핑할 때 사용 

SELECT DEPTNO, SUM(SAL) AS SALS
FROM EMP
GROUP BY DEPTNO; 

# EMP 테이블에서 DEPTNO로 그룹핑한 후, DEPTNO별 SAL의 합계를 조회

 

 

집계함수

: GROUP BY절로 그룹핑한 후에는 해당 그룹에 대해 집계함수를 사용하여 개수, 합, 평균 등을 계산

 

- 집계함수는 그룹을 대상으로 연산을 수행하고, GROUP BY절 없이 집계함수를 사용하면 전체 행을 하나의 그룹으로 간주하고 연산 수행

함수 설명
COUNT 입력된 칼럼에서 값이 Null인 행을 제외한 행의 개수를 반환한다.
SUM 입력된 칼럼의 합을 반환한다. 
AVG 입력된 칼럼의 평균을 반환한다. 
MIN 입력된 칼럼의 최솟값을 반환한다. 
MAX 입력된 칼럼의 최댓값을 반환한다. 

 

* 칼럼명 앞에 DISTINCT를 붙이면 칼럼값의 중복을 제거하므로, 

집계함수의 인자로 입력되는 칼럼명에 DISTINCT를 사용하면 해당 그룹에서 첫 번재 행에 대해서만 연산을 수행

 

- DISTINCT : 중복 X, 유일한 것을 1번만 갖는다. 

 

HAVING절

: GROUP BY 연산이 끝난 결과에 대해서 HAVING절의 조건을 만족하는 그룹만 추출

- GROUP BY 결과를 필터링 (WHERE절은 GROUP BY보다 먼저 실행된다. 먼저 필터링) 

 

GROUP BY 연산 부하가 높다. -> WHERE절로 사전에 조건을 필터링한다. 

SELECT ID FROM TBL
GROUP BY ID
HAVING COUNT(*) = 2;

# TBL 테이블에서 ID로 그룹핑한 후, ID별로 그룹핑한 개수가 2인 ID를 조회

 


표준 조인

 

JOIN

: 두 개의 테이블을 하나로 병합하는 연산 / 두 개의 테이블의 스키마가 다르다. (칼럼 구성이 다르다.)

 

* UNION: 스키마가 동일한 두 개의 테이블을 합집합으로 병합하는 연산

 

EQUI JOIN

- 등식을 조건으로 사용할 때 발생하는 조인

- 칼럼 값이 정확하게 일치할 때 성립하는 것으로 WHERE절의 조건이 등식인 경우 발생

 

Non EQUI JOIN

- 등식이 아닌 부등식(범위: BETWEEN, >, <, >=, <=)을 사용해 범위를 나타낸 조건일 때 발생

 

INNER JOIN

: 교집합의 개념으로 기준이 되는 키에 따른 칼럼값이 존재하는 것만 병합

 

SELECT 
FROM 테이블명1 INNER JOIN 테이블명2 ON 테이블명1.칼럼 = 테이블명2.칼럼; 

# ON : 테이블 병합 시 기준키(조건)을 정하는 절

 

OUTER JOIN

: 합집합의 개념으로, 기준이 되는 키에 따른 칼럼값이 존재하지 않더라도(NULL) 모든 튜플을 병합

 

* LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 포함시키면서 조인 


* RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 포함시키면서 조인

 

* FULL OUTER JOIN: 왼쪽 테이블의 모든 행과, 오른쪽 테이블의 모든 행을 포함하는 조인 

 

 

* Oracle에서의 OUTER JOIN 

FROM T1 T2 (+) # OUTER JOIN 의미

NATURAL JOIN

: 조인의 대상이 되는 두 테이블에서 같은 이름의 칼럼에 대해서는 동일한 칼럼값을 가지는 행만 병합

- ON 절이 필요 없음 

SELECT * 
FROM table1 NATURAL JOIN table2;

# 같은 이름의 칼럼은 같은 값을 가지는 튜플만 SELECT 한다.

 

CROSS JOIN (카테시안 곱)

: 왼쪽 테이블의 각 행에 대한 오른쪽 테이블 모든 행의 대응을 조합하여 결과를 출력 

- 왼쪽 테이블(M행), 오른쪽 테이블(N행) => M x N 행

# 1
SELECT 테이블1.칼럼, 테이블2.칼럼
FROM 테이블1, 테이블 2;

# 2
SELECT 테이블1.칼럼, 테이블2.칼럼
FEOM 테이블1 CROSS JOIN 테이블2;

References

[SQLD 모든 것] 아이리포

반응형

'🏆 자격증 > SQLD' 카테고리의 다른 글

[SQLD 총정리] 2과목 3장 관리 구문  (0) 2024.08.22
[SQLD 총정리] 2과목 2장 SQL 활용  (0) 2024.08.22
[과목 2] 1장 SQL 기본  (0) 2024.08.19
[과목 1] 2장 데이터 모델과 성능  (0) 2024.08.07
[과목 1] 1장 데이터 모델링의 이해  (0) 2024.08.06
'🏆 자격증/SQLD' 카테고리의 다른 글
  • [SQLD 총정리] 2과목 3장 관리 구문
  • [SQLD 총정리] 2과목 2장 SQL 활용
  • [과목 2] 1장 SQL 기본
  • [과목 1] 2장 데이터 모델과 성능
zo0oz
zo0oz
꾸준함 기르기
  • zo0oz
    우당탕탕굴러가는하루
    zo0oz
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 🏠 Home
    • 📑 Tag
    • Github
    • 분류 전체보기 (295)
      • 📃 취준 회고록 (0)
        • 2024 하반기 (0)
      • 📅 매일매일 CS (2)
      • 🚩 Coding Test (203)
        • Baekjoon (94)
        • Programmers (43)
        • Code Tree (34)
        • SWEA (19)
        • HackerRank (2)
        • SQL (8)
      • 🇱 Languages (4)
        • Python (4)
      • 🇫 Framework (2)
        • fastAPI (2)
      • 🤖 AI (9)
        • LLM (1)
        • Computer Vision (3)
      • 📈 Data-Science (4)
        • Pandas (4)
      • 🛠️ 형상관리 (6)
        • Git (6)
      • 💥 Projects (8)
        • 개인실습 (7)
      • 🇰 Kakaotech Bootcamp (17)
        • 이론 (9)
        • 실습 (5)
      • 🇳 Naver BoostCourse (9)
        • 파이썬으로 시작하는 데이터 사이언스 (6)
      • 🏆 자격증 (25)
        • 정보처리기사 (10)
        • ADsP (1)
        • SQLD (13)
        • OPIc (0)
      • 🔎 etc (1)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
zo0oz
[SQLD 총정리] 2과목 1장 SQL 기본
상단으로

티스토리툴바