쿼리문 순서
- SELECT : 원하는 데이터(열)을 선택
- FROM : 해당 데이터가 어떤 테이블에서 온 것인지 명시
- WHERE : 선택된 데이터에 적용할 조건을 지정 (집계함수 사용 X, 서브쿼리 활용)
- GROUP BY : 특정 열을 기준으로 그룹화
- HAVING : GROUP BY를 사용했을 때, 그룹화된 결과에 적용할 조건을 지정
- ORDER BY : 결과를 특정 열을 기준으로 정렬
- LIMIT : 조회 결과의 최대 행 수를 제한
함수
- MAX : 선택된 컬럼에서 가장 큰 값을 찾아주는 집계함수
- MIN : 선택된 컬럼에서 가장 작은 값을 찾아주는 집계함수
- DATE_FORMAT : 날짜 및 시간 형식을 변경하는 함수 ex. DATE_FORMAT('변경하고 싶은 날짜 데이터', '%Y-%m-%d')
- IFNULL : NULL 값이 있을 경우 대체 ex. IFNULL(TLNO, 'NONE')
- YEAR : 연도를 필터링하는 함수
- MONTH : 월을 필터링하는 함수
- DAY : 일을 필터링하는 함수
- ROUND : 반올림하는 함수
- COUNT : 수를 세는 집계함수
- SUM : 합계를 계산하는 집계함수
- REPLACE : 특정 문자열을 찾아 바꾸는 함수 ex. REPLACE('문자열', '바꾸려는 문자열', '바뀔 문자열')
명령어
- JOIN: 두 개 이상의 테이블을 결합하기 위해 사용하는 구문 ex. JOIN ICECREAM_INFO ON FIRST_HALF.FLAVOR = ICECREAM_INFO.FLAVOR
- LEFT JOIN : 왼쪽 테이블을 기준을 A, B 테이블 비교해서 B 테이블에 조건에 해당하는 값이 있따면 그 값을 가져오고, 없다면 NULL 값을 가져옴
- RIGHT JOIN : 오른쪽 테이블을 기준을 A, B 테이블 비교해서 A 테이블에 조건에 해당하는 값이 있다면 그 값을 가져오고, 없다면 NULL 값을 가져옴
연산자
비트 연산자 설명
& | 대응되는 비트가 모두 1이면 1을 반환함. (AND 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함. (XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (NOT 연산) |
<< | 지정한 수만큼 비트를 전부 왼쪽으로 이동시킴. (left shift 연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산) |
UNION | 이상의 쿼리 결과를 결합하는 데 사용되는 연산자로, UNION은 중복된 행을 제거하며 ALL 키워드와 같이 쓰일 경우 중복된 행을 유지하고 모든 결과를 결합 |
ANY | 다중 행 연산자로 < , > , = 등과 같이 쓰이며 만족하는 조건이 하나라도 충족 시 결과를 리턴한다. |
ALL | 다중 행 연산자로 < , > , = 등과 같이 쓰이며 조건이 모두 만족해야 결과를 리턴한다. |
예시
어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미할 때 이를 확인하기 위해서 아래와 같이 사용
-- 코드를 작성해주세요
SELECT DISTINCT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D
JOIN SKILLCODES S ON D.SKILL_CODE & S.CODE = S.CODE
WHERE S.CATEGORY = 'Front End'
ORDER BY D.ID
기타 키워드
- AS : 별칭 지정 키워드 (alias)
- DESC : ORDER BY 내림차순 키워드
- ASC : ORDER BY 오름차순 키워드 (Default)
- IN : WHERE절의 포함 조건을 지정할 때 사용하는 키워드
- NOT IN : WHERE절의 불포함 조건을 지정할 때 사용하는 키워드
- LIKE : 특정 패턴을 검색할 때 사용하는 키워드
- %: 0개 이상의 문자를 대체합니다.
- _: 정확히 하나의 문자를 대체합니다.
- <> : 같지 않음을 뜻하는 키워드
- DISTINCT : 중복된 행을 제거하는 데 사용
- IS NULL : 데이터가 존재하지 않는 지 확인하는데 사용
- IS NOT NULL : 데이터가 존재하는지 확인하는데 사용
- BETWEEN A AND B : 특정 값이 A 이상 B 이하인 모든 행을 선택
- WITH : SQL 쿼리 내에서 임시 결과 집합을 정의할 때 사용되며 이를 통해 한 번 이상의 쿼리에서 사용되는 임시 테이블이나 서브쿼리를 만들 수 있음. AS를 사용해서 임시 테이블의 이름을 해당 쿼리에 연결하는 역할을 함
- with recursive time as ( select 0 as hour union all select hour+1 from time where hour<23)
- RECURSIVE : WITH 절에서 재귀적인 쿼리를 정의할 때 사용
⚠️ 코딩테스트에 자주 나오는 SQL문
CASE문
SQL에서 조건에 따라 다른 값을 반환하는 데 사용되는 기능
CASE
-- WHEN절은 조건을 나타내며,
-- 해당 조건이 TRUE면 THEN절에 지정된 결과 반환
-- ELSE절은 모든 WHEN 절의 조건이 거짓일 때 반환될 기본 값
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
...
ELSE 기본값
END
(예시) CASE문을 사용하여 주문된 제품의 수량에 따라 가격을 계산하는 쿼리
주문된 제품의 수량에 따라 적용되는 할인을 고려하여 총 가격을 계산하는 쿼리로 예를 들어, 수량이 10개 이상이면 10%의 할인이 적용되고, 수량이 5개 이상이면 5%의 할인이 적용
SELECT
product_name,
quantity,
CASE
WHEN quantity >= 10 THEN unit_price * quantity * 0.9
WHEN quantity >= 5 THEN unit_price * quantity * 0.95
ELSE unit_price * quantity
END AS total_price
FROM
orders;
SELF JOIN
하나의 테이블을 두 번 사용하여 테이블 내의 데이터를 비교하거나 결합하는 SQL 작업으로 이를 통해 테이블 내 각 레코드가 자체 레코드가 자체 테이블의 다른 레코드와 비교되거나 결합될 수 있음
- 계층 구조 분석: 트리 구조나 조직도와 같은 계층적 데이터를 다룰 때 셀프 조인이 유용 ex. 각 부서에 대한 관리자의 정보를 찾거나, 각 직원의 상사 정보를 파악
- 자기 참조 테이블: 테이블이 자체를 참조하는 경우가 있는데 예를 들어, 계층적 데이터 모델링에서 사용 ex. 조직의 부서 테이블에서 각 부서의 상위 부서를 나타내는 부모 부서 ID를 가질 수 있는데, 이 경우 SELF JOIN을 사용하여 부서와 해당 부모 부서 간의 관계를 파악
- 데이터의 비교 및 분석: 동일한 테이블 내의 데이터를 비교하어 패턴을 찾거나 특정 조건을 충족하는데이터를 선택할 수 있음 ex. 날짜별로 주문량을 비교하거나 특정 범주의 제품을 비교하는 등의 작업
SELECT t1.column1, t2.column2
FROM table t1
JOIN table t2 ON t1.common_column = t2.common_column;
(예시) 사원 테이블에 각 사원의 이름, 관리자의 ID 등이 포함되어 있을 때 각 사원의 관리자 이름을 찾는 쿼리
employees 테이블을 자체적으로 결합하여 각 사원의 관리자의 이름을 검색합니다. 이를 통해 각 사원과 그들의 관리자 간의 관계를 파악
SELECT e.employee_name, m.employee_name AS manager_name
FROM employees e
JOIN employees m ON e.manager_id = m.employee_id;
GROUP BY문
특정 열을 기준으로 행을 그룹화하고 그룹에 대한 집계 함수를 적용하는 데 사용
- GROUP BY 절에 나열된 열 이외의 열은 집계 함수에 포함되지 않은 경우에는 SELECT 목록에 포함할 수 없음
- 집계 함수로는 COUNT, SUM, AVG, MIN, MAX 등이 주로 사용
-- 열1은 그룹화의 기준이 되는 열을 나타냄
-- 집계함수(열2)는 그룹화된 데이터에 적용할 집계 함수를 나타냅
SELECT 열1, 집계함수(열2)
FROM 테이블
GROUP BY 열1;
(예시) 각 제품의 총 주문량과 총 판매액을 구하는 쿼리
SELECT product_id, SUM(quantity) AS total_quantity, SUM(price) AS total_sales
FROM orders
GROUP BY product_id;
'개발 기초 > 언어' 카테고리의 다른 글
[JavaScript] 힙 자료구조 (1) | 2024.06.30 |
---|---|
[JavaScript] 입력 받기 (0) | 2024.06.30 |
[Java] 변수와 자료형 (0) | 2024.06.30 |
[Java] 입출력 (0) | 2024.06.30 |
[Java] 코드 구조 (0) | 2024.06.30 |