3주차 강의

차승준·2022년 9월 4일
0

이번 중 강의는 필기 내용이 짧았지만, 숙지해야할 점과 활용하는 부문을 상당히 많았다.

Select는 어떤 테이블에서 특정 혹은 모든 필드 안의 데이터를 호출하는 명령어다.
만약 두 개의 테이블을 동시에 호출하고 싶다면 join 옆에 원하는 테이블 명을 입력하면, 기존의 테이블을 기준으로 오른쪽에 붙어서 출력된다.

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

위의 코드의 결과로, user_id부터 email까지가 select로 호출한 테이블이며 그 오른쪽은 join으로 호출한 테이블이다.
지난 주차의 강의에서 배운 Alis(별칭)기능이 여기서부터 요긴하게 쓰인다.
NUll이 뜨는 이유는 'select의 테이블에는 존재하지만 join의 테이블에는 존재하지 않기에 비어진 필드'가 Null로 뜨게된 것이다. 양쪽 모두 존재하는 데이터만 호출하고 싶다면 아래와 같이 하면 된다.

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

보는 것과 같이 Null이 떳단 열(row)들이 싹 사라졌다.
이를 통해 양 테이블의 데이터를 비교하여 원하는 표를 만들 수 있고 또 특정 조건에 해당하는 데이터들을 호출하여 해당 데이터의 주인(ID, 유저, 강좌명 등등) 또한 Join으로 붙여서 한번에 표로 출력할 수 있다.
참 편한 것 같다.

새로 알게된 명령어 'rount(필드명, 숫자)' : 필드의 데이터가 수치일 경우 평균값을 구하되, 소수점 몇 째자리까지 구할지는 '숫자'에 달림. 소수점 밑을 구하지 않을 경우(0) 숫자 입력 생략.

Count(*)는 Null 값까지 세지 않는다.

두 테이블 중 특정 필드명이 한 테이블에만 존재할 시, 별칭을 생략해도 상관없다.

테이블 옆에 테이블 값을 붙인 것처럼, 테이블 위에 테이블을 붙이는 방법 또한 있다.

(
	select '7월' as month, c.title, c2.week, count(*) as cnt from checkins c2
	inner join courses c on c2.course_id = c.course_id
	inner join orders o on o.user_id = c2.user_id
	where o.created_at < '2020-08-01'
	group by c2.course_id, c2.week
  order by c2.course_id, c2.week
)
union all
(
	select '8월' as month, c.title, c2.week, count(*) as cnt from checkins c2
	inner join courses c on c2.course_id = c.course_id
	inner join orders o on o.user_id = c2.user_id
	where o.created_at > '2020-08-01'
	group by c2.course_id, c2.week
  order by c2.course_id, c2.week
)


이렇게 7월 표와 월 표가 위 아래로 붙게 된다.
다만, Union을 사용할 경우 order by가 동작하지 않게 되는데 이는 다음 주에 배우게 된다.

profile
멋진 개발자가 되고 싶어요.

0개의 댓글