데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미입니다.
1) 어떤 테이블에서 2) 어떤 필드의 데이터를 기져올지 로 구성됩니다.
select * from (table) -> 특정 table의 데이터 가져오기
select (field) from (table) -> 특정 table의 특정 field의 데이터 가져오기
Where 절은, Select 쿼리문으로 가져올 데이터의 조건을 걸어주는 것을 의미합니다.
select * from orders where payment_method = "kakaopay";
"orders 테이블에서 payment_method가 kakaopay인 것만 가져오기"
(kakaopay는 필드명이나 테이블 명이 아닌 문자열로 인식시키기 위해 ""을 써줘야 됩니다.)
자주 같이 쓰는 문법
이외 유용한 문법
Group by는 범주의 통계를 내줍니다.
select name, count(*) from users
group by name;
👉 위 쿼리가 실행되는 순서 : from → group by → select
select 범주가 담긴 필드명, ⭐ from 테이블명 group by 범주가 담긴 필드명;
⭐ 위치에 원하는 값들을 구하기 위해서 count, min, max, avg, sum을 넣어서 구할 수 있습니다.
Order by는 정렬을 하기 위해 사용되고 모든 SQL 쿼리에 적용될 수 있는 기능입니다.
기본적으로 오름차순으로 정렬이 되고 뒤에 desc를 붙이면 내림차순으로 정렬됩니다.
select name, count(*) from users
group by name
order by count(*);
👉 위 쿼리가 실행되는 순서 : from → group by → select → order by
💡Alias
쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있습니다. 그래서 SQL은 Alisas라는 별칭 기능을 지원해 테이블명 뒤에 as를 붙여서 별칭을 추가하여 혼동을 최소화하고 원하는 이름으로 결과를 출력할 수 있습니다.
두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미합니다. 무언가 연결된 정보가 있을 때, 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아놓습니다. 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'라고 부릅니다.
어디에 뭐를 붙일건지, 순서가 중요
교집합
select * from enrolleds e
inner join courses c
on e.course_id = c.course_id;
👉 위 쿼리가 실행되는 순서: from → join → select
항상 from에 들어간 테이블을 기준으로, 다른 테이블이 붙는다고 생각하고 Join의 실행순서는 항상 from과 붙어다닌다고 생각하면 편합니다!
결과물을 합치기 위해서 Union을 쓸 수 있지만 내부 정렬이 먹지 않습니다. 그래서 이럴 때 Subquery를 사용하면 됩니다.
Subqurey란 쿼리 안의 쿼리라는 의미입니다. Subquery를 사용하지 않아도 원하는 데이터를 얻어낼 수 있겠지만, 더 편하고 간단하게 원하는 데이터를 얻기 위해 사용되는 기능입니다. Subquery는 where, select, from 절에서 유용하게 사용되고 with구문을 이용해서 더 간단하게 쿼리문을 작성할 수 있습니다.
select user_id, email, SUBSTRING_INDEX(email, '@', 1) from users
👉 @를 기준으로 텍스트를 쪼개고, 그 중 첫 번째 조각을 가져오라는 뜻!
select user_id, email, SUBSTRING_INDEX(email, '@', -1) from users
👉 @를 기준으로 텍스트를 쪼개고, 그 중 마지막 조각을 가져오라는 뜻!
select order_no, created_at, substring(created_at,1,10) as date from orders
👉 orders 테이블에서 created_at을 날짜까지만 출력하게 하라는 뜻!
select pu.point_user_id, pu.point,
case
when pu.point > 10000 then '1만 이상'
when pu.point > 5000 then '5천 이상'
else '5천 미만'
END as lv
from point_users pu
👉 10000점보다 높은 포인트를 가지고 있으면 '잘 하고 있어요!', 평균보다 낮으면 '조금 더 달려주세요!' 라고 표시하라는 뜻!
출처 : [스파르타코딩클럽] 엑셀보다 쉬운 SQL 강의자료