[MySQL] 문법 정리

재피터노트북·2022년 11월 7일
0

데이터베이스

데이터베이스란? 여러 사람들이 같이 사용할 목적으로 데이터를 담는 통
C (Create): 데이터의 생성을 의미
R (Read): 저장된 데이터를 읽어오는 것을 의미
U (Update): 저장된 데이터를 변경!
D (Delete): 저장된 데이터를 삭제하는 것을 의미

Select 쿼리문의 개념

👉 쿼리(Query)문이란? 쿼리는 질의를 의미. 데이터베이스에 명령을 내리는 것을 의미함. 여기서 Select 쿼리문은, 데이터베이스에서 '데이터를 선택해서 가져오겠다'는 의미.

  • checkins: 여러분이 강의실 들어오시며 남기는 '오늘의 다짐'이 들어있어요
  • courses: 스파르타의 개설 강좌 정보가 들어있음.
  • enrolleds: 유저별 강좌 등록정보가 들어있음
  • enrolleds_detail: 유저별 들을 수 있는 영상과, 들었는지 여부가 들어있음
  • orders: 주문 (수강등록) 정보가 들어있음
  • point_users: 유저별 포인트 점수가 들어있음
  • users: 유저 정보가 들어있음

select / where 쿼리문

select * from orders
where payment_method = "kakaopay";
select * from point_users
where point > 20000;

between

select * from orders
where created_at between "2020-07-13" and "2020-07-15";

포함 조건 in

select * from checkins 
where week in (1, 3);

'패턴' (문자열 규칙) 조건

select * from users 
where email like '%daum.net';

일부 데이터만 가져오기: Limit

select * from orders 
where payment_method = "kakaopay"
limit 5;

중복 데이터는 제외하고 가져오기: Distinct

select distinct(payment_method) from orders;

몇 개인지 숫자 세보기: Count

select count(*) from orders

[응용] Distinct와 Count를 같이 써보기

SELECT count(distinct(name)) from users;

SQL 쿼리가 실행되는 순서

select name, count(*) from users
group by name;

위 쿼리가 실행되는 순서: from → group by → select

Group by

Group by는 동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내줌.

동일한 범주의 개수 구하기

select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;

동일한 범주에서의 최솟값 구하기

select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

동일한 범주에서의 최댓값 구하기

select 범주가 담긴 필드명, max(최댓값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

동일한 범주의 평균 구하기

select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

동일한 범주의 합계 구하기

select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;

Order by 쿼리가 실행되는 순서

select name, count(*) from users
group by name
order by count(*);

위 쿼리가 실행되는 순서: from → group by → select → order by

Join 이란?

두 테이블의 공통된 정보 (key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미함.

  • Left Join

  • 여기서 A와 B는 각각의 테이블을 의미함. 둘 사이의 겹치는 부분은, 뭔가 테이블 A와 B의 key 값이 연결되는 부분

  • select * from users u
    left join point_users p
    on u.user_id = p.user_id;
  • Inner Join

  • 여기서 A와 B는 각각의 테이블을 의미. 이 그림은, 두 테이블의 교집합을 의미.

select * from users u
inner join point_users p
on u.user_id = p.user_id;

Join 쿼리가 실행되는 순서

select * from enrolleds e
inner join courses c
on e.course_id = c.course_id;

위 쿼리가 실행되는 순서: from → join → select
1. from enrolleds: enrolleds 테이블 데이터 전체를 가져옵니다.
2. inner join courses on e.course_id = c.course_id: courses를 enrolleds 테이블에 붙이는데, enrolleds 테이블의 course_id와 동일한 course_id를 갖는 courses의 테이블을 붙입니다.
3. select * : 붙여진 모든 데이터를 출력합니다.

profile
난 이 재 선

0개의 댓글