[SQLD] 2. SQL 기본
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 JOIN와RIGHT 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;