-
SQL 3. SQL 문법_JOINSYNC 기술면접 준비 2023. 11. 13. 17:48

1:N 관계 > 한명의 회원이 여러번 주문이 가능하다.
테이블 결합 : 두 테이블 관계를 활용하여, 테이블을 결합하는 명령어
테이블 결합이 가능한 이유 : ERM
ERM(Entity - Relationship Modeling)은 개체-관계 모델링 > 관계형 데이터베이스에 테이블을 모델링할 때 사용된다.
개체(Entity) : 하나 이상의 속성(Attribute)으로 구성된 객체
관계(Relationship) : 속성(Entity)들 간의 관계


ERM을 통해 만들어진 개체간의 관계를 나타낸 것 > ERD
ERD(Entity - Relationship Diagram)은 개체 간의 관계를 도표로 표현할 때 사용된다.

FK(foreign key) : 다른 테이블에서 PK와 연결되는 KEY
/*************** Inner JOIN ***************/
/* inner join : 두 테이블의 공통 값이 매칭되는 데이터만 결함 */
SELECT * FROM Sales;
select * from product;
SELECT *
FROM CUSTOMER AS A
INNER JOIN Sales AS B
ON A.MEM_NO = B.MEM_NO;
/* Customer 및 Sales 테이블은 mem_no(회원번호) 기준으로 1:N 관계 */
SELECT *
FROM CUSTOMER AS A
INNER JOIN SALES AS B
ON A.MEM_NO = B.MEM_NO
WHERE A.MEM_NO = '100070';
/***************LEFT JOIN***************/
/* LEFT JOIN: 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 왼쪽 테이블의 매칭되는 않는 데이터는 NULL */
SELECT *
FROM CUSTOMER AS A
LEFT JOIN SALES AS B
ON A.MEM_NO = B.MEM_NO
/* NULL 회원가입만하고 주문은 하지 않는 회원을 의미 *//***************RIGHT JOIN***************/
/* RIGHT JOIN: 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 오른쪽 테이블의 매칭되는 않는 데이터는 NULL */
/* Customer + Sales RIGHT JOIN */
SELECT *
FROM CUSTOMER AS A
RIGHT JOIN SALES AS B
ON A.MEM_NO = B.MEM_NO
WHERE A.MEM_NO IS NULL;
/* 회원번호(9999999)는 비회원 */
/* IS NULL: 비교 연산자 / NULL인 값만 *//* 회원 테이블에 회원번호 NULL인 값만 출력하게 된다. */
INNER JOIN : 두 테이블의 공통 값이 매칭되는 데이터만 결합
LEFT JOIN : 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 왼쪽 테이블의 매칭되지 않는 데이터는 NULL
RIGHT JOIN : 두 테이블의 공통 값이 매칭되는 데이터만 결합 + 오른쪽 테이블의 매칭되지 않는 데이터는 NULL

/***************테이블 결합(JOIN) + 데이터 조회(SELECT)***************/
/* 회원(Customer) 및 주문(Sales) 테이블 Inner JOIN 결합 */
SELECT *
FROM CUSTOMER AS A
INNER JOIN SALES AS B
ON A.MEM_NO = B.MEM_NO;
/* 임시테이블 생성 */
CREATE TEMPORARY TABLE CUSTOMER_SALES_INNER_JOIN
SELECT A.*, B.ORDER_NO
FROM CUSTOMER AS A
INNER JOIN SALES AS B
ON A.MEM_NO = B.MEM_NO;
/*회원번호 열이 2개 이기 때문에 테이블이 생성되지 않음 */
/* 테이블에는 중복되는 열이 저장되지 않음*/
/* 임시 테이블을 조회 */
SELECT * FROM CUSTOMER_SALES_INNER_JOIN;
/* 서버 연결 종료시 자동 삭제된다.*//* 성별이 남성 조건으로 필터링 */
SELECT *
FROM CUSTOMER_SALES_INNER_JOIN
WHERE GENDER = 'MAN';
/* 거주지역별로 구매횟수 집계 새로운 테이블 */
SELECT ADDR, COUNT(ORDER_NO) AS 구매횟수
FROM CUSTOMER_SALES_INNER_JOIN
WHERE GENDER = 'MAN'
GROUP BY ADDR;
/* 거주지역별로 구매횟수 100회 미만 집계 새로운 테이블 */
SELECT ADDR, COUNT(ORDER_NO) AS 구매횟수
FROM CUSTOMER_SALES_INNER_JOIN
WHERE GENDER = 'MAN'
GROUP BY ADDR
HAVING COUNT(ORDER_NO) < 100
ORDER BY COUNT(ORDER_NO) ASC;
/***************3개 이상 테이블 결합***************/
/* 주문(Sales) 테이블 기준, 회원(Customer) 및 상품(Product) 테이블 LEFT JOIN 결합 */
SELECT *
FROM SALES AS A
LEFT JOIN CUSTOMER AS B
ON A.MEM_NO = B.MEM_NO
LEFT JOIN PRODUCT AS C
ON A.PRODUCT_CODE = C.PRODUCT_CODE'SYNC 기술면접 준비' 카테고리의 다른 글
SQL 3. SQL 문법_총정리 (0) 2023.11.13 SQL 3. SQL 문법_SUB QUERY (1) 2023.11.13 SQL 3. SQL 문법_SELECT (0) 2023.11.13 SQL 2. SQL 명령어_총정리 (0) 2023.11.13 SQL 2. SQL 명령어_3 (0) 2023.11.13