[SQLD] 2-1. SQL 기본

0-x-14·2025년 3월 3일
0

SQLD

목록 보기
3/5




관계형 데이터베이스



  • 관계형 데이터베이스
    • 모든 데이터를 2차원 테이블 형태로 표현한 뒤 관계 정의

  • TABLE
    • 인스턴스 = Row, 속성 = Column









SELECT문



  • SELECT문
    • 저장되어 있는 데이터를 조회



  • SELECT * FROM 테이블;
    • 전체 컬럼이 조회됨



  • Alias (별칭)
    • TABLE AS T, TABLE T와 같이 사용 가능
    • Alias를 설정했는데 Alias가 아닌 테이블명 사용시 에러 발생



  • ALIAS 별도로 지정 X시 컬럼명 대문자로 출력
    • ex) SELECT hire_date → 컬럼명 HIRE_DATE로 출력



  • 산술연산자
    • NULL 포함시 결과값도 NULL









함수


문자 함수


CHR(아스키코드)

  • 아스키코드 매핑되는 문자로
  • CHR(65) → A



LOWER(문자열)

  • 소문자로 변환
  • LOWER('JENNIE') → jennie



UPPER(문자열)

  • 대문자로 변환
  • UPPER('jennie') → JENNIE



LTRIM(문자열[,특정문자]) *[]는 옵션

  • 맨왼쪽에서 특정문자 제거
  • 특정 문자 지정 X시 공백 제거
  • 맨왼쪽에서 지정한 문자들이 연속해서 존재하는 동안만 제거됨 (= 그뒤에 있는 건 제거 X)
  • LTRIM('AAABBABC', 'A') → BBABC (연속해서 있는 A 모두 제거됨)
  • LTRIM('DATABASE', 'DE') → ATABASE (D만이라도 제거됨)



RTRIM(문자열[,특정문자]) *[]는 옵션

  • 맨오른쪽에서 특정문자 제거
  • 특정 문자 지정 X시 공백 제거
  • 맨오른쪽에서 지정한 문자들이 연속해서 존재하는 동안만 제거됨 (= 그앞에 있는 건 제거 X)
  • RTRIM('ABCABCC', 'C') → ABCAB (연속해서 있는 C 모두 제거됨)
  • RTRIM('SQL', 'LE') → SQ (L만이라도 제거됨)



TRIM([위치][특정 문자] [FROM] 문자열) *[]는 옵션

  • 문자 한 글자만 지정 가능!!
  • 옵션이 없을 경우
    • 양쪽(맨왼쪽, 맨오른쪽) 공백 제거
    • TRIM(' JENNIE ') → JENNIE
  • LEADING
    • 맨왼쪽에서만 제거
    • TRIM(LEDAING '블' FROM '블랙핑크') → 랙핑크
  • TRAILING
    • 맨오른쪽에서만 제거
    • TRIM(TRAILING '크' FROM '블랙핑크') → 블랙핑
  • BOTH
    • 양쪽(맨왼쪽, 맨오른쪽)에서 제거
    • TRIM(BOTH 'A' FROM 'AAABACAAA') → BAC



SUBSTR(문자열, 시작점 [,길이] *[]는 옵션

  • 원하는 부분만 잘라서 반환
  • 길이 지정 X시 끝까지
  • 문자열 맨앞 0 아니고 1부터 시작임!!
  • 공백도 계산하기! 주의!



LENGTH(문자열)

  • 문자열 길이 반환



REPLACE(문자열, 변경 전 문자열 [,변경 후 문자열]) *[]는 옵션

  • 바꿔주는 함수
  • 변경 후 문자열 명시 X시 문자열에서 변경 전 문자열을 제거함



LPAD(문자열, 길이, 문자)

  • 문자열이 길이가 될 때까지 왼쪽을 특정 문자로 채움
  • LPAD('JENNIE', 10, 'V') → VVVVJENNIE



CONCAT(문자열1, 문자열2)

  • 문자열1과 문자열2를 연결해줌



숫자 함수


ABS(수)

  • 절댓값 반환



SIGN(수)

  • 부호 반환
  • 양수 1, 음수 -1, 0이면 0



ROUND(수[,자릿수]) *[]는 옵션

  • 지정된 소수점 자릿수까지 반올림하여 반환
  • 자릿수 명시 X시 기본값 0
  • ROUND(163.76, 1) → 163.8
  • ROUND(163.76) → 164
  • ROUND(163.76, -1) → 160



CEIL(수)

  • 소수점 이하의 수 올림해서 반환
  • CEIL(72.86) → 73
  • CEIL(7.1) → 8

  • ROUND(수)는 반올림, CEIL(수)는 올림



FLOOR(수)

  • 소수점 이하의 수 버림
  • FLOOR(22.6) → 22



MOD(수1, 수2)

  • 수1 % 수2 반환 (=나머지값 반환)
  • 수2가 0일 경우 1 반환



날짜 함수


SYSDATE

  • 현재의 연, 월, 일, 시, 분, 초 반환
  • SYSDATE → 2025-03-04 02:00:58



EXTRACT(특정 단위 FROM 날짜 데이터)

  • 날짜 데이터에서 특정 단위(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)만을 출력
  • EXTRACT(YEAR FROM SYSDATE) → 2025



ADD_MONTHS(날짜 데이터, 특정 개월 수)

  • 날짜 데이터에서 특정 개월 수를 더한 날짜 반환
  • 일자가 존재하지 않을 경우 해당 월의 마지막 일자 반환
  • ADD_MONTHS(DATE '2025-01-31', 1) → 2025-02-28



변환 함수


명시적 형변환과 암시적 형변환

명시적 형변환 - 변환 함수 사용
암시적 형변환 - DB가 내부적으로 알아서


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


  • TO_NUMBER(문자열)
    • 문자열 → 숫자형으로 변환
    • TO_NUMBER('1234') → 1234
    • TO_NUMBER('abc') → 에러 발생



  • TO_CHAR(수 or 날짜[, 포맷]) *[]는 옵션
    • 수 or 날짜 → (포맷 형식의) 문자형
    • TO_CHAR(1234) → '1234'
    • TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') → '2025-03-04 20:47:38'



NULL 관련 함수


NVL(인수1, 인수2)

  • 인수1이 NULL일 경우 인수2 반환
  • 인수1이 NULL이 아닐 경우 인수1 반환



NULLIF(인수1, 인수2)

  • 인수1과 인수2가 같으면 NULL 반환
  • 같지 않으면 인수1 반환



COALESCE(인수1, 인수2, 인수3, ...)

  • NULL이 아닌 최초의 인수 반환



NVL2(인수1, 인수2, 인수3)

  • 인수1이 NULL이 아닌 경우 인수2 반환
  • NULL인 경우 인수3 반환
  • NVL에서 한 칸 밀린 버전이라고 생각하기...



CASE


  • 별도의 ELSE가 없을 경우 NULL값이 DEFAULT값이 됨
  • Oracle의 DECODE 함수도 같은 기능
    • DECODE또 DEFAULT값이 별도로 없을 경우 NULL값이 DEFAULT값이 됨

CASE WHEN SUBWAY_LINE = '1' THEN 'BLUE'
        WHEN SUBWAY_LINE = '2' THEN 'GREEN'
        WHEN SUBWAY_LINE = '3' THEN 'ORANGE'
        [ELSE 'GRAY']
END

CASE SUBWAY_LINE
        WHEN '1' THEN 'BLUE'
        WHEN '2' THEN 'GREEN'
        WHEN '3' THEN 'ORANGE'
        [ELSE 'GRAY']
END

DECODE (SUBWAY_LINE, '1', 'BLUE', '2', 'GREEN', '3', 'ORANGE'[, 'GRAY'])









WHERE 절


비교 연산자


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

  • 조건식 컬럼명 우측에 위치해도 정상적으로 동작 O

  • SQL에서는 같음을 의미하는 연산자가 ==가 아니라 =이다.




부정 비교 연산자


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



SQL 연산자


연산자의미
BETWEEN A AND BA와 B 사이 (A,B 범위에 포함)
LIKE '비교 문자열'% : 문자열, _ : 문자, %,_ 포함된 문자 검색시 ESCAPE 지정
IN (LIST)LIST 중 하나와 일치 ex) where col in (1, 3, 5)
IS NULLNULL값

  • LIKE 앞뒤로 '%'가 붙으면 어디에든 해당 문자열이 들어간 행을 출력함



부정 SQL 연산자


연산자의미
NOT BETWEEN A AND BA와 B 사이가 아님 (A,B 제외되는 범위에 포함)
NOT IN (LIST)LIST 중 일치하는 것이 없음
IS NOT NULLNULL값 아님



논리 연산자


  • 논리연산자 우선순위
    • ( ) → NOT → AND → OR









GROUP BY, HAVING 절


GROUP BY

GROUP BY - 데이터를 그룹별로 묶을 수 있게 해줌



집계 함수


집계함수는 NULL 제외하고 연산!!


  • COUNT(컬럼)
    • COUNT(DISTINCT 컬럼) - 중복 제거 후 Count
  • SUM(컬럼)
  • AVG(컬럼)
    • ex) NULL, 25, 65일 경우 (25+65)/2로 계산
  • MIN(컬럼)
  • MAX(컬럼)



HAVING


  • GROUP BY절 사용시 WHERE 절처럼 사용하는 조건절
  • 데이터를 그룹핑한 후 특정 그룹 골라낼 때 사용
  • 테이블 전체가 한 개의 그룹이 되는 경우 GROUP BY 없이 HAVING만 단독으로 사용 가능

  • SELECT문 논리적 수행 순서

  • HAVING 절은 SELECT 절보다 먼저 수행되므로 SELECT 절에서 기술된 ALIAS 사용 불가









ORDER BY 절


ORDER BY

  • SELECT한 데이터 정렬

  • 조건 여러개 가능. 여러개일 경우 앞에서부터

  • ASC 오름차순, DESC 내림차순
    • 옵션 생략시 ASC가 기본값

  • Oracle은 NULL을 최댓값으로 취급함
    • 문제에서 Oracle이라고 명시하지 않았을 경우 DBMS마다 다르므로 주의

  • 컬럼명 말고 숫자로도 가능
    • ex) ORDER BY 1 → 첫 번째 컬럼 기준으로 오름차순 정렬









JOIN


JOIN

  • 테이블 간에 PK, FK의 연관 관계가 없어도 JOIN 가능



EQUI JOIN

  • EQUAL JOIN (=)



Non EQUI JOIN

  • Non EQUI JOIN (BETWEEN, >, >=, <, <=)



3개 이상 TABLE JOIN

  • EQUI JOIN과 Non EQUI JOIN은 하나의 쿼리에서 같이 사용할 수 있다.









STANDARD JOIN


INNER JOIN

  • JOIN 조건에 충족하는 데이터만 출력
  • JOIN 조건을 ON을 사용해서 작성



OUTER JOIN

  • 반대편 테이블의 옆에 (+) 기호 붙여서 작성
    • 한쪽에만 사용해야 함

  • 반대편 테이블에 JOIN되는 데이터가 없는 Row들을 반대편 테이블 컬럼의 값이 NULL로 출력됨



FULL OUTER JOIN

  • 모두 출력됨



NATURAL JOIN

  • 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN됨
  • A NATURAL JOIN B
  • NATURAL JOIN에는 ON 절 사용 불가, ALIAS 사용 불가 사용시 에러 발생

  • JOIN ~~~ USING (특정 컬럼들)
    • 이 형태도 NATURAL JOIN임
    • 특정 컬럼들이 동일한 데이터를 가지고 있을 경우
    • 단, USING 사용시 ALIAS 사용 불가



CROSS JOIN

  • 조합할 수 있는 모든 경우 출력
  • Cartesian Product









출처

  • 유선배 SQLD 과외노트

0개의 댓글