데이터베이스

MariaDB 데이터베이스[database, DB] 조인(Join)

멈머이 2023. 11. 23. 23:26
728x90

조인 [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;
728x90