[스파르타코딩클럽]SQL명령문 정리...

2021. 10. 26. 12:41SQL공부

데이터베이스는 CRUD에 해당하는 기능을 지원해요.

C (Create): 데이터의 생성을 의미합니다
R (Read): 저장된 데이터를 읽어오는 것을 의미해요
U (Update): 저장된 데이터를 변경!
D (Delete): 저장된 데이터를 삭제하는 것을 의미해요
===================================

where 컬럼 명 = '조건'  <-- 조건 검색

조건 앞에 > < = != 와 같은 기호를 사용하여 다양한 조건을 지정할 수 있다.

And를 이용하여 추가 조건을 지정할 수 있다...

==================================

쿼리 작성 전 팁

1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 조건을 걸 필드를 찾기
5) select * from 테이블명 where 조건 이렇게 쿼리 완성!

==================================

where 절에는 between으로 검색 범위를 지정할 수 있다. 
( ex. where created_at between "2020-07-13" and "2020-07-15"; )

in을 이용하여 포함하는 조건으로 지정할 수 있다.

(ex. where week in (1, 3);)

Like를 이용하여 패턴을 조건으로 지정할 수 있다.

(ex. where email LIKE '%daum.net')

특정 테이블의 구조나 자료 형태를 파악하기 위해서 이용할때 데이터가 너무 많으면
limit 5 와 같이 몇 줄만 지정하여 출력할 수 있다.

명령어들은 조합하여 사용이 가능하다.

where updated_at BETWEEN "2020/07/12" AND "2020/07/14" <-- 2020/07/12~13일까지의 
and email like "%gmail.com" <-- gmail 도메인을 사용하는 이메일 데이터를 검색한다.

BETWEEN "2020/07/12" AND "2020/07/14" 인 이유는 
12일 00시부터 14일 00시까지 검색하라는 말이 되므로 13일까지 검색하려면 위와 같은 조건이다.

==================================

select절에서는

Distinct라는 명령어를 사용하여 중복 데이터는 제외하고 가져올 수 있다.

(ex. select distinct(payment_method) from orders;)

Count라는 명령어를 사용하면 컬럼의 데이터 개수를 알 수 있다.

( ex. select count(*) from orders ) - *을 사용하면 전체이지만 괄호안에 컬럼명을 기입할 수 있다.

중복하여 같이 사용할 수도 있는데...

select distinct(name) from users; <-- name 칼럼에 중복값을 제거하고

select count(distinct(name)) from users; <-- 최종 칼럼의 데이터 개수를 확인하기

=======================================================

Group by란?

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미해요.

=======================================================

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

1. from users: users 테이블에서 데이터를 불러옵니다
2. group by name: name이라는 필드에서 동일한 값을 갖는 데이터를 하나로 합쳐줍니다
3. select name, count(*): 이름과 count(*)를 출력해 주는데, 

여기서 count(*)는 group by로 합쳐진 데이터의 개수를 세어주는 것

동일한 범주 특정 필드의 최솟값은 min(필드명)을 사용해서 해요.

동일한 범주 특정 필드의 최댓값은 max(필드명)을 사용해서 해요

동일한 범주 특정 필드의 평균값은 avg(필드명)을 사용해서 해요.

동일한 범주 특정 필드의 합계는 sum(필드명)을 사용해서 해요. 

=======================================================

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

=======================================================

Join이란?

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

예) user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어요!

SELECT *
FROM users u inner join orders o 
on u.user_id = o.user_id 

SQL의 Join은 엑셀의 vlookup과 동일

=======================================================

Join의 종류: Left Join, Inner Join

 

Inner Join

 

Left 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 * : 붙여진 모든 데이터를 출력합니다.

inner join 은 교집합, left join 은 첫번째 원에 붙이는 것!

그래서! left join은 어디에 → 뭐를 붙일건지, 순서가 중

=======================================================

Subquery

하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는 것을 의미합니다.

users 와 orders 의 inner join으로!

select u.user_id, u.name, u.email from users u
inner join orders o on u.user_id = o.user_id
where o.payment_method = 'kakaopay'

< -- 이걸 직관적으로 서브쿼리로 변경을 하면 -- >

1. 우선 kakaopay로 결제한 user_id를 모두 구해보기 → `K` 라고 합시다.

select user_id 
from orders
where payment_method = 'kakaopay'

2. 그 후에, user_id가 `K` 에 있는 유저들만 골라보기

→ 이게 바로 서브쿼리!

select u.user_id, u.name, u.email 
from users u
where u.user_id in (
select user_id from orders
here payment_method = 'kakaopay'
)

'SQL공부' 카테고리의 다른 글

[SQLD]준비과정  (0) 2021.11.04
SQL 기본 명령어 분류  (0) 2021.10.30
[스파르타코딩]4주차 SQL  (0) 2021.10.24
[스파르타코딩클럽]3주차 SQL  (0) 2021.10.24
[스파르타코딩클럽]최종과제 연습  (0) 2021.10.24