ABOUT ME

java, android, dart, flutter, node.js 공부 블로그 입니다.

Today
Yesterday
Total
  • [SQLD] SQL 기본 및 활용
    SQLD 2023. 3. 19. 16:34

    챕터1. SQL 기본

    관계형 데이터베이스(RDB, Relational Database) : 관계형 데이터 모델에 기초를 둔 데이터베이스

    관계형 데이터베이스에서의 설계는 모든 데이터를 2차원 테이블 형태로 표현한 뒤 각 테이블 간의 관계를 정의하는 것으로 시작

     

    테이블(table) : 엑셀 작성할 때 이용하는 표형식이라고 생각하면 됨

     

    컬럼(column) : 항목을 나타내는 각각의 세로 열.

    로우(row) : 각각의 가로 행을 의미

     

    SQL(Structured Query Language) : 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어

     

    SELECT

    SELECT : 저장되어 있는 데이터를 조회하고자 할 때 사용하는 명령어. *(asterisk) 를 사용하면 전체 컬럼 조회.

    테이블명이나 컬럼명에 별도의 별칭(Alias)을 붙여줄 수 있음. 여러 개의 테이블을 join 하거나 서브쿼리가 있을 때 컬럼명 앞에 테이블명을 같이 명시해야하는 경우 짧게 줄여쓰기 위해 별칭을 사용

    예시) SELECT  컬럼1, 컬럼2, ... FROM 테이블 WHERE 컬럼1 = '내용1';

     

             SELECT * FROM 테이블;

     

             SELECT A.NAME, B.NAME

             FROM COMPANY A, PARTNER B

             WHERE A.COMPANY_CODE = B.COMPANY_CODE;

     

    산술 연산자 : 사칙연산의 기능을 가진 연산자. NUMBER, DATE 유형의 데이터와 같이 사용 가능

    연산자 의미 우선순위
    () 괄호로 우선순위를 조정할 수 있음 1
    * 곱하기 2
    / 나누기
    + 더하기 3
    - 빼기

     

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

     

    함수

    문자 함수

     

    CHR(ASCII 코드) : ASCII 코드는 총 128개의 문자를 숫자로 표현할 수 있도록 정의해 놓은 코드

    예) SELECT CHR(65) FROM DUAL; -> 결과로 A 가 나옴

     

    LOWER(문자열) : 문자열을 소문자로 변환

    예) LOWER('STINGER') -> stinger

     

    UPPER(문자열) : 문자열을 대문자로 변환

    예) UPPER('stinger') -> STINGER

     

    LTRIM(문자열, [특정 문자]) : 왼쪽 공백을 제거. 특정 문자를 같이 입력하면 해당 문자를 왼쪽부터 한 글자씩 제거. 해당 문자가 포함되지 않았으면 멈춤

    예) LTRIM('  G70') -> G70

          LTRIM('G70 SHOOTING BRAKE', 'G70') -> SHOOTING BRAKE

     

    RTRIM(문자열, [특정 문자]) : 오른쪽 공백을 제거. 특정 문자를 같이 입력하면 해당 문자를 오른쪽부터 한 글자씩 제거. 해당 문자가 포함되지 않았으면 멈춤

    예) RTRIM('G70  ') -> G70

          RTRIM('G70 SHOOTING BRAKE', 'BRAKE') -> G70 SHOOTING

     

    TRIM([위치][특정문자][FROM] 문자열) : 옵션이 하나도 없을 경우 문자열의 왼쪽과 오른쪽 공백을 제거하고, 그렇지 않을 경우 문자열을 위치로 지정된 곳부터(TRAILING, LEADING, BOTH) 한 글자씩 특정 문자와 비교하여 같으면 제거하고 같지 않으면 멈춤

    LTRIM, RTRIM 과 달리 한 글자만 지정 가능

    예) TRIM('   G70   ') -> G70

          TRIM(LEADING 'G' FROM 'G70') -> 70

          TRIM(TRAILING '0' FROM 'G70') -> G7

     

    TRIM 문자열 치환은 LTRIM, RTRIM, REPLACE 와 함께 시험문제로 종종 출제 됩니다.

    각 함수에서 문자열 치환하는 방식에 대해 어느정도 숙지해놓는게 좋습니다.

    SQLD 48회에서 출제된적이 있습니다. REPLACE 와 TRIM 을 헷갈려서 틀린 사람들이 많았습니다.

    TRIM 에는 LEADING 또는 TRAILING 또는 BOTH 로 시작하고 중간에 FROM 을 넣어줘야 함을 잊지 않으면 될것같습니다.

     

    SUBSTR(문자열, 시작점, [길이]) : 문자열의 원하는 부분만 잘라서 반환. 길이를 생략하면 문자열의 시작점부터 문자열의 끝까지 반환

    예) SUBSTR('STINGER', 3, 2) -> IN

     

    LENGTH(문자열) : 문자열의 길이 반환

    예) LENGTH('STINGER') -> 7

     

    REPLACE(문자열, 변경 전 문자열, [변경 후 문자열]) : 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 바꿔주는 함수. 변경 후 문자열을 명시해주지 않으면 문자열에서 변경 전 문자열을 제거

    예) REPLACE('GENESIS STINGER', 'STINGER', 'G70') -> GENESIS G70

          REPLACE('GENESIS STINGER', 'STINGER') -> GENESIS

     

     

     

    숫자 함수

     

    ABS(수) : 수의 절대값을 반환해주는 함수

    예) ABS(-10) -> 10

     

    SIGN(수) : 수의 부호를 반환해주는 함수. 양수는 1, 음수는 -1, 0이면 0 반환

    예) SIGN(-33) -> -1

          SIGN(33) -> 1

     

    ROUND(수, [자릿수]) : 수를 지정된 소수점 자릿수까지 반올림. 자릿수 명시하지 않으면 기본값은 0

    예) ROUND(183.76, 1) -> 183.8

          ROUND(183.76, -2) -> 200

     

    TRUNC(수, [자릿수]) : 수를 지정된 소수점 자릿수까지 버림하여 반환해주는 함수. 자릿수를 명시하지 않았을 경우 기본값은 0

    예) TRUNC(74.29, 1) -> 74.2

          TRUNC(74.29, -1) -> 70

     

    ceil(수) : 소수점 이하의 수를 올림한 정수

    예) ceil(2.32) -> 3

          ceil(-2.32) -> -2

     

    floor(수) : 소수점 이하의 수를 버림한 정수

    예) floor(2.32) -> 2

          floor(-2.32) -> -3

    가운데 파란색 숫자가 기준 숫자이고 위에 숫자가 ceil, 아래 숫자가 floor 

     

    ceil 과 floor 도 SQLD 48회에 출제 되었습니다.

     

    mod(수1, 수2) : 수1 을 수2로 나눈 나머지를 반환해줌

    예) MOD(15, 2) -> 1

          MOD(15, -6) -> 3

     

     

     

    날짜 함수

    SYSDATE : 현재의 연, 월, 일, 시, 분, 초를 반환

     

    EXTRACT(특정 단위 FROM 날짜 데이터) : 날짜 데이터에서 특정 단위만 출력해서 반환

     

    ADD_MONTHS(날짜 데이터, 특정 개월 수) : 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환해주는 함수

    날짜의 이전 달이나 다음 달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자를 반환.

    예) ADD_MONTHS(TO_DATE('2022-12-31', 'YYYY-MM-DD'), 1) -> 2023-01-31

          ADD_MONTHS(TO_DATE('2023-01-31', 'YYYY-MM-DD'), 1) -> 2023-02-28

     

     

    변환함수

    명시적 형변환: 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타냄

    암시적 형변환 : 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함

     

    명시적 형변환에 쓰이는 함수

    1) TO_NUMBER(문자열) : 문자열을 숫자형으로 변환

    2) TO_CHAR(수 or 날짜, [포맷]) : 수나 날짜형의 데이터를 포맷 형식의 문자형으로 변환

    3) TO_DATE(문자열, 포맷) : 포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수

     

     

    NULL 관련 함수

    NVL(인수1, 인수2) : 인수1의 값이 NULL 일 경우 인수2를 반환하고 NULL 이 아닌 경우 인수1을 반환해주는 함수

     

    NULLIF(인수1, 인수2) : 인수1과 인수2가 같으면 NULL을 반환하고 같지 않으면 인수1을 반환해주는 함수

     

    COALESCE(인수1, 인수2, 인수3) : NULL 이 아닌 최초의 인수를 반환해주는 함수

     

    NVL, NULLIF, COALESCE 함수는 시험에 자주 나오는 함수. 무조건 알고 있어야 함

     

     

    case : case 는 '~이면 ~이고, ~이면 ~이다' 식으로 표현 되는 구문. 필요에 따라 여러개의 case 를 사용.

    같은 기능을 하는 함수로는 oracle 의 DECODE 함수가 있다.

     

    WHERE 절

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

    예) SELECT * FROM CAR WHERE name = 'stringer';

     

    WHERE 절에 사용할 수 있는 연산자

    1. 비교 연산자

    = 같음 where col = 10
    < 작음 where col < 10
    <= 작거나 같음 where col <= 10
    > where col > 10
    >= 크거나 같음 where col >= 10

    2. 부정 비교 연산자

    != 같지 않음 where col != 10
    ^= 같지 않음 where col ^= 10
    <> 같지 않음 where col <> 10
    not 컬럼명 = 같지 않음 where not col = 10
    not 컬럼명 > 크기 않음 where not col > 10

    3. SQL 연산자

    BETWEEN A AND B A와 B 사이(A, B 포함) where col between 1 and 10
    LIKE '비교 문자열' 비교 문자열 포함 where col like 'st%'
    where col like '%in%'
    where col like 's_i%'
    IN (LIST) LIST 중 하나와 일치 where col in (1, 3, 5)
    IS NULL NULL 값 where col is null

    4. 부정 SQL 연산자

    NOT BETWEEN A AND B A 와 B의 사이가 아님(A, B 미포함) where col not between 1 and 10
    NOT IN (LIST) LIST 중 일치하는 것이 없음 where col not in (1, 3, 5)
    IS NOT NULL NULL 값이 아님 where col is not null

    5. 논리 연산자

    AND 모든 조건이 TRUE 여야 함 where col > 1 and col < 10
    OR 하나 이상의 조건이 TRUE여야 함 where col = 1 or col = 10
    NOT TRUE 면 FALSE이고, FALSE 이면 TRUE where not col > 10

    논리 연산자는 처리 순서가 존재함. SQL 명시 순서에 상관 없이 ( ) -> NOT -> AND -> OR 순으로 처리

     

     

    출처 : 유선배 SQL 개발자 SQLD 과외 노트

    https://www.youtube.com/@SQL/playlists

     

    'SQLD' 카테고리의 다른 글

    댓글

Designed by Tistory.