MariaDB 데이터베이스[database, DB] 조인(Join)
조인 [join]
<크로스 조인>
SELECT mem_id, cart_member
FROM member, cart;
결과 : 값이 3780개가 나온다.
SELECT COUNT(*) FROM member; -- 28개
SELECT COUNT(*) FROM cart; -- 135개
28*135 = 3780 양쪽의 각각의 값만큼 결과 값이 나온다.
그렇기 때문에 데이터 양이 많을 경우 데이터베이스가 다운될 수 있다.
가급적 사용하지 않기.
4가지의 조인중 Inner Join에 대해 적어보겠다.
- Inner Join방식 : 일반방식 or 표준방식 모두 표준처럼 사용됨 = 결과가 같다
<조인(join) 구문 작성하는 방법>
1. Inner Join - 일반방식
select
from 테이블1, 테이블 2,... , 테이블 n
where 관계조건(pk = fk)
and 일반조건
2. Inner Join - 표준방식
select 테이블1.컬럼1, ... 테이블 n. 칼럼 n
from 테이블1 Inner Join 테이블 2
on(관계조건(pk = fk)
and (일반조건)
Inner Join 테이블 n
on(관계조건(pk = fk)
and 일반조건)
Group By .... 그룹이 있는 경우
Having.... 그룹 조건이 있는 경우
Order By .... 정렬이 있는 경우
테이블 n, ... , 테이블n
where 관계조건(pk = fk)
and 일반조건
* 두 테이블 간에 pk = fk인 조건을 제시
* from절 뒤에 테이블들을 콤마(,)로 구분하여 사용 => ", "를 INNER JOIN으로 바꾼다고 생각하면 된다
* where절에 관계조건색(pk = fk)을 추가함
***** 관계조건식은 최소한 (사용된 테이블의 개수 -1) 만큼 제시되어야 함
예제 1)
- 조회컬럼 : 회원아이디, 회원이름, 주문번호, 주문수량, 상품명 조회
- 조건 : 주문내역이 있는 회원 어야 하며, 주문한 회원 거주지가 서울인 경우
상품명에 컴퓨터라는 단어가 포함되어 있는 경우
- 정렬 : 주문수량을 기준으로 내림차순
* 일반방식
SELECT mem_id, mem_name, cart_no, cart_qty, prod_name
FROM member, cart, prod
WHERE mem_id = cart_member
AND cart_member = prod_id
AND mem_add1 LIKE '서울%'
AND prod_name LIKE '%컴퓨터%'
ORDER BY cart_qty DESC;
* 표준방식
SELECT mem_id, mem_name, cart_no, cart_qty, prod_name
FROM member
INNER JOIN cart
ON(mem_id = cart_member AND mem_add1 LIKE '서울%')
INNER JOIN prod
ON(cart_member = prod_id AND prod_name LIKE '%컴퓨터%')
ORDER BY cart_qty DESC;
예제 2)
- 상품분류별 상품의 개수 조회하기
- 조회컬럼: 상품분류코드, 상품분류명, 분류별 상품의 개수
- 정렬 : 분류별 갯수 내림차순
* 일반방식
SELECT lprod_gu, lprod_nm, COUNT(prod_id) AS prod_cnt
FROM lprod, prod
WHERE lprod_gu = prod_lgu
GROUP BY lprod_gu, lprod_nm
ORDER BY prod_cnt DESC;
* 표준방식
SELECT lprod_gu, lprod_nm, COUNT(prod_id) AS prod_cnt
FROM lprod INNER JOIN prod
ON(lprod_gu = prod_lgu)
GROUP BY lprod_gu, lprod_nm
ORDER BY prod_cnt DESC;