Iriton's log

[SQLD] SQL 기본 본문

DataBase/Study

[SQLD] SQL 기본

Iriton 2024. 4. 9. 20:56

*본 포스트는 '유선배 SQL개발자 과외노트' 도서를 참고하여 작성되었습니다.

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

  • 데이터베이스
    • 용도와 목적에 맞는 데이터들끼리 모아서 저장
    • 여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합
  • 관계형 데이터베이스
    • RDB(Relational Database)
    • 모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것으로 시작
    • RDBMS는 이러한 RDB를 관리감독하기 위한 시스템
      • Oracle, SQL Server, MySQL 등등
  • TABLE
    • 세로 열을 Column
    • 가로 행을 Row
    • 관계형 데이터베이스의 기본 단위
    • 일반적으로 데이터베이스는 여러 개의 테이블로 구성
      • 테이블 형태로 데이터 조회/변경
  • SQL(Structured Query Language)
    • DB에서 데이터를 다루기 위해 사용하는 언어

 

02. SELECT 문

  • SELECT 

 

SELECT 컬럼1, 컬럼2, ... FROM 테이블 WHERE 컬럼1='아무개';

 

    • 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어
    • 컬럼을 따로 명시하지 않고 *(asterisk)를 쓰면 전체 컬럼이 조회
    • 조회되는 컬럼의 순서는 테이블 컬럼의 순서와 동일
    • WHERE 절이 별도로 없을 경우에 전체 Row가 조회
    SELECT * FROM 테이블
    
    • 테이블명이나 컬럼명에 별도의 Allias를 붙일 수 있다.
      • 여러 개의 테이블을 JOIN 하거나 서브 쿼리가 있을 때 컬럼명 앞에 테이블 명을 같이 명시해야 하는 경우, 테이블명은 비교적 길기 때문에 짧게 줄여 쓰기 위함.
      • Alias를 붙일 때는 앞에 AS를 넣어도 되고 넣지 않아도 된다.
      • 테이블명에서 Alias를 설정했을 경우 테이블명 대신 Alias를 사용해야 한다.
        • ex) SELECT TAB.COL FROM TAB T WHERE COL=’A’; → 문법 에러 발생
    Alias 적용
  • SELECT BAND.BAND_NAME, BAND_MEMBER.MEMBER_NAME FROM BAND, BAND_MEMBER WHERE BAND.BAND_CODE = BAND_MEMBER.BAND_CODE;
  •  
  • Alias 적용 후
  • SELECT B.BAND_NAME, BM.MEMBER_NAME FROM BAND B, BAND_MEMBER BM WHERE B.BAND_CODE = BM.BAND_CODE;

 

  • 산술 연산자
    • 수학에서 사용하는 사칙연산의 기능을 가진 연산자
    • NUMBER DATE 유형의 데이터와 같이 사용할 수 있다.

        *연산에서 NULL이 포함되어 있으면 결과값은 NULL이 된다.

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

 

03. 함수

(1) 문자 함수

  • CHR(ASCII 코드)
    • ASCII 코드로 인수를 입력했을 때 매핑되는 문자가 무엇인지 알려주는 함수
  • LOWER(문자열)
    • 문자열을 소문자로 변환
  • UPPER(문자열)
    • 문자열을 대문자로 변환
  • LTRIM(문자열 [, 특정문자]) *[ ]는 옵션
    • 특정 문자를 따로 명시해주지 않으면 문자열의 왼쪽 공백을 제거
    • 명시해주었을 경우 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춤
    • SQL Server(MSSQL)의 경우 공백 제거만 가능
  • RTRIM(문자열 [, 특정문자]) *[ ]는 옵션
    • 특정 문자를 따로 명시해주지 않으면 문자열의 오른쪽 공백을 제거
    • 명시해주었을 경우 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춤
    • SQL Server(MSSQL)의 경우 공백 제거만 가능
  • TRIM([위치] [특정 문자] [FROM] 문자열) *[ ]는 옵션
    • 옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거
    • 그렇지 않을 경우 문자열을 위치(LEADING or TRAILING or BOTH)로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춤
    • SQL Server(MSSQL)의 경우 공백 제거만 가능
  • SUBSTR(문자열, 시작점 [, 길이]) *[ ]는 옵션
    • 문자열의 원하는 부분만 잘라서 반환
    • 길이를 명시하지 않았을 경우 문자열의 시작점부터 문자열의 끝까지 반환
    • SQL Server(MSSQL)의 경우 SUBSTRING(문자열)
  • LENGTH(문자열)
    • 문자열의 길이를 반환
  • REPLACE(문자열, 변경 전 문자열 [, 변경 후 문자열]) *[ ]는 옵션
    • 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿈
    • 변경 후 문자열을 명시해 주지 않으면 문자열에서 변경 후 문자열을 제거
  • LPAD(문자열, 길이, 문자)
    • 문자열이 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채우는 함수

 

(2) 숫자 함수

  • ABS(수)
    • 수의 절댓값 반환
  • SIGN(수)
    • 수의 부호를 반환
    • 0이면 0 반환
  • ROUND(수 [, 자릿수])
    • 수를 지정된 소수점 자릿수까지 반올림하여 반환
    • 자릿수를 명시하지 않았을 경우 기본값은 0이며 반올림된 정수로 반환
    • 자릿수가 음수일 경우 지정된 정수부를 반올림하여 반환
  • TRUNC(수 [, 자릿수])
    • 수를 지정된 소수점 자릿수까지 버림하여 반환
    • 자릿수를 명시하지 않았을 경우 기본값은 0이며 버림된 정수로 반환
    • 자릿수가 음수일 경우 지정된 정수부에서 버림하여 반환
  • CEIL(수)
    • 소수점 이하의 수를 올림한 정수를 반환해주는 함수
  • FLOOR(수)
    • 소수점 이하의 수를 버림한 정수를 반환
  • MOD(수1, 수2)
    • 수1을 수2로 나눈 나머지를 반환

 

(3) 날짜 함수

  • SYSDATE
    • 현재의 연 월 일 시 분 초를 반환
    • nls_date_format에 따라서 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을 반환
  • NULLIF(인수1, 인수2)
    • 인수1과 인수2가 같으면 NULL을 반환
    • 같지 않으면 인수1을 반환
  • COALESCE(인수1, 인수2, 인수3 …)
    • NULL이 아닌 최초의 인수를 반환
  • NVL2(인수1, 인수2, 인수3)
    • 인수1이 NULL이 아닌 경우 인수2를 반환하고 NULL인 경우 인수3을 반환

 

(6) CASE

  • 함수와 성격이 같긴 하지만 표현 방식이 구문에 가깝다.
  • 문장으로 ~이면 ~이고, ~이면 ~이다. 식으로 표현되는 구문
  • 필요에 따라 각 CASE를 여러 개로 늘릴 수 있다.

 

04. WHERE 절

INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문

(1) 비교 연산자

연산자 의미
= 같음
< 작음
작거나 같음
>
크거나 같음

(2) 부정 비교 연산자

연산자 의미
!= 같지 않음
^= 같지 않음
<> 같지 않음
not 칼럼명 = 같지 않음
not 칼럼명 > 크지 않음

(3) SQL 연산자

연산자 의미
BETWEEN A AND B A와 B의 사이(A,B 포함)
LIKE ‘비교 문자열’ 비교 문자열을 포함
%는 문자열을 의미
_는 하나의 문자를 의미
IN (LIST) LIST 중 하나와 일치
IS NULL NULL 값

(4) 부정 SQL 연산자

연산자 의미

NOT BETWEEN A AND B A와 B의 사이 아님(A,B 미포함)
NOT IN (LIST) LIST 중 일치하는 것이 없음
IS NOT NULL NULL 값이 아님

(5) 논리 연산자

02. SELECT 문

  • SELECT
    • 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어
    • 컬럼을 따로 명시하지 않고 *(asterisk)를 쓰면 전체 컬럼이 조회
    • 조회되는 컬럼의 순서는 테이블 컬럼의 순서와 동일
    • WHERE 절이 별도로 없을 경우에 전체 Row가 조회
    SELECT * FROM 테이블
    
    • 테이블명이나 컬럼명에 별도의 Allias를 붙일 수 있다.
      • 여러 개의 테이블을 JOIN 하거나 서브 쿼리가 있을 때 컬럼명 앞에 테이블 명을 같이 명시해야 하는 경우, 테이블명은 비교적 길기 때문에 짧게 줄여 쓰기 위함.
      • Alias를 붙일 때는 앞에 AS를 넣어도 되고 넣지 않아도 된다.
      • 테이블명에서 Alias를 설정했을 경우 테이블명 대신 Alias를 사용해야 한다.
        • ex) SELECT TAB.COL FROM TAB T WHERE COL=’A’; → 문법 에러 발생
    Alias 적용Alias 적용 후
  • SELECT B.BAND_NAME, BM.MEMBER_NAME FROM BAND B, BAND_MEMBER BM WHERE B.BAND_CODE = BM.BAND_CODE;
  • SELECT BAND.BAND_NAME, BAND_MEMBER.MEMBER_NAME FROM BAND, BAND_MEMBER WHERE BAND.BAND_CODE = BAND_MEMBER.BAND_CODE;
  • SELECT 컬럼1, 컬럼2, ... FROM 테이블 WHERE 컬럼1='아무개';
  • 산술 연산자
    • 수학에서 사용하는 사칙연산의 기능을 가진 연산자
    • NUMBER DATE 유형의 데이터와 같이 사용할 수 있다.
  • *연산에서 NULL이 포함되어 있으면 결과값은 NULL이 된다.
  • 합성 연산자
    • 문자와 문자를 연결할 때 사용하는 연산자

03. 함수

(1) 문자 함수

  • CHR(ASCII 코드)
    • ASCII 코드로 인수를 입력했을 때 매핑되는 문자가 무엇인지 알려주는 함수
  • LOWER(문자열)
    • 문자열을 소문자로 변환
  • UPPER(문자열)
    • 문자열을 대문자로 변환
  • LTRIM(문자열 [, 특정문자]) *[ ]는 옵션
    • 특정 문자를 따로 명시해주지 않으면 문자열의 왼쪽 공백을 제거
    • 명시해주었을 경우 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춤
    • SQL Server(MSSQL)의 경우 공백 제거만 가능
  • RTRIM(문자열 [, 특정문자]) *[ ]는 옵션
    • 특정 문자를 따로 명시해주지 않으면 문자열의 오른쪽 공백을 제거
    • 명시해주었을 경우 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 포함되지 않았으면 멈춤
    • SQL Server(MSSQL)의 경우 공백 제거만 가능
  • TRIM([위치] [특정 문자] [FROM] 문자열) *[ ]는 옵션
    • 옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거
    • 그렇지 않을 경우 문자열을 위치(LEADING or TRAILING or BOTH)로 지정된 곳부터 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춤
    • SQL Server(MSSQL)의 경우 공백 제거만 가능
  • SUBSTR(문자열, 시작점 [, 길이]) *[ ]는 옵션
    • 문자열의 원하는 부분만 잘라서 반환
    • 길이를 명시하지 않았을 경우 문자열의 시작점부터 문자열의 끝까지 반환
    • SQL Server(MSSQL)의 경우 SUBSTRING(문자열)
  • LENGTH(문자열)
    • 문자열의 길이를 반환
  • REPLACE(문자열, 변경 전 문자열 [, 변경 후 문자열]) *[ ]는 옵션
    • 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿈
    • 변경 후 문자열을 명시해 주지 않으면 문자열에서 변경 후 문자열을 제거
  • LPAD(문자열, 길이, 문자)
    • 문자열이 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채우는 함수

(2) 숫자 함수

  • ABS(수)
    • 수의 절댓값 반환
  • SIGN(수)
    • 수의 부호를 반환
    • 0이면 0 반환
  • ROUND(수 [, 자릿수])
    • 수를 지정된 소수점 자릿수까지 반올림하여 반환
    • 자릿수를 명시하지 않았을 경우 기본값은 0이며 반올림된 정수로 반환
    • 자릿수가 음수일 경우 지정된 정수부를 반올림하여 반환
  • TRUNC(수 [, 자릿수])
    • 수를 지정된 소수점 자릿수까지 버림하여 반환
    • 자릿수를 명시하지 않았을 경우 기본값은 0이며 버림된 정수로 반환
    • 자릿수가 음수일 경우 지정된 정수부에서 버림하여 반환
  • CEIL(수)
    • 소수점 이하의 수를 올림한 정수를 반환해주는 함수
  • FLOOR(수)
    • 소수점 이하의 수를 버림한 정수를 반환
  • MOD(수1, 수2)
    • 수1을 수2로 나눈 나머지를 반환

(3) 날짜 함수

  • SYSDATE
    • 현재의 연 월 일 시 분 초를 반환
    • nls_date_format에 따라서 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을 반환
  • NULLIF(인수1, 인수2)
    • 인수1과 인수2가 같으면 NULL을 반환
    • 같지 않으면 인수1을 반환
  • COALESCE(인수1, 인수2, 인수3 …)
    • NULL이 아닌 최초의 인수를 반환
  • NVL2(인수1, 인수2, 인수3)
    • 인수1이 NULL이 아닌 경우 인수2를 반환하고 NULL인 경우 인수3을 반환

(6) CASE

  • 함수와 성격이 같긴 하지만 표현 방식이 구문에 가깝다.
  • 문장으로 ~이면 ~이고, ~이면 ~이다. 식으로 표현되는 구문
  • 필요에 따라 각 CASE를 여러 개로 늘릴 수 있다.

04. WHERE 절

INSERT를 제외한 DML문을 수행할 때 원하는 데이터만 골라 수행할 수 있도록 해주는 구문

(1) 비교 연산자

연산자 의미

= 같음
< 작음
작거나 같음
>
크거나 같음

(2) 부정 비교 연산자

연산자 의미

!= 같지 않음
^= 같지 않음
<> 같지 않음
not 칼럼명 = 같지 않음
not 칼럼명 > 크지 않음

(3) SQL 연산자

연산자 의미

BETWEEN A AND B A와 B의 사이(A,B 포함)
LIKE ‘비교 문자열’ 비교 문자열을 포함
%는 문자열을 의미  
_는 하나의 문자를 의미  
IN (LIST) LIST 중 하나와 일치
IS NULL NULL 값

(4) 부정 SQL 연산자

연산자 의미
NOT BETWEEN A AND B A와 B의 사이 아님(A,B 미포함)
NOT IN (LIST) LIST 중 일치하는 것이 없음
IS NOT NULL NULL 값이 아님

(5) 논리 연산자

연산자 의미
AND 모든 조건이 TRUE
OR 하나 이상의 조건이 TRUE
NOT TRUE면 FALSE, FALSE면 TRUE

 

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

  • GROUP BY 절을 사용할 때 WHERE 절처럼 사용하는 조건절
  • 주로 데이터를 그룹핑 한 후 특정 그룹을 골라낼 때 사용
  • 논리적으로 GROUP BY 절 이후에 수행되기 때문에 그룹핑 후에 가능한 집계 함수로 조건을 부여할 수 있다.
  • 또한 논리적으로 SELECT 절 전에 수행되기 때문에 SELECT 절에 명시되지 않은 집계 함수로도 조건을 부여할 수 있다.
  • 주의할 점은 WHERE 절을 사용해도 되는 조건까지 HAVING 절로 써버리면 성능상 불리할 수 있다.(오류는 안 난다)
    • WHERE 절에 필터링이 선행되어야 GROUP BY를 할 데이터량이 줄어들기 때문이다.
    • GROUP BY는 비교적 많은 비용이 드는 작업이므로 수행 전에 데이터량을 최소로 줄여놓는 것이 바람직하다.

06. ORDER BY 절

(1) ORDER BY

  • SELECT 문에서 논리적으로 맨 마지막에 수행
  • ORDER BY 절을 사용하여 SELECT한 데이터를 정렬할 수 있으며 ORDER BY 절을 따로 명시하지 않으면 데이터는 임의의 순서대로 출력
  • ORDER BY 절 뒤에는 정렬의 기준이 되는 컬럼이 오게 되는데 컬럼은 하나가 될 수도 있고 그 이상이 될 수도 있다.
  • ORDER BY 절 뒤에 오는 칼럼에는 옵션이 붙을 수 있으며 종류는 다음과 같다.
    • ASC: 오름차순(Ascending)
    • DESC: 내림차순(Descending)
    • 옵션 생략 시 ASC가 기본값이 된다.

07. JOIN

(1) JOIN이란?

  • 각기 다른 테이블을 한 번에 보여줄 때 쓰는 쿼리

(2) EQUI JOIN

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

(3) Non EQUI JOIN

  • Equal 조건이 아닌 다른 조건으로 JOIN하는 방식

(4) 3개 이상 TABLE JOIN

  • 좀 더 확장하여 3개 이사의 테이블을 JOIN 가능

(5) OUTER JOIN

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

 

08. STANDARD JOIN

(1) INNER_JOIN

  • JOIN 조건에 충족하는 데이터만 출력되는 방식
  • SQL과의 차이점은 JOIN 조건을 ON 절을 사용하여 작성해야 한다는 점

(2) OUTER_JOIN

  • JOIN 조건에 충족하는 데이터
  • OUTER JOIN에는 몇 가지 종류가 있는데 이는 JOIN 조건에 충족하지 않지만 출력이 되는 데이터를 판별하는 기준
  • LEFT OUTER JOIN
    • SQL에서 왼쪽에 표기된 테이블의 데이터는 무조건 출력되는 JOIN
    • 오른쪽 테이블에 JOIN 되는 데이터가 있든지 말든지 일단 나는 출력되고 본다는 식.
  • RIGHT OUTER JOIN
    • SQL에서 오른쪽에 표기된 테이블의 데이터는 무조건 출력되는 방식
    • 왼쪽 테이블에 JOIN되는 데이터가 있든지 말든지 일단 나는 출력되고 본다는 식
    • 대신 왼쪽 테이블에 JOIN되는 데이터가 없는 Row들은 왼쪽 테이블 컬럼의 값이 NULL
  • FULL OUTER JOIN
    • 왼쪽, 오른쪽 테이블의 데이터가 모두 출력되는 방식
    • LEFT OUTER JOIN과 RIGHT OUTER JOIN의 합집합
  • NATURAL JOIN
    • A 테이블과 B 테이블에서 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN이 되는 방식
  • CROSS JOIN
    • 비슷한 맥락으로 CROSS JOIN은 A 테이블과 B 테이블 사이에 JOIN 조건이 없는 경우, 조합할 수 있는 모든 경우를 출력하는 방식

'DataBase > Study' 카테고리의 다른 글

[SQLD] SQL 활용  (0) 2024.05.22
[SQLD] 데이터 모델과 SQL  (0) 2024.03.26
[SQLD] 데이터 모델링의 이해  (1) 2024.03.26
Comments