ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 3. SQL 문법_JOIN
    SYNC 기술면접 준비 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
Designed by Tistory.