Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
Algorithm Study/SQL

SQL 기초 문법

by Toughie 2023. 9. 24.

1. SELECT

SELECT * #컬럼
FROM sample #테이블명
LIMIT 10 #몇 행

테이블에서 데이터 추출

* 아스타 -> 모든 항목, 혹은 특정 컬럼명(ex price) 선택 가능


2. ORDER BY

오름차순 정렬

SELECT *
FROM product_list
ORDER BY price #가격 열 오름차순
LIMIT 100

내림차순 정렬

SELECT *
FROM product_list
ORDER BY price DESC #가격 열 내림차순
LIMIT 100

여러 조건 정렬

SELECT *
FROM product_list
ORDER BY year, month, day
LIMIT 100

3. count

테이블 행의 개수

SELECT COUNT(*)
FROM sales_list

4. GROUP BY

SELECT year, COUNT(*)
FROM sales_list
GROUP BY year

연도별로 데이터의 개수가 뽑힐 것

SELECT year
FROM sales_list
GROUP BY year

중복이 제거된 연도들만 나옴. (중복 제거를 위해서도 사용 됨)


5. WHERE

SELECT *
FROM student_list
WHERE gender = 'MALE'
limit 100

성별이 'MALE'인 데이터만 추출됨.

SELECT *
FROM student_list
WHERE gender = 'FEMALE'
AND height = 160
LIMIT = 100

AND를 통해 조건을 추가해줌.

SELECT *
FROM student_list
WHERE gender = 'FEMALE'
OR height = 160
LIMIT = 100

성별이 여성이거나, 키가 160인 데이터를 추출함 


6. CASE (WHEN, THEN,  ELSE, END)

SELECT price, year,
	CASE 
        WHEN price <= 1000 THEN '1000원 이하'
        WHEN price <= 3000 THEN '3000원 이하'
        ELSE '3000원 초과'
       END AS '기준'
FROM sales_list
LIMIT 100

'기준'이라는 컬럼이 생기고, 조건에 맞는 데이터(THEN 이후)가 생긴다. 


7. LIKE NOT LIKE

SELECT *
FROM student_list
WHERE name LIKE '김%'
LIMIT 100

이름이 '김' 으로 시작하는 학생들의 데이터

SELECT *
FROM student_list
WHERE name LIKE '%철%'
LIMIT 100

이름 중간에 '철'이 들어가는 학생들의 데이터 (철의 앞 뒤로는 어떤 글자가 와도 상관 없다. ex. 이철상, 김철호)

SELECT *
FROM student_list
WHERE name NOT LIKE '홍%'
LIMIT 100

'홍'으로 시작하는 이름을 제외한 학생들의 데이터 


8. SUB QUERY

SELECT *
FROM (
	SELECT location, COUNT(*) as cnt
	FROM property_list
	GROUP BY location
) a
WHERE cnt > 100
SELECT a.*, 
	case when cnt <= 200 then '200개 이하' else '200개 초과' end
FROM (
	SELECT location, COUNT(*) cnt #AS 생략
	FROM property_list
	GROUP BY location
) a

9. INNER JOIN

이상의 테이블에서 데이터를 결합하여 새로운 결과 집합을 생성하는 사용.

INNER JOIN 사용하면 테이블 간의 공통 값을 기준으로 레코드를 결합.

(양 테이블에 데이터가 존재하는 것만 나옴)

SELECT a.name, a.size, b.price
FROM property_list a, area_info b
WHERE a.area_info = b.area_info
LIMIT 5

두 테이블을 결합, 여기서 조인키는 area_info

SELECT *
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;

이 커리문에서 조인키는 customer_id 


10. OUTER JOIN

  • LEFT OUTER JOIN ( LEFT JOIN)
    왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블과 일치하는 행이 있는 경우 해당 행을 포함.
    오른쪽 테이블의 일부 행이 일치하지 않는 경우에도 왼쪽 테이블의 모든 행을 유지함. (NULL로 표시)

  • RIGHT OUTER JOIN (RIGHT JOIN)
    LEFT OUTER JOIN의 반대. 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블과 일치하는 행이 있는 경우 해당 행을 포함.
    왼쪽 테이블의 일부 행이 일치하지 않는 경우에도 오른쪽 테이블의 모든 행을 유지함.

  • FULL OUTER JOIN (FULL JOIN): 양쪽 테이블의 모든 행을 반환하며, 일치하는 행이 있는 경우 해당 행을 포함합니다. 어느 테이블에만 존재하는 행도 결과에 포함됨.
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id

department_id를 키로, employees 테이블의 데이터를 전부 표시함. 
만약 어떤 직원이 부서에 소속되지 않았다면, 해당 직원의 department_name은 NULL로 표시됨.


11. SUM, MIN, MAX, AVG

SELECT year
	,SUM(price)
        ,MIN(price)
        ,MAX(price)
        ,AVG(price)
FROM property_list
GROUP BY year

부동산 리스트에서 연도별로 해당 연도의 가격의 총합, 최솟값, 최댓값, 평균을 알 수 있다.