[SQLD] 2과목 - 1. SQL 기본

2024. 5. 16. 14:16·자격증 & 공부/SQLD

[ 2과목 - 1. SQL 기본 ]

 * 데이터베이스
   - 데이터들을 저장하는 공간
   - 용도와 목적에 맞는 데이터들끼리 모아서 저장함

 * 관계형 데이터베이스 - RDB(Relational Database)
   - 관계형 데이터 모델에 기초를 둔 데이터베이스
   - 모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것
   - RDBMS(Relational Database Management System)는 RDB를 관리/감독하기 위한 시스템이며, Oracle,
     MySQL, MariaDB, PostgreSQL 등이 속함

 * TABLE
   - 컬럼 : 항목을 나타내는 각각의 세로 열
   - 로우 : 각각의 가로 행
   - 관계형 데이터베이스의 기본 단위
   - 데이터베이스는 여러 개의 테이블로 구성됨

 * SQL(Structured Query Language)
   - 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어
   - 라인수가 많아지는 복잡한 SQL은 어떻게 작성하느냐에 따라 성능 차가 확연히 드러나기 때문에 SQL을 잘 작성하고 
     튜닝하는 것이 매우 중요함

 * SELECT문
   (1) SELECT
      - 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어
      - 컬럼을 따로 명시하지 않고 *를 쓰면 전체 컬럼이 조회되며, 조회되는 컬럼의 순서는 테이블의 컬럼 순서와 동일함
      - 별도의 WHERE 절이 없으면 테이블의 전체 ROW가 조회됨
      - 테이블 명이나 컬럼명에 별도의 별칭을 붙여줄 수 있는데 붙여주는 목적은 테이블명은 비교적 길기 때문에 
        짧게 줄여쓰기 위해 Alias를 붙여주는 것 (AS 사용 가능)
      - DISTINCT : 중복된 데이터가 있을 경우 1건으로 처리해 출력함

   (2) 산술연산자
      - 수학에서 사용하는 사칙연산의 기능을 가진 연산자
      - () : 괄호로 우선순위 조정 가능
      - * : 곱하기
      -  / : 나누기 (0으로 나눌 경우 에러 발생)
      - + : 더하기
      - - : 뻬기
      - % : 나머지 (0으로 나눌 경우 NULL 반환)
      => 우선순위 : 괄호 > 곱하기/나누기 > 더하기/빼기/나머지

   (3) 합성연산자 (||)
      - 문자와 문자를 연결할 때 사용하는 연산자

 * 함수
   (1) 내장 함수 
      - 다시 함수 입력 값이 단일행 값이 입력되는 단일행 함수와 여러 행의 값이 입력되는 다중행 함수로 구분
      - 단일행 함수 : 처리하는 데이터의 형식에 따라서 문자형, 숫자형, 날짜형, 변환형, NULL 관련 함수
        : SELECT, WHERE, ORDER BY 절에 사용 가능
        : 각 행들에 대해 개별적으로 작용해 데이터 값들을 조작하고, 각각의 행에 대한 조작 결과를 리턴
        :  여러 인자를 입력해도 단 하나의 결과만 리턴
        :  함수도 인자로 상수, 변수, 표현식이 사용 가능하고, 하나의 인수를 가지는 경우도 있지만  여러 개의 인수를 가질 수도 있음
        :  특별한 경우가 아니면 함수의 인자로 함수를 사용하는 함수의 중첩이 가능
      - 다중행 함수 : 다시 집계함수, 그룹함수, 윈도우 함수

종류 내용 함수
문자형 함수 문자를 입력하면 문자나 숫자 값을 반환 LOWER, UPPER, ASCII, CHAR, CONCAT, SUBSTRGIN, LEN, LTRIM, RTRIM, TRIM
숫자형 함수 숫자를 입력하면 숫자 값 반환 ABS, SIGN, MOD, CEILING, FLOOR, ROUND, TRUNC, SIN, COS, TAN, EXP, POWER, SQRT, LOG, LN
날짜형 함수 DATE 타입의 값을 연산 SYSDATE, EXTRACT, TO_NUMBER(TO_CHAR(d, ‘YYYY’|’MM’|’DD’))/YEAR|MONTH|DAY
변환형 함수 문자, 숫자, 날짜형의 데이터 타입 변환 (CAST, TO_NUMBER, TO_CHAR, TO_DATE)/(CAST, CONVER)
NULL 관련 함수 NULL 처리를 위한 함수 NVL/ISNULL, NULLIF, COALESCE


   (2) 문자형 함수
      - 문자 데이터를 매개변수로 받아들여서 문자나 숫자 값의 결과를 돌려주는 함수

문자형 함수 설명
LOWER(문자열) 알파벳 문자를 소문자로 바꿈
UPPER(문자열) 알파벳 문자를 대문자로 바꿈
ASCII(문자) 문자나 숫자를 ASCII 코드 번호로 바꿈
CHR/CHAR(ASCII번호) ASCII 코드 번호를 문자나 숫자로 바꿈
CONCAT(문자열1, 문자열2) 문자열1과 문자열2를 연결함
합성연산자 ||나 +와 동일함
SUBSTR/SUBSTRING(문자열, M[,n]) 문자열 중 m위치에서 n의 문자 길이에 해당하는 문자를 돌려줌
n이 생략되면 마지막 문자까지임
LENGTH/LEN(문자열) 문자열의 개수를 숫자값으로 돌려줌
LTRIM(문자열 [,지정문자])/LTRIM(문자열) 문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거함(지정문자가 생략되면 공백값이 디폴트)
RTIRM(문자열 [,지정문자])/RTRIM(문자열) 문자열의 마지막 문자부터 확인해서 지정문자가 나타나는 동안 해당 문자를 제거함(지정문자가 생략되면 공백값이 디폴트)
TRIM([leading|trailing|both] 지정문자 FROM 문자열) / TRIM(지정문자 FROM 문자열) 문자열에서 머리말, 꼬리말 또는 양쪽에 있는 지정 문자를 제거함(leading|trailing|both가 생략되면 both가 디폴트)


   (3) 숫자형 함수
      - 숫자 데이터를 입력받아 처리하고 숫자를 리턴함

숫자형 함수 함수 설명
ABS(숫자) 숫자의 절댓값을 리턴
SIGN(숫자) 숫자가 양수인지, 음수인지, 0인지를 구별
MOD(숫자1, 숫자2) 숫자1을 숫자2로 나누어 나머지 값을 리턴
MOD 함수는 % 연산자로도 대체 가능
CEIL/CEILING(숫자) 숫자보다 크거나 같은 최소 정수 리턴
FLOOR(숫자) 숫자보다 작거나 같은 최대 정수 리턴
ROUND(숫자 [,m]) 숫자를 소수점 m자리에서 반올림해서 리턴
m이 생략되면 디폴트 값은 0
TRUNC(숫자 [,m]) 숫자를 소수점 m자리에서 잘라서 리턴
m이 생략되면 디폴트 값은 0
SIN, COS, TAN, ... 숫자의 삼각함수 값을 리턴
EXP(숫자) 숫자의 지수 값을 리턴
POWER(숫자1, 숫자2) 숫자의 거듭제곱 값을 리턴
SQRT(숫자) 숫자의 제곱근 값을 리턴
LOG(숫자1, 숫자2) / LOG(숫자1, 숫자2) 숫자1을 밑수로 하는 숫자2의 로그값(LOG숫자1숫자2)을 리턴
LN(숫자) 숫자의 자연 로그 값(=LOGe숫자)을 리턴


   (4) 날짜형 함수
      - DATE 타입의 값을 연산하는 함수

날짜형 함수 함수 설명
SYSDATE/GETDATE() 현재 날짜와 시간 출력
EXTRACT(‘YEAR’|’MOMTH’/‘DAY’|from d)
/DATEPART(‘YEAR’|’MONTH’|’DAY’, d)
날짜 데이터에서 연월일 데이터 출력 가능
시분초도 가능
TO_NUMBER(TO_CHAR(d,‘YYYY’))/YEAR(d)
TO_NUMBER(TO_CHAR(d,‘MM))/MONTH(d)
TO_NUMBER(TO_CHAR(d,‘DD’))/DAY(d)
날짜 데이터에서 연월일 데이터 출력 가능


   (5) 변환형 함수
      - 특정 데이터 타입을 다양한 형식으로 출력하고 싶을 경우 사용
      - 명시적 데이터 유형 변환 : 데이터 변환형 함수를 사용해 데이터 유형을 변환하도록 명시해주는 경우
      - 암시적 데이터 유형 변환 : 데이터베이스가 자동으로 데이터 유형을 변환해 계산하는 경우

변환형 함수 설명
TO_NUMBER (문자열)
/ CAST (expression AS data_type [(length)])
숫자로 변환 가능한 문자열을 숫자로 변환
expression을 목표 데이터 유형으로 변환
TO_CHAR (숫자 | 날짜 [, FORMAT])
/ CONVERT (data_type [(length)], expression [, style ])
숫자나 날짜를 주어진 FORMAT 형태인 문자열 타입으로 변환
expression을 주어진 style 형태인 목표 데이터 유형으로 변환
TO_DATE (문자열 [, FORMAT])
/ CONVERT (data_type [(length)], expression [, style ])
문자열을 주어진 FORMAT 형태인 날짜 타입으로 변환
expression을 주어진 style 형태인 목표 데이터 유형으로 변환


   (6) CASE 표현
      - IF-THEN-ELSE 논리와 유사한 방식으로 표현식을 작성해 SQL의 비교 연산 기능을 보완하는 역할

IF SAL > 5000
TEHN REVISED_SALARY = SAL
ELSE REBISED+SALARY = 5000
END IF
CASE 표현 함수 설명
CASE
SIMPLE_CASE_EXPRESSION 조건
[ELSE 디폴트값]
END
SIMPLE_CASE_EXPRESSION 조건이 맞으면 SIMPLE_CASE_EXPRESSION 조건 내의 THEN절을 수행하고, 조건이 맞지 않으면 ELSE 절을 수행함
CASE
SEARCHED_CASE_EXPRESSION 조건
[ELSE 디폴트값]
END
SEARCHED_CASE_EXPRESSION 조건이 맞으면 SEARCHED_CASE_EXPRESSION 조건 내의 THEN절을 수행하고, 조건이 맞지 않으면 ELSE 절을 수행함
DECODE(표현식, 기준값1, 값1 [, 기준값2, 값2, ..., 디폴트값]) Oracle에서만 사용되는 함수로, 표현식 값이 기준값1이면 값1을 출력하고, 기준값2이면 값2를 출력함
기준값이 없으면 디폴트 값을 출력함
case 표현s의 SIMPLE_CASE_EXPRESSION 조건과 동일함



   (7) NULL 관련 함수
      * NVL/ISNULL 함수
        - NULL의 특성
          : 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다름. 0은 숫자고, 공백은 하나의 문자.
          : 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 NULL 값을
            포함할 수 있음
          : NULL 값을 포함하는 연산의 경우 결과 값도 NULL 값임.
          : 결과 값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용함
          : NULL 값의 대상이 숫자 유형인 데이터인 경우는 주로 0으로, 문자유형인 데이터의 경우는 블랭크보다는 
            ‘X’와 같이 해당 시스템에서 의미없는 문자로 바꾸는 경우가 많음

일반형 함수 설명
NVL(표현식1, 표현식2)/ISNULL(표현식1, 표현식2) 표현식1의 결과 값이 NULL이면 표현식2의 값을 출력함
단, 두 표현식의 결과 데이터 타입이 같아야 함
NULLIF(표현식1, 표현식2) 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴함
COALESCE(표현식1, 표현식2) 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타냄
모든 표현식이 NULL이라면 NULL을 리턴함


 * WHERE절
   - 원하는 자료만 검색하기 위해 SQL문에 WHERE절을 사용하여 자료를 제한할 수 있음

SELECT [DISTINCT/ALL] 컬럼명 [ALIAS명]
FROM 테이블명
WHERE 조건식;


   - 조건식 구성
     : 컬럼명 (보통 조건식의 좌측에 위치)
     : 비교 연산자
     : 문자 숫자 표현식 (보통 조건식의 우측에 위치)
     : 비교 컬럼명(JOIN 사용 시)     => 연산자 우선순위 : 괄호 () > 비교연산자, SQL 연산자 > NOT 연산자 > AND > OR

   - 연산자 종류

구분 연산자 의미
비교 연산자 = 같다.
> 보다 크다.
>= 보다 크거나 같다.
< 보다 작다.
<= 보다 작거나 같다.
SQL 연산자 BETWEEN a AND b a와 b의 값 사이의 값을 갖는다. (a와 b값이 포함됨)
IN (list) 리스트에 있는 값 중에서 어느 하나라도 일치한다.
LIKE ‘비교문자열’ 비교문자열과 형태가 일치한다. (%, _사용)
IS NULL NULL 값을 갖는다.
논리 연산자 AND 앞의 조건과 뒤의 조건이 모두 참(TRUE)이 되면 결과도 참(TRUE).
OR 앞뒤 조건 중 하나만 참(TRUE)이면 결과도 참(TRUE).
NOT 뒤에 오는 조건에 반대되는 결과를 되돌려 준다.
부정 비교 연산자 != 같지 않다.
^= 같지 않다.
<> 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)
NOT 컬럼명 = ~와 같지 않다.
NOT 컬럼명 > ~보다 크지 않다.
부정 SQL 연산자 NOT BETWEEN a AND b a와 b의 값 사이에 있지 않다. (a, b값을 포함하지 않음)
NOT IN (list) list 값과 일치하지 않다.
IS NOT NULL NULL 값을 갖지 않다.


   - IS NULL 연산자
      : NULL 값 비교

 * GROUP BY, HAVING 절
   (1) 집계함수
       - 여러 행들의 그룹이 모여 그룹당 단 하나의 결과를 돌려주는 함수
       - GROUP BY 절은 행들을 소그룹화함
       - SELECT절, HAVING절, ORDER BY절에 사용 가능

집계함수 사용목적
COUNT(*) NULL 값을 포함한 행의 수를 출력
COUNT(표현식) 표현식의 값이 NULL 값인 것을 제외한 행 수를 출력
SUM([DISTINCT | ALL] 표현식) 표현식의 NULL값을 제외한 합계를 출력
AVG([DISTINCT | ALL] 표현식) 표현식의 NULL값을 제외한 평균을 출력
MAX([DISTINCT | ALL] 표현식) 표현식의 최댓값을 출력
MIN([DISTINCT | ALL] 표현식) 표현식의 최솟값을 출력
STDDEV([DISTINCT | ALL] 표현식) 표현식의 표준편차를 출력
VARIANCE/VAR([DISTINCT | ALL] 표현식) 표현식의 분산을 출력
기타 통계 함수 벤터별로 다양한 통계식을 제공함


   (2) GROUP BY 절

SELECT [DISTINCT/ALL] 컬럼명 [ALIAS명]
FROM 테이블명
WHERE 조건식
GROUP BY 컬럼이나 표현식
HAVING 그룹조건식
ORDER BY 컬럼이나 표현식 [ASC 또는 DESC];


       - GROUP BY 절과 HAVING 절을 다음과 같은 특성을 가짐
       - GROUP BY 절을 통해 소그룹별 기준을 정한후, SELECT 절에 집계함수를 사용
       - 집계함수의 통계정보는 NULL값을 가진 행을 제외하고 수행
       - GROUP BY 절에서는 SELECT절과 달리 ALIAS를 사용할 수 없음
       - 집계함수는 WHERE절에는 올 수 없음 (WHERE절이 먼저 수행됨)
       - WHERE절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거
       - HAVING 절은 GROUP BY 절의 기준항목이나 소그룹의 집계함수를 이용한 조건을 표시할 수 있음
       - GROUP BY절에 의한 소그룹별로 만들어진 집계데이터 중, HAVING절에서 제한 조건을 두어 조건을 
         만족하는 내용만 출력
       - HAVING절은 일반적으로 GROUP BY 절 뒤에 위치

   (3) HAVING 절
       - 데이터를 그룹핑한 후 특정 그룹을 골라낼 때 사용
       - WHERE 절을 사용해도 되는 조건까지 HAVING 절로 써버리면 성능상 불리할 수 있음

 * ORDER BY 절
   - SQL문장으로 조회한 데이터들을 다양한 목적에 맞게 특정 컬럼을 기준으로 정렬/출력하는데 사용함

   - 정렬 방식
     : ASC : 조회한 데이터를 오름차순으로 정렬
     : DESC : 조회한 데이터를 내림차순으로 정렬

 * 조인(JOIN)
   - 두 개 이상의 테이블들을 연결해 데이터를 출력하는 것
   (1) EQUI JOIN
       : Equal (=) 조건으로 JOIN하는 것으로 가장 흔히 볼 수 있는 JOIN의 방식

SELECT [DISTINCT/ALL] 컬럼명 [ALIAS명]
FROM 테이블명
WHERE 조건식
GROUP BY 컬럼이나 표현식
HAVING 그룹조건식;


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

   (3) 3개 이상 TABLE JOIN
       : JOIN 쿼리를 좀 더 확장해서 3개 이상의 테이블을 JOIN 할 수도 있음

   (4) OUTER JOIN
       : JOIN 조건에 만족하지 않는 행들도 출력되는 형태
       : LEFT OUTER JOIN의 경우 LEFT TABLE과 RIGHT TABLE의 데이터 중 JOIN에 성공한 데이터와 
         JOIN에 성공하지 못한 나머지 LEFT TABLE의 데이터가 함께 출력됨
   (5) STANDARD JOIN (ANSI JOIN)
       : 표준 조인
       1. INNER JOIN
        - JOIN 조건에 충족하는 데이터만 출력되는 방식
        - JOIN 조건을 ON 절에 사용하여 작성해야 함
       2. OUTER JOIN
        - JOIN 조건에 충족하는 데이터가 아니어도 출력될 수 있는 방식
         1) LEFT OUTER JOIN
           : SQL에서 왼쪽에 표기된 테이블의 데이터는 무조건 출력되는 JOIN
           : 오른쪽 테이블에 JOIN되는 데이터가 없는 ROW들은 오른쪽 테이블 컬럼의 값이 NULL로 출력됨
         2) RIGHT OUTER JOIN
           : SQL에서 오른쪽에 표기된 테이블의 데이터는 무조건 출력되는 JOIN
           : 왼쪽 테이블에 JOIN되는 데이터가 없는 ROW들은 왼쪽 테이블 컬럼의 값이 NULL로 출력됨
         3) FULL OUTER JOIN
           : 왼쪽, 오른쪽 테이블의 데이터가 모두 출력되는 방식
           : LEFT OUTER JOIN과 RIGHT OUTER JOIN의 합집합
       3. NATURAL JOIN
        - A테이블과 B테이블에서 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN이 되는 방식
        - SELECT 절에서 USING 절로 정의된 컬럼 앞에는 별도의 ALIAS나 테이블명을 붙이지 않아야 함
       4. CROSS JOIN
        - A테이블과 B테이블 사이에 JOIN 조건이 없는 경우, 조합할 수 있는 모든 경우를 출력하는 방식

저작자표시 비영리 변경금지 (새창열림)

'자격증 & 공부 > SQLD' 카테고리의 다른 글

[SQLD] SQLD 합격 후기  (0) 2024.06.18
[SQLD] 2과목 – 3. 관리 구문  (0) 2024.05.16
[SQLD] 2과목 - 2. SQL 활용  (0) 2024.05.16
[SQLD] 1과목 - 2. 데이터 모델과 SQL  (0) 2024.05.16
[SQLD] 1과목 - 1. 데이터 모델링의 이해  (0) 2024.05.16
'자격증 & 공부/SQLD' 카테고리의 다른 글
  • [SQLD] 2과목 – 3. 관리 구문
  • [SQLD] 2과목 - 2. SQL 활용
  • [SQLD] 1과목 - 2. 데이터 모델과 SQL
  • [SQLD] 1과목 - 1. 데이터 모델링의 이해
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    CS지식
    springboot
    pcce 기출문제
    python
    데이터
    Flutter
    리눅스마스터
    DB
    Spring Security
    postgresql
    스프링부트
    자바
    시큐리티
    Java
    스프링 부트 쇼핑몰 프로젝트 with JPA
    플러터
    Linux
    JPA
    baekjoon
    데이터베이스
    programmers
    backjoon
    Oracle
    리눅스마스터 1급
    리눅스
    스프링
    백준
    spring
    프로그래머스
    CS
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[SQLD] 2과목 - 1. SQL 기본
상단으로

티스토리툴바