종우의 삶 (전체 공개)

SQL 3-4주차 문법 정리 본문

일지

SQL 3-4주차 문법 정리

jonggae 2023. 4. 27. 20:21

엑셀보다 쉬운(...) sql 4주차를 마무리하고 그동안 배운 문법들을 정리해본다.

본인 엑셀도 잘 못하지만 sql은 훌륭한 튜터님 덕분에 조금이나마 알게된 것 같다.

 

1주차 : Select, Where

2주차 : Group by, Order by

3주차 : Join

4주차 : Subquery (Case, With 등)

 

-----

1주차

 

select의 경우 말 그대로 데이터를 선택해서 가져오는(불러오는) 명령어이다.

 

select * from data

 

같은 형식으로 작성한다. *은 data테이블이 가지고 있는 모든 정보들을 보여준다.

 

where의 경우 조건을 거는 것으로

만약 data 에서 number  값이 0인 것만 불러오고 싶다면

 

select * from data

where number = 0

 

where string = 'Hi'

 

이렇게되면 number가 0인 데이터, string이 Hi인 데이터만 볼 수 있다. 뭐 이런식이다.

부등호, 문자열, 여러 종류의 조건 and 등등 다양한 기타 명령어도 있다.

!= 같지 않음

between 조건의 범위

in 조건의 포함

like % (퍼센트 중요) 패턴 등등 다양한 사용법이 있다.

limit 일부 데이터의 표현

count 해당 데이터의 개수

distinct 중복데이터 삭제

 

가장 기본적인 명령어들이다. 이렇듯...

우선 1주차는 간단하다.. 아주 간단해..

 

-----

2주차

 

데이터의 통계를 구할 수 있는 group by, order by 를 시작한다.

 

이 명령어가 없으면, 많은 단계가 필요한 작업을 간소화 할 수있다. 

 

Group by 동일한 범주의 데이터를 묶어 범주별 통계를 내준다.

 

select name, count(*) from names

group by name

 

이를테면 names의 자료들이 김**, 이**, 박**, 최**의 많은 형태로 이루어져 있다면

group by는 같은 김** 이** 박** 최** 들을 한 데 묶어 준다.

count를 사용하면 김 이 박 최 성씨를 가진 데이터가 몇개인지 쉽게 파악할 수 있겠다.

 

Order by 데이터의 정렬

 

무작위로 널부러져있는 데이터들을 오름차순, 내림차순으로 정리해준다

 

order by name(정리할 기준) asc (오름차순 ; 기본, 적지 않아도 됨) desc (내림차순, 적어줌)

 

2주차엔 함께 min, max, sum등 수학적인 명령어도 등장하였다.

앞의 명령어를 대치 할 수 있는 알리아스도 배웠다. 아무튼 잊지 말아주세요~

 

2주차 까진 그래도 쉽다. 그래도...

 

-----

3주차

Join이 등장했다. 쪼인

 

여러 테이블의 정보를 연결하여 데이터를 보기 좋게 만들 수 있다.

테이블에 공통된 key값이 존재한다면 그 데이터들은 연결될 수 있다.

 

Left joininner join 이 있다. 걍 둘다 어렵다

 

예를들어..

select * from users u

inner join point_users p

on u.user_id = p.user_id

 

이런식의 진행인데 각 테이블 users, point_users를 표시할 수 있는 'u' 'p'를 적어주고

문법에서도 사용해 주어야 한다. 어떤 테이블에 들어있는 데이터인지 나와 컴퓨터가 알 수 있다.

 

데이터를 join을 사용하여 연결하는 것 까지는 어찌보면 어렵지 않다.

 

데이터에 하나씩 row가 추가되는 느낌이랄까. 그냥 갖다가 붙이는 느낌이다.

 

이때 select * 대신

 

내가 알고 싶은 데이터만 가져와서 보는 것을 주로 사용한다.

 

select u.user, p.point from users

이런 식으로 원하는 자료들만 나오게 할 수 있다. 점이 찍히는 순간부터 복잡해지기 시작했다.

 

left join의 경우 비어있는 자료를 알 수 있는데 아직까진 어디에 쓸지 잘 모르겠다. 잘 기억해두자.

union의경우는.. 두 데이터를 연결해준다.. 언젠가 다시 만날 것만 같은 기분이다. 

-----

4주차

대망의 4주차 subquery의 시간이다.

약간 그동안 배운 것들의 응용시간이라고 볼 수 있다.

subquery는 복잡한 과정들을 쉽게 작성할 수 있는 수단으로 볼 수 있는데

늘 그렇듯이 복잡한 과정을 쉽게 나타내려면 우선 복잡한 과정을 전부 이해할 수 있는 체계가 잡혀야 한다.

무너지지 말자.

 

현재까지 작성한 query 문에 또다른 query가 들어가는 형식으로, 

 

어디까지가 한 덩어리이고 이 덩어리가 무슨 의미를 가지는지 파악을 잘 해야한다.

앞선 경우와는 다르게 머리가 딸려 예문을 창조할 수가 없다. 

새로운 명령어는 나타나지 않았지만 이 논리적인 과정을 이해하는 것이 좋겠다.

 

select a.course_id, b.cnt_checkins, a.cnt_total from
(
select course_id, count(*) as cnt_total from orders
group by course_id
) a
inner join (
select course_id, count(distinct(user_id)) as cnt_checkins from checkins
group by course_id
) b
on a.course_id = b.course_id

 

subquery를 사용할때 with절로 다시 덩어리를 만들어 줄 수 있고 

case를 통해 경우에 따라 원하는 값을 출력할 수 있다.

 

약간 응용문제들의 연속이었다. 

 

하지만 할 수 있다. 

해야만 하기 때문이다.

----------

SQL을 간단히 마무리 하면서, 4주차의 내용을 조금 더 복습해 보아야겠다.

힘내요. 모두들.

 

 

'일지' 카테고리의 다른 글

23.05.09 내일배움캠프 A03조 미니프로젝트 01  (0) 2023.05.09
웹개발 종합반 3주차  (0) 2023.04.28
SQL 2주차  (0) 2023.04.26
SQL 1주차  (1) 2023.04.26
웹개발 종합반 2주차  (0) 2023.04.25
Comments