[SQL] 다수의 테이블제어

준리·2021년 11월 2일
0

엘리스/* AI트랙 3기

목록 보기
16/23
post-thumbnail

GROUP BY : 콜라랑 사이다랑 나눠서 더해줘

SQL에서 데이터를 그룹화하기 위해서는 GROUP BY 명령

SELECT user_id, COUNT(*) --select 옆에 검색할 컬럼(user_id)를 적어줌

FROM rental

GROUP BY user_id; --무엇으로 그룹을 묶을것이냐 하면 user_id로 묶는다는 것임
--limit , order by , group by는 마지막에 옴
select user_id SUM(컬럼명) FROM rental GROUP BY user_id;
-- user_id가 같은 열에서 컬럼의 내용을 다 더한 값을 출력

--SUM 자리에 AVG MAX MIN을 사용할 수 있음
select user_id, COUNT(*) from rental GROUP BY user_id;
-- user_id 중심으로 정렬할 것이고, user_id 별로 카운트 하고 싶음

Group by에 2개이상 조건인 친구들만 보고싶어 HAVING

SQL에서 데이터 그룹에 조건을 적용하여 검색하기 위해서는 HAVING

위의 실행결과를 보자면 2권 이상 빌린사람만 출력하고 싶다면

select user_id, count(*)

from rental

Group by user_id

having COUNT(user_id) > 1;
--조건
-- 그룹바이부터 ;까지가 하나의 절이 되는데 아래 조건에 해당하는 데이터만 그룹 바이를 하라

--rental 테이블에서 user_id가 같은 1개 초과의 데이터가 몇개 있는지 검색


두개의 테이블에서 조회 INNER JOIN

관계형 DB의 꽃이구나

SELECT *

FROM rental

INNER JOIN user;
-- 연결할 테이블

--여러 개의 테이블을 서로 연결

근데 이렇게 연결하면 그냥 막 대충 연결되어버림.
쓸모없는 관계형 데이터베이스 놈...
그래서 우린 on

조건을 적용해 두개의 테이블 조회 inner join on

SQL에서 조건을 적용해 두 개의 테이블을 JOIN하기 위해서는 JOIN 뒤에 ON 명령을 사용합니다.

참고) 위 문제의 경우 ON 대신 WHERE 을 사용해도 출력 결과는 동일합니다.

select *
from rental --렌탈 테이블을 중심으로
Inner Join user --user테이블을 연결함

ON user.id = rental.user_id; --조건으로 유저의 아이디 컬럼과 렌탈의 유저아이디 컬럼이 같다고 말해줌
  --user table의   --rental table의
  -- id(컬럼)      -- user_id(컬럼)
다시 풀이해서
select *
from A테이블
inner join B테이블
On A테이블.컬럼
  =B테이블.컬럼 연결해봐


LEFT JOIN, 책을 대여하지 않은 회원도 출력하고 싶다.

SQL에서 왼쪽 테이블의 모든 값을 포함하여 연결하기 위해서는 LEFT JOIN 명령을 사용해야 합니다.

INNER JOIN 은 두 데이터 중 겹치는 부분만 출력하는 명령이고,OUTER JOIN 은 LEFT JOINRIGHT JOIN 같은 데이터가 겹치지 않아도 모두 출력하는 명령들을 의미합니다.

책을 대여하지 않으면 rental에 null 값으로 표시됨

select *
from rental --렌탈 테이블을 중심으로
left Join user --user테이블을 연결함 --user 테이블을 모두 출력하되!

ON user.id = rental.user_id; --조건으로 유저의 아이디 컬럼과 렌탈의 유저아이디 컬럼이 같다고 말해줌
  --user table의   --rental table의
  -- id(컬럼)      -- user_id(컬럼)


왼쪽(메인)을 기준으로 모든 데이터를 출력하고 오른쪽(서브)를 가져다가 붙임

주로 현업에서는 Left Join 으로 사용함

Right JOIN 회원의 정보가 없는 대여기록도 포함하고 싶다면(회원탈퇴)

SQL에서 오른쪽 테이블의 모든 값을 포함하여 연결하기 위해서는 RIGHT JOIN 명령을 사용해야 합니다.

select *
from rental --렌탈 테이블을 중심으로
left Join user --user테이블을 연결함 --rental 테이블을 모두 출력하되! rental에 없으면 null

ON user.id = rental.user_id; --조건으로 유저의 아이디 컬럼과 렌탈의 유저아이디 컬럼이 같다고 말해줌
  --user table의   --rental table의
  -- id(컬럼)      -- user_id(컬럼)

실무에선 left join을 주로 사용함 왼쪽 데이터를 주로살려놓고 오른쪽을 사용

  • left join 과 right 조인은 on을 꼭 써줘야함

총정리

  1. 데이터 그룹 짓기 group by

  2. +조건 추가 : having

  3. 두 개의 테이블 조회하기 : inner join, left join, right join

  4. 조건 추가하려면 on a.컬럼 = b.컬럼


미션1

지시사항

물건의 이름(name)과 물건 별 판매량(amount)의 합을 검색하세요. 단 해당 물건의 총 판매 수익(revenue)의 합이 50000이상인 것만 검색해봅시다.

-- 지시사항을 만족하는 쿼리를 작성해보세요.

select *
from sale;

select name, sum(amount)
from sale
group by name
Having sum(revenue) >= 50000;

sale 테이블의 name과 sum(amount) 칼럼을 출력하는데 이름으로 그 친구들을 묶어줘 단, revenue합이
50000원 이상인 애들만 추려주고!

미션2

부서별 인원 수 검색하기

지시사항

사원(employees) 테이블에서 부서(dept)별 인원 수를 출력해보세요.

-- 지시사항을 만족하는 쿼리를 작성해보세요.

select *
from employees;

select dept, count(*)
from employees
group by dept;

#employees 테이블의 dept와 count를 출력하는데 그룹을 dept로 묶어주세요.

profile
트렌디 풀스택 개발자

0개의 댓글