
SQL : 데이터베이스와 대화를 하기 위한 언어
Query(쿼리) : SQL 언어를 이용해 데이터베이스에 요청을 하는 질의
테이블 : 엑셀과 유사한 구조로 데이터를 가진다(각 열을 '컬럼'이라고 부른다)
※SQL 구문
◆조회
SELECT : 데이터를 가져오는 기본 명령어, 데이터를 조회하는 모든 Query에 사용됨
FROM : 데이터를 가져올 테이블을 특정해주는 문법
SELECT * FROM test (test에 있는 모든 컬럼을 조회함))* 대신 컬럼을 필요한 컬럼을 적으면 그 컬럼만 가져옴
컬럼 이름 뒤에 "별명" 붙이면 (한글, 특수문자) 별명을 적기 가능
예시 :
SELECT restaurant_name "음식점", addr address
FROM food_orders
◆조건
WHERE : 조건문 (Ex. where age = 20 )
<> : 같지 않다(Not)
BETWEEN : A와 B 사이의 범위 조건
(Ex. WHERE age BETWEEN 10 AND 20 --> 10에서 20 사이)
IN : '포함'하는 조건 주기
(Ex. WHERE name IN ('홍길동', '김첨지') )
LIKE : 완전히 같지 않지만, 비슷한 값을 조건으로 주기
(Ex. WHERE name LIKE '김%')
◆기본 연산
SUM(컬럼) : 컬럼의 합계를 구함
(Ex. SELECT SUM(age) FROM customers )
AVG(컬럼) : 컬럼의 평균을 구함
(Ex. SELECT AVG(age) FROM customers )
MIN(컬럼) : 컬럼의 최소 값을 가져옴
(Ex. SELECT MIN(price) FROM food_orders )
MAX(컬럼) : 컬럼의 최대 값을 가져옴
(Ex. SELECT MAX(price) FROM food_orders )
COUNT(컬럼) : 몇개의 데이터 or 값 가지고 있는지 구할 때
(Ex. SELECT COUNT(age) FROM customers )
데이터 개수 : 컬럼명 대신 '1' 혹은 '*' 사용 가능
(Ex. SELECT COUNT(1) FROM food_orders )
DISTINCT : 몇개의 값을 가지고 있는지 구할 때
(Ex. SELECT COUNT(DISTINCT customer_id) FROM food_orders )
◆그룹 분할
GROUP BY 컬럼 : 여러번의 Query 없이, 카테고리를 지정해 수식 함수로 연산
SELECT name, MIN(age)
FROM customers
GROUP BY age
◆정렬
ORDER BY 컬럼 : 원하는 컬럼을 오름차순 or 내림차순으로 정렬
SELECT name, MIN(age)
FROM customers
GROUP BY age
ORDER BY age desc
◆구문 순서
SELECT -> FROM -> WHERE -> GROUP BY -> ORDER BY
◆문자
SELECT addr REPLACE(addr, '문곡리', '문가리')
FROM food_orders
SELECT addr SUBSTR(addr, 1, 2)
FROM food_orders
SELECT restaurant_name, addr, CONCAT('[서울]', restaurant_name)
FROM food_orders
◆조건2
SELECT IF(addr like '%평택군%', REPLACE(addr, '문곡리', '문가리'), addr)
FROM food_orders
SELECT CASE WHEN cuisine_type = 'Korean' THEN '한식'
WHEN cuisine_type IN ('Japanese', 'Chinese) THEN'아시아'
ELSE '기타' END "음식타입"
FROM food_orders
◆형 변환
◆Subquery
SELECT order_id, restaurant_name, food_preparation_time
FROM
(
SELECT order_id, restaurant_name, food_preparation_time
FROM food_orders
) a
◆조인 : 서로 다른 테이블이 공통의 컬럼을 가지고 있다면, 공통 컬럼을 기준으로 두 테이블을 합친다
SELECT *
FROM food_orders f LEFT JOIN payments p ON f.order_id = p.order_id
SELECT *
FROM food_orders f INNER JOIN payments p ON f.order_id = p.order_id