5 분 소요

SQLD를 취득하기 위해 공부하는 과정에 작성한 ‘SQL 기본’ 관련 정리이다.

SELECT문 : 저장된 데이터 조회

SELECT  PRODUCT_CODE,
        COUNT (ORDER_CNT) AS ORDER_CNT
FROM ORDER_PRODUCT
WHERE ORDER_DATE BETWEEN '20240308' AND '20240309'
GROUP BY PRODUCT_CODE
HAVING COUNT(ORDER_CNT) >= 1000;
SELECT 컬럼1, 컬럼2, ... FROM 테이블 WHERE 컬럼1 = '컬럼1';
  • * : 컬럼을 명시하지 않고 *`를 쓰면, 테이블 내 전체 컬럼 조회
SELECT * FROM 테이블;
  • 산술 연산자 : NUMBER DATA 유형의 데이터와 함꼐 사용하는 연산자

SELECT 10+5, 10-5, 10*5, 10/5, 10%5 FROM DUAL; // 15, 5, 2, 0
  • 합성 연산자 || : 문자와 문자를 연결할 때 사용하는 연산자
SELECT '1'||'0'||'+'||'5' AS RESULT FROM DUAL; // 10+5

문자 함수

CHR(아스키 코드) : 입력된 아스키 코드에 매핑되는 문자 변환

SELECT CHR(65) FROM DUAL; // A

LOWER(문자열) : 입력된 문자열을 대문자로 변환

SELECT LOWER('SQLD') FROM DUAL; // sqld

UPPER(문자열) : 입력된 문자열을 소문자로 변환

SELECT LOWER('sqld') FROM DUAL; // SQLD

LTRIM(문자열[,{특정문자(열)}]) : 문자열 왼쪽부터 비교하여 공백 혹은 명시된 특정 문자 제거

SELECT LTRIM('      SQLD') FROM DUAL; // SQLD

RTRIM(문자열[,{특정문자(열)}]) : 문자열 오른쪽부터 비교하여 공백 혹은 명시된 특정 문자 제거

SELECT RTRIM('SQLD      ') FROM DUAL; // SQLD

TRIM([{위치}{특정문자}FROM]문자열) : 문자열 왼쪽·오른쪽 공백 혹은 옵션 지정 장소부터 제거

  • 옵션 : LEADING, TRAILING, BOTH
SELECT TRIM('      SQLD      ') FROM DUAL; // SQLD
SELECT TRIM(LEADING 'S' FROM 'SQLD') FROM DUAL; // QLD
SELECT TRIM(TRAILING 'Q' FROM 'SQLD') FROM DUAL; // SQL

SUBSTR(문자열,시작점[,{길이}]) : 문자열의 원하는 부분만 잘라 반환

SELECT SUBSTR('SQLD', 1, 2) FROM DUAL; // QL

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

SELECT LENGTH('SQLD') FROM DUAL; // 4

REPLACE(문자열,변경전 문자열,[{변경 후 문자열}]) : 문자열에서 변경 전 문자열을 찾아 변경 후 문자열로 변환

SELECT REPLACE('SQLD', 'D', 'P') FROM DUAL; // SQLP

숫자 함수

ABS({수}) : 수의 절댓값 반환

SELECT ABS(-1) FROM DUAL; // 1

SIGN({수}) : 수의 부호 반환 (1, 0, -1)

SELECT SIGN(5) FROM DUAL; // 1
SELECT SIGN(0) FROM DUAL; // 0
SELECT SIGN(-4) FROM DUAL; // -1

ROUND({수} [,{자릿수}]) : 수를 지정된 소수점 자릿수까지 반올림해 반환

SELECT ROUND(127.000000001, 0) FROM DUAL; // 127

TRUNC({수}, [,{자릿수}]) : 수를 지정된 소수점 자릿수까지 버림해 반환

SELECT ROUND(127.000000001, 9) FROM DUAL; // 127

CEIL({수}) : 소수점 이하의 수를 올림한 정수로 반환

SELECT CEIL(127.000000001) FROM DUAL; // 128

FLOOR({수}) : 소수점 이하의 수를 버림한 정수로 반환

SELECT FLOOR(127.000000001) FROM DUAL; // 127

MOD({수1}, {수2}) : 수1을 수2로 나눈 나머지를 반환

  • 수2가 0이면 수1 그대로 반환
SELECT MOD(15, 4) FROM DUAL; // 3
SELECT MOD(15, 0) FROM DUAL; // 15

날짜 함수

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

SELECT SYSDATE FROM DUAL;

EXTRACT({특정 단위} FROM {데이터}) : 날짜 데이터에서 연,월,일,시,분,초 등 단위 지정해 출력

SELECT EXTRACT(YEAR FROM SYSDATE) AS YEAR FROM DUAL; // 2024

ADD_MOUNT({날짜 데이터}, {특정 개월 수}) : 날짜 데이터에 특정 개월 수를 더한 날짜 반환

SELECT ADD_MOUNT('2024-03-07', 'YYYY-MM-DD', 2) // 2024-03-09

변환 함수

  • 명시적 형변환 : 변환 함수로 데이터 유형 변환을 명시적으로 나타냄
  • 암시적 형변환 : 데이터베이스에서 내부적으로 데이터 유형을 변환함

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

SELECT TO_NUMBER('123') FROM DUAL; // 123

TO_CHAR({수|날짜[,{포맷}]}) : 수나 날짜를 (포맷 형식의) 문자형으로 변환

SELECT TO_CHAR(123) FROM DUAL; // '123'

TO_DATE({문자열},{포맷}) : 포맷 형식의 문자형 데이터를 날짜형으로 변환

SELECT TO_DATE('2024-03-07', 'YYYYMMDD') FROM DUAL; // '2024-03-07'

NULL 관련 함수

NVL({인수1}, {인수2}) : 인수1의 값이 NULL이면 인수2, 아니면 인수1 반환

SELECT MEMBER, NVL(SCORE, 0) AS MEMBER_SCORE FROM REVIEW;

NULLIF({인수1}, {인수2}) : 인수1의 값이 같으면 NULL, 아니면 인수1 반환

SELECT MEMBER, NULLIF(SCORE, 0) AS MEMBER_SCORE FROM REVIEW;

COALESCE({인수1}, {인수2}, ...) : NULL이 아닌 최초의 인수 반환

SELECT MEMBER, COALESCE(PHONE, EMAIL, FAX) AS  CONTACT FROM REVIEW;

NVL({인수1}, {인수2}, {인수3}) : 인수1의 값이 NULL이 아니면 인수2, NULL이면 인수3 반환

SELECT MEMBER, NVL(SCORE, '리뷰 O', '리뷰 X') AS MEMBER_SCORE FROM REVIEW;

CASE : ‘~이면 ~이고, ~이면 ~이다’ 식으로 표현되는 구문

SELECT MEMBER,
    CASE WHEN SCORE = '5' THEN '만점'
    END AS REVIEW_DATA
FROM REVIEW;

WHERE절 : DML문을 수행할 때 원하는 데이터만 선택

SELECT 컬럼1, 컬럼2, ... FROM 테이블 WHERE (조건절);

비교 연산자 : 조건절 내에서 비교하기 위해 사용되는 연산자

SELECT MEMBER FROM REVIEW WHERE MEMBER < 10; // 10보다 작은 값 출력
SELECT MEMBER FROM REVIEW WHERE MEMBER = 10; // 10인 값 출력
SELECT MEMBER FROM REVIEW WHERE MEMBER <= 10; // 10보다 작거나 같은 값 출력
SELECT MEMBER FROM REVIEW WHERE MEMBER <> 0; // 10과 같지 않은 값 출력
SELECT MEMBER FROM REVIEW WHERE MEMBER not col = 10; // 칼럼이 1이 아닌 값 출력

SQL 연산자 : 조건절 내에서 SQL이 지원하는 연산자

SELECT MEMBER FROM REVIEW WHERE MEMBER BETWEEN 1 AND 10; // 1 ~ 10인 값 출력

논리 연산자 : 조건절 내에서 논리 연산을 위해 사용되는 연산자

GROUP BY절 : 데이터를 그룹별로 묶음

  • BY 뒤에 그룹핑의 기준이 되는 하나 이상의 컬럼이 위치

집계 함수 : 데이터를 그룹핑한 뒤에 그룹별로 집계 데이터를 도출

HAVING : GROUP BY절을 수행할 때 원하는 데이터만 선택 (데이터 그룹핑에 사용)

ORDER BY절 : SELECT한 데이터 정렬

정렬의 기준이 되는 컬럼이 NULL이 포함되는 경우 : 오라클은 NULL을 최대로 보아 맨 뒤에 위치

JOIN : 다른 테이블을 한번에 결합하여 표현

EQUI JOIN : = 조건으로 JOIN

SELECT A.CODE, A.NAME, B.ID, B.CONTENT
FROM PRODUCT A, PRODUCT_REVIEW B
WHERE A.PRODUCT_CODE = B.PRODUCT_CODE;

Non EQUI JOIN : =이 아닌 BETWEEN, >, >=, <, <= 조건으로 JOIN

SELECT A.CODE, A.NAME, B.ID, B.CONTENT
FROM PRODUCT A, PRODUCT_REVIEW B
WHERE B.DATE BETWEEN A.START_DATE AND A.END_DATE;

OUTER JOIN : 테이블 옆에 (+)을 붙어 JOIN 조건에 만족하지 않는 행들도 출력

SELECT A.CODE, A.NAME, B.ID, B.CONTENT
FROM PRODUCT A, PRODUCT_REVIEW B
WHERE A.PRODUCT_CODE = B.PRODUCT_CODE(+);

STANDARD JOIN : 여러 데이터베이스에서 표준으로 활용되는 JOIN

DB 벤더마다 SQL 문법 차이가 너무 크면 호환성·효율성에 문제가 발생하므로 ANSI SQL 지정

INNER STANDARD JOIN : ON으로 작성된 JOIN 조건에 충족하는 데이터만 출력

FROM PRODUCT A INNER JOIN PRODUCT_REVIEW B
    ON A.PRODUCT_ID = B.PRODUCT_ID;

OUTER STANDARD JOIN : JOIN 조건에 만족하지 않는 행들도 출력

LEFT OUTER JOIN : 왼쪽에 표기된 테이블들은 무조건 출력
  • 오른쪽에 JOIN되는 데이터가 없는 ROW는 오른쪽 컬럼의 값이 NULL

SELECT A.CODE, A.NAME, B.ID, B.CONTENT
FROM PRODUCT A LEFT OUTER JOIN PRODUCT_REVIEW B
    ON A.PRODUCT_ID = B.PRODUCT_ID;
RIGHT OUTER JOIN : 오른쪽에 표기된 테이블들은 무조건 출력
  • 왼쪽에 JOIN되는 데이터가 없는 ROW는 왼쪽 컬럼의 값이 NULL

SELECT A.CODE, A.NAME, B.ID, B.CONTENT
FROM PRODUCT A RIGHT OUTER JOIN PRODUCT_REVIEW B
    ON A.PRODUCT_ID = B.PRODUCT_ID;
FULL OUTER JOIN : 왼쪽, 오른쪽에 표기된 테이블을 모두 출력
  • LEFT OUTER JOINRIGHT OUTER JOIN의 합집합 (단, 중복값은 제거)

NATURE JOIN : 테이블에 같은 이름을 가진 컬럼들이 모두 동일한 데이터를 가지면 JOIN
SELECT *
FROM RUNNING_MAN A NATURAL JOIN INFINITE_CHALLENGE B;
CROSS JOIN : 테이블 사이에 JOIN이 없으면, 조합할 수 있는 모든 경우 출력

SELECT A.CODE, A.NAME, B.ID, B.CONTENT
FROM ENTERTAINER A CROSS JOIN DRINK B;

태그:

업데이트: