AYSTORY

Part2 - Ch1. SQL 기본 본문

SQLD

Part2 - Ch1. SQL 기본

bye0nzn 2025. 7. 28. 15:44

01) 관계형 데이터베이스 개요

  • RDB라고 불리는 관계형 데이터베이스는 말 그대로 관계형 데이터 모델에 기초를 둔 데이터베이스
  • SQL은 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어

02) SELECT 문

FROM - WEHRE- GROUP BY - HABING - SELECT - ORDER BY

 

1. SELECT

  • 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어
  • 컬럼을 따로 명시하지 않고 *를 쓰면 전체 컬럼이 조회됨

2. 산술 연산자

연산자 의미 우선순위
() 괄호로 우선순위 조정 1
* 곱하기 2
/ 나누기
+ 더하기 3
- 빼기
% (SQL Server) 나머지

 
3. 합성 연산자

  • 문자와 문자를 연결할 때 사용하는 연산자
  • ||

03) 함수

  1. 문자 함수
    • CHR(ASCII 코드) - ASCII 코드를 인수로 입력했을 때 매핑되는 문자가 무엇인지 알려주는 함수
    • LOWER(문자열) - 소문자로 변환
    • UPPER(문자열) - 대문자로 변환
    • LTRIM(문자열 [,특정 문자])
      • 특정 문자를 따로 명시해주지 않으면 문자열의 왼쪽 공백을 제거하고, 명시해주었을 경우 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춘다.
      • *[ ] 는 옵션
    • RTRIM(문자열 [,특정 문자]) 
      • 특정 문자를 따로 명시해주지 않으면 문자열의 오른쪽 공백을 제거하고, 명시해주었을 경우 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춘다.
      • *[ ] 는 옵션
    • TRIM([위치] [특정 문자] [FROM] 문자열)
      • 옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거하고, 그렇지 않을 경우 문자열을 위치로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춘다.
      • LTRIM, RTRIM과 달리, 특정 문자는 한 글자만 지정 가능.
      • *[ ] 는 옵션
    • SUBSTR(문자열, 시작점 [,길이])
      • 문자열의 원하는 부분만 잘라서 반환
      • 길이를 명시하지 않으면 문자열의 시작점부터 문자열의 끝까지 반환
      • *[ ] 는 옵션
    • LENGTH(문자열)
      • 문자열의 길이 반환
    • REPLACE(문자열, 변경 전 문자열 [,변경 후 문자열])
      • 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔줌
      • 변경 후 문자열을 명시해주지 않으면 문자열에서 변경 전 문자열 제거
      • *[ ] 는 옵션
    • LPAD(문자열, 길이, 문자)
      • 문자열이 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채움
  2. 숫자 함수
    • ABS(수)
      • 수의 절댓값 반환
    • SIGN(수)
      • 수의 부호 반환
      • 양수이며 1, 음수미녀 -1, 0이면 0 반환
    • ROUND(수 [,자릿수])
      • 수를 지정된 소수점 자릿수까지 반올림하여 반환
      • 자릿수를 명시하지 않으면 기본값은 0이며 반올림된 정수로 반환하고 자릿수가 음수일 경우 지정된 정수부를 반올림하여 반환
      • *[ ] 는 옵션
    •  TRUNC(수 [,자릿수])
      • 수를 지정된 소수점 자릿수까지 버림하여 반환
      • 자릿수 명시하지 않았을 경우 기본값은 0이며 버림된 정수로 반환하고 자릿수가 음수일 경우 지정된 정수부에서 버림하여 반환
      • *[ ] 는 옵션
    • CEIL(수)
      • 소수점 이하의 수를 올림한 정수 반환
    • FLOOR(수)
      • 소수점 이하의 수를 내림한 정수 반환
    • MOD(수1, 수2)
      • 수1을 수2로 나눈 나머지 반환
      • 단, 수2가 0일 경우 수1 반환
      • 수1, 수2가 모두 음수이면 나머지도 그대로 음수값
  3. 날짜 함수
    • SYSDATE
      • 현재의 연, 월, 일, 시, 분, 초를 반환
    • EXTRACT(특정 단위 FROM 날짜 데이터)
      • 날짜 데이터에서 특정 단위(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)만을 출력해서 반환
    • ADD_MONTHS(날짜 데이터, 특정 개월 수)
      • 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환
      • 날짜의 이전 달이나 다음 달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자가 반환됨.
  4. 변환 함수
    • 명시적 형변환과 암시적 형변환
      • 데이터베이스에서 데이터 유형에 대한 형변환을 할 수 있는 방법
      • 명시적 형변환: 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄
      • 암시적 형변환: 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함
    • 명시적 형변환에 쓰이는 함수
      • TO_NUMBER(문자열)
        • 문자열을 숫자형으로 변환
      • TO_CHAR(수 or 날짜 [, 포맷])
        • 수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환
      • TO_DATE(문자열, 포맷)
        • 포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수
  5. NULL 관련 함수
    • NVL(인수1, 인수2)
      • 인수1의 값이 NULL일 경우 인수2를 반환하고, NULL이 아닐 경우 인수1을 반환
      • NVL(NULL,NULL) 함수의 결과는 NULL
    • NULLIF(인수1, 인수2)
      • 인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환
    • COALESCE(인수1, 인수2, 인수3, ...)
      • NULL이 아닌 최초의 인수를 반환
    • NVL2(인수1, 인수2, 인수3)
      • 인수1이 NULL이 아닌 경우 인수2를 반환하고 NULL인 경우 인수3을 반환
    • NULL과의 연산 결과(COL = NULL)는 False
  6. CASE
    • 함수와 성격이 같기는 하지만 표현 방식이 함수라기보다는 구문에 가깝다고 할 수 있음.
    • 문장으로는 '~이면 ~이고, ~이면 ~이다' 식으로 표현되는 구문
    • 필요에 따라 각 CASE를 여러 개로 늘릴 수도 있음. 
    • 같은 기능을 하는 함수) Oracle의 DECODE 함수
Tip.
CASE 문에서는 ELSE 뒤의 값이 DEFAULT 값이 되고 별도의 ELSE가 없을 경우 NULL 값이 DEFAULT 값이 됨.

 

04) WHERE 절

  • INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문
  • 논리 연산자는 SQL에 명시된 순서와는 관계 없이 () - NOT - AND - OR 순으로 처리
  1. 부정 비교 연산자
    • 같지 않음
      • !=
      • ^=
      • <>
      • not 컬럼명 =
    • 크지 않음
      • not 컬럼명 >
  2. SQL 연산자
    • BETWEEN A AND B : A와 B 사이
    • LIKE '비교 문자열'
      • 의미: 비교 문자열을 포함
      • 예시
        • where col like '방탄%' : %는 문자열을 의미
        • where col like '방_소%' : '_'는 하나의 문자를 의미
        • where col like '%#%%' escape '#' : '_' 혹은 '%' 기호가 포함된 문자 검색 시 ESCAPE 지정
    • IN (LIST): LIST 중 하나와 일치
    • IS NULL: NULL 값
  3. 부정 SQL 연산자
    • NOT BETWEEN A AND B : A와 B의 사이가 아님
    • NOT IN (LIST) : LIST 중 일치하는 것이 없음
    • IS NOT NULL : NULL 값이 아님
      • NULL이 아닌 행을 조회할 때는 IS NOT NULL 구문을 사용

 

05) GROUP BY, HAVING 절

1. GROUP BY

  • 데이터를 그룹별로 묶을 수 있도록 해주는 절
  • GROUP 뒤에 수단의 전치사인 BY가 붙었기 때문에 GROUP BY 뒤에는 그룹핑의 기준이 되는 컬럼이 옴.
  • 컬럼은 하나가 될 수도, 그 이상이 될 수도.

2. 집계 함수

  • 데이터를 그룹별로 나누면 그룹별로 집계 데이터를 도출하는 것이 가능해짐.
COUNT(*) 전체 Row를 Count하여 반환
COUNT(컬럼) 컬럼값이 NULL인 Row를 제외하고 Count하여 반환
COUNT(DISTINCT 컬럼) 컬럼값이 NULL이 아닌 Row에서 중복을 제거한 Count 반환
SUM(컬럼) 합계
AVG(컬럼) 평균
MIN(컬럼) 최솟값
MAX(컬럼) 최댓값

 
3. HAVING

  • 주로 데이터를 그룹핑한 후 특정 그룹을 골라낼 때 사용
  • 논리적으로 SELECT 절 전에 수행되기 때문에 SELECT 절에 명시되지 않은 집계 함수로도 조건을 부여할 수 있음.

06) ORDER BY 절

1. ORDER BY

  • SELECT 문에서 논리적으로 맨 마지막에 수행
  • SELECT한 데이터 정렬
    • ASC: 오름차순
    • DESC: 내림차순
  • 예제
    • ORDER BY GRADE DESC, NAME DESC;
Oracle의 경우, NULL 값을 최댓값으로 취급
  • ORDER BY 절에 SELECT 절에 기술된 ALIAS 사용 가능

 

07) JOIN

1. EQUI JOIN

  • Equal(=) 조건으로 JOIN하는 것으로 가장 흔히 볼 수 있는 JOIN의 방식

2. Non EQUI JOIN

  • Equal(=) 조건이 아닌 다른 조건(BETWEEN, >, >=, <, <=)으로 JOIN하는 방식

3. 3개 이상 TABLE JOIN

  • JOIN 쿼리를 좀 더 확장해서 3개 이상의 테이블을 JOIN
EQUI JOIN과 Non EQUI JOIN은 하나의 쿼리에서 같이 사용X

 
4. OUTER JOIN

  • JOIN 조건에 만족하지 않는 행들도 출력되는 형태

 

08) STANDARD JOIN

1. INNER JOIN

  • JOIN 조건에 충족하는 데이터만 출력
  • JOIN 조건을 ON 절을 사용하여 작성
  • Sample 1 테이블과 Sample 2 테이블이 inner join되었다는 의미
WHERE A.COL1 = B.COL1;

 
2. OUTER JOIN

  • LEFT OUTER JOIN
    • SQL에서 왼쪽에 표기된 테이블의 데이터는 무조건 출력
  • RIGHT OUTER JOIN
    • SQL에서 오른쪽에 표기된 테이블의 데이터는 무조건 출력
  • FULL OUTER JOIN
    • 왼쪽, 오른쪽 테이블의 데이터가 모두 출력
    • LEFT OUTER JOIN과 RIGHT OUTER JOIN의 합집합 (단, 중복값은 제거)

 

  • Oracle 고유의 (+) 연산자는 외부 조인을 표시하는 기호이고,
    • A.col = B.col(+) 형태로 쓰이면 A LEFT OUTER JOIN B 와 동일한 동작
SELECT A.COL1, B.COL1, C.COL1 
 FROM SAMPLE 1 A, SAMPLE2 B, SAMPLE3 C 
WHERE A.COL1 = B.COL(+) 
 AND A.COL1 = C.COL1 (+);

 

3. NATURAL JOIN

  • A 테이블과 B 테이블에서 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN이 되는 방식
  • SQL Server(MSSQL)에서는 지원X
  • 단, SELECT 절에서 USING 절로 정의된 컬럼 앞에는 별도의 ALIAS나 테이블명을 붙이지 않음.
  • ON 절을 쓸 수 X

4. CROSS JOIN

  • A 테이블과 B 테이블 사이에 JOIN 조건이 없는 경우, 조합할 수 있는 모든 경우를 출력
  • Cartesian Product라고도 표현

DISTINCT는 해당 컬럼의 중복 데이터를 제거하여 출력한다.

 

'SQLD' 카테고리의 다른 글

ORACLE과 SQL Server에서의 차이  (2) 2025.08.19
Part2 - Ch3. 관리 구문  (7) 2025.08.04
Part2 - Ch2. SQL 활용  (2) 2025.07.29
Part1 - Ch2. 데이터 모델과 SQL  (4) 2025.07.28
Part1 - Ch1. 데이터 모델링의 이해  (3) 2025.07.24