DATABASE

총정리

태태코 2023. 1. 14. 12:56
반응형


도대체 sql이 왜 필요한가???

장사를 하는 중 문제가 생겼을 때 빠르고 정확하게 특정 데이터를 받아오기 위해서 사용한다.

장점: DATA BASE에 방대한 양을 저장할 수 있다, 방대양 양을 빠르게 불러올 수 있다.



@즉 데이터를 잘 꺼내오기 위해서 사용하는 것이다.



CRUD:

C:Create -> 데이터 생성

R:Read -> 저장된 데이터를 읽어 오는 것

U:Update -> 저장된 데이터를 변경!

D:Delete -> 저장된 데이터를 삭제하는 것을 의미.



SELET -> 어떤 테이블에서 어떤 필드에서 데이터를 가져오는 가??

ex) SELECT order_no, created_at, user_id, email FROM orders

문법                   필드                                                   문법       데이터

자동완성시 별칭이 붙을 수 있다. ex) e,d

select 에 부속 조건 where



show tables ---> 테이블의 목록을 볼 수 있다.

where절에 따라오는 부속

* !=  같지않다.

* between     and --> 어디부터 어디 사이

* in (1,3) 괄호안에 있는 숫자 즉 포함된 숫자를 나타내라

*like -> 문자열 비교 '%daum.net' %-> 앞에 뭐가 있던 간에 뒤에 문장으로 끝나는 것을 의미한다.



퀴즈

1. 결제수단이 CARD가 아닌 주문데이터만 보기

SELECT * FROM orders

WHERE payment_method != 'CARD'



2. 20000~30000 포인트 보유하고 있는 유저만 추출해보기

SELECT * FROM point_users

where point BETWEEN 20000 and 30000



3. 이메일이 s로 시작하고 com으로 끝나는 유저만 추출해보기

SELECT * FROM users

WHERE email like 's%.com'



4. 이메일이 s로 시작하고 com으로 끝나면서 성이 이씨인 유저만 추출해보기

SELECT * FROM users

WHERE email like 's%.com' and name LIKE '이%'





Limit -> 많은 목록 들중에 원하는 갯수만큼만 보고싶을 때 사용

distinct -> 중복을 제거하고 출력



통계적인 숫자를 뽑아보자 
SELECT  name, COUNT(*)  from users group by name
group by ---->묶어라
이름별로 묵어 줘라

주차별로 묶은 것을 카운트해라
SELECT week ,COUNT(*)  from checkins 
group by week 

round(avg(like))
---->평균을 반올림하자

count() 숫자를 세는 것

order by ---> 순서정렬
desc --->내림차순으로 정렬

group by와 별계로 사용된다.


앱개발 종합반의 결제 수단별 주문 건수 세어보기

SELECT payment_method ,COUNT(*) from orders
WHERE course_title LIKE '앱개발 종합반'
GROUP BY payment_method 


Gmail을 사용하는 성씨별 회원수 세어보기

SELECT  name, COUNT(*) from users
WHERE email LIKE '%gmail.com'
GROUP BY  name

*조회하는 팁
먼저 테이블을 전체를 관람하고.
내가 무엇을 원하는 지 파악한다.
필드를 확인하고 통계를 낸다.

courde_id별 평균 like 갯수를 구하기

SELECT  course_id, ROUND(AVG(likes))  from checkins 
group by course_id 


별칭 ---> alias
쿼리가 길어질 수록 헷갈리게 되는데  너무 긴 것을 별칭을 붙이면 편하다.

ex) select * from orders o
where o.course_title = '앱개발 종합반'

select 목록에 있는 이름이 마음이 안들때는 
count(*) as cnt ---->하면 별칭을 이용할 수 있다.

day3

join ---> 테이블이 나누어 져있는데 어떠한 한 기준으로 테이블을 병합시킨다.
*두 테이블의 공통된 정보를 기준으로 테이블을 연결해서 한 테이블로 보는것.

sql == vlookup이랑 비슷하다.

left join 과 inner 조인만 잘써도 된다.

<left join>
users 테이블과 point_users 테이블의 공통요소로 join
SELECT  * from users u
left join point_users p
on u.user_id = p.point_user_id 


<inner join>
SELECT  * from users u
inner join point_users p
on u.user_id = p.user_id
 
투 테이블 병합하기
select * from orders o
inner join users u on o.user_id  = u.user_id 


커리가 실행되는 순서: from ->join->select 

*

SELECT  COUNT(comment) from checkins c 
inner join courses c2 on c.course_id  = c2.course_id
group by c.course_id  

~별 --->group by
조건 ---> where

leftjoin ---> 없는 것들도 join해서 통계를 내고 싶을 때 사용한다.
inner join -->공통된 녀석들만 보여준다

()
union all
()
-----> union all을 사용하면 order by가 먹히지 않는다.
합친다.


day4
subquery:
where 절과 from 절 select 절에 다른 쿼리문을 입력해서 출력하는 방식이다.
ex) select * from point_users pu
where point > (
select avg(point) from point_users pu
inner join users u on pu.user_id = u.user_id
where u.name = '이**'
)

*이씨 성을 가진 사람들의 평균보다 높은 사람들을 구하여라*

inner join을 사용하지 않을 경우
select * from point_users pu
where point>(
select avg(point) from point_users pu
where user_id in (
select user_id from users where name= '이**'
)

)

with 절에 대해 연습하자

테이블을 만들어준다
table2 as (
select course_id, count(*) as cnt_total from orders
group by course_id
)

실전에서 유용한 sql문법을 가지고 놀아보자.

select user_id, email, substring_index(email,'@',-1) from users


select 절에서 case when pu.point>10000 then '잘하고 있어요!'
else '조금만더 화이팅' end) as msg
---> if else 조건처럼 사용 가능하다.

반응형