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 별로 카운트 하고 싶음
SQL에서 데이터 그룹에 조건을 적용하여 검색하기 위해서는 HAVING
위의 실행결과를 보자면 2권 이상 빌린사람만 출력하고 싶다면
select user_id, count(*)
from rental
Group by user_id
having COUNT(user_id) > 1;
--조건
-- 그룹바이부터 ;까지가 하나의 절이 되는데 아래 조건에 해당하는 데이터만 그룹 바이를 하라
--rental 테이블에서 user_id가 같은 1개 초과의 데이터가 몇개 있는지 검색
관계형 DB의 꽃이구나
SELECT *
FROM rental
INNER JOIN user;
-- 연결할 테이블
--여러 개의 테이블을 서로 연결
근데 이렇게 연결하면 그냥 막 대충 연결되어버림.
쓸모없는 관계형 데이터베이스 놈...
그래서 우린 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테이블.컬럼 연결해봐
SQL에서 왼쪽 테이블의 모든 값을 포함하여 연결하기 위해서는 LEFT JOIN
명령을 사용해야 합니다.
INNER JOIN
은 두 데이터 중 겹치는 부분만 출력하는 명령이고,OUTER JOIN
은 LEFT JOIN
, RIGHT 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 으로 사용함
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을 꼭 써줘야함
데이터 그룹 짓기 group by
+조건 추가 : having
두 개의 테이블 조회하기 : inner join
, left join
, right join
조건 추가하려면 on a.컬럼 = b.컬럼
지시사항
물건의 이름(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원 이상인 애들만 추려주고!
부서별 인원 수 검색하기
사원(employees
) 테이블에서 부서(dept
)별 인원 수를 출력해보세요.
-- 지시사항을 만족하는 쿼리를 작성해보세요.
select *
from employees;
select dept, count(*)
from employees
group by dept;
#employees 테이블의 dept와 count를 출력하는데 그룹을 dept로 묶어주세요.