2025-04-15[20일차] -(SQL PART)

dong_c·2025년 4월 15일
post-thumbnail

수업 정리

데이터 정규화 참고 자료


RDBMS(관계형 데이터 베이스)

  • RDBMS (Relational DataBase
    Management System)
  • 데이터를 테이블 형태로 관리하는 시스템.
  • 각각의 테이블은 관계로 연결됨
    (ex. 외래키 FK)

tmi)
관계형 데이터베이스는 데이터 정규화 필연적이다


JOIN이란?

여러 개의 테이블을 하나의 테이블처럼 
볼 수 있게 (변경 x / 조회만) 해주는 문법
  • SELECT 에서만 운용 가능한 문법
  • 하나처럼 볼 수 있게 하려면
    (데이터의 무결성을 잘 보존하려면)
    기준이 명확해야 한다

--> 기준은 보통 키를 사용한다

  • Join 입력후 ON도 같이 붙여준다
    (select - from 과 같은 관계)
on절(or , and 처럼) 조건절이다

  • 일단 mysql에서 현재 inner joinleft join만 알아두기
    left(기준이 되는 테이블 왼쪽에서 보기/a가 기준 / b는 교집합 x면 출력 x)
    웹 개발 시 자주 사용하는 join 문법은 inner join!
  • join 시 기준이 되는 부분이 무조건 위에나 중간에 있어야 함...

join절

join과 결이 비슷한 with as/subquery

서브 쿼리(쿼리 안에 쿼리)
sub query

한번 가공한 쿼리를 쿼리에 사용하는 느낌?

  • 서브 쿼리 종류(3가지)
    -select절에 사용
  • from절에 사용
  • where절에 사용

서브 쿼리는 단점이 꽤 있음
1) join에 비해 실행 속도가 느림
2) 서브 쿼리 안에 조건을 여러개 붙일 수 없다

그럼에도 서브 쿼리를 알아야 하는 이유?
1) 예전에 만들어진 프로젝트의 쿼리들에는
서브쿼리의 활용이 상당히 많다

2) 간단한 값 검증만 할때 유용함


서브쿼리 코드 예시

서브쿼리1

SELECT *
   FROM t_user AS u  
    INNER JOIN (
        SELECT COUNT(id) AS `주문개수` , userNO
            FROM t_order
            GROUP BY userNo
        
   )  AS o
   ON u.id = o.userNo

.... 밑과 같음

SELECT u.*, COUNT(o.id),o.userNo
    FROM t_user AS u
    INNER JOIN t_order AS o
    ON u.id = o.userNo
    GROUP BY o.userNo

서브 쿼리2 where 서브 쿼리- (1번 주문에 대한)

SELECT userName
    FROM t_user
    WHERE id = (SELECT userNo FROM t_order WHERE id = 1)

서브 쿼리 3 - with as (쿼리 별로 따로 저장 한다이?)

WITH a AS(
    SELECT *
        FROM t_user
       
) ,
b AS (
    SELECT *
        FROM t_order
)
SELECT a.*, b.*
    FROM a
    INNER JOIN b
    ON a.id = b.userNO
profile
코딩초보

0개의 댓글