SQL 요약

박병주·2024년 4월 23일
0

SQL

목록 보기
1/3

트랜잭션

  • 하나의 작업 단위
  • 트랜잭션이 없으면 단순 자료 보관
  • 동시처리시 트랜잭션 필요
  • 트랜잭션 특성 : 원자성 / 일관성 / 고립성 / 지속성

테이블

  • 데이터를 저장해놓고 꺼내 쓰는 장소(데이터를 담고 있다)
  • 가로 : 행 / 레코드 / ROW
  • 세로 : 열 / 필드 / Column
  • 데이터의 종류(Type)는 정해져 있다. (문자, 숫자, 날짜)

제약조건

  • NOT NULL : 값이 없음을 의미하는 값
  • Primary Key
    • 기본키 : 해당 테이블에 값을 구분할 수 있는 유일한 값
  • Foreign Key
    • 외래키 : 다른 테이블의 기본키를 참조하는 키

관계(Relational)

  • 1:1, 1:N
  • ex) 카드 테이블(1:N) 주문테이블 (1:1) 주문상세 테이블

기본 쿼리문 구조

SELECT Column FROM Table
WHERE data filtering
ORDER BY Column [ASC or DESC]
;

EX) as 를 명시해도 되고 안해도 됨

SELECT 고객명 이름, 고객명 AS 이름2, 업체
FROM 주문
;

연산자

  • 부등호 : >, <, >=, <=, =, <>, !=
    • <> : 같지 않다 -> 지역 <> '서울'
  • 범위 : 컬림 BETWEEN .. AND ... // 수량 BETWEEN 1 AND 100
  • 포함 : 컬럼 IN(값1, 값2) // 지역 IN('서울', '경기', '부산')
    • where 지역 = '서울' or 지역 = '경기' or 지역 = '부산'
  • 문자열 패턴 : LIKE '%명%' // 이름 LIKE '%명%'
    • %명% : 앞 뒤로 어떤 값이 있어도 됨
    • 명% : '명'부터 시작하는 데이터
    • %명 : '명'으로 끝나는 데이터
  • NULL 구분 : IS NULL, IS NOT NULL
    • where 품목 IS NULL
    • where 품목 IS NOT NULL

조건과 조건은 AND, OR 로 연결

형변환

  • 문자를 숫자로 > SELECT CAST('1' as unsigned)
  • 숫자를 문자로 > SELECT CAST(1 as char(1))
  • 날짜 포맷 변경 (-> 문자로)
    • select date_format(now(), '%Y-%m-%d')
    • select date_format(20240101, '%Y-%m-%d')

집계함수

  • SUM, MIN, MAX, AVG

    날짜 비교
    select count(e.employee_id) from employees e
    where e.hire_date between '2016-01-01' and '2016-03-31';
    3월에 고용된 (1)
    select from employees e
    where e.hire_date like '2016-03%';
    3월에 고용된 (2)
    select
    from employees e
    where DATE_FORMAT(hire_date, '%m') = '03';

  • COUNT

    • 개수(로우 수)를 세는 COUNT 함수
    • SELECT COUNT(*), COUNT(ITEM_ID) FROM TABLE
    • 컬럼명 입력시 NULL은 제외 후 집계
  • DISTINCT

    • 유일한 값만 조회(중복 제거)
    • SECECT COUNT (DISTINCT 고객명) FROM TABLE
  • GROUP BY

    • 특정 컬럼을 기준으로 그룹으로 묶어 데이터를 집계

      SELECT PRODUCT_ID, SUM(QUANTITY) QUAN
      FROM INVENTORIES
      GROUP BY PRODUCT_ID

  • 그룹(컬럼)내에서 집계가 이루어 진다.

    JOIN

  • JOIN

    • 2개 이상의 테이블을 연결 (연관성 있는)

      SELECT a.필요컬럼, b.필요컬럼
      FROM Table1 a, table2 b
      WHERE a.col = b.col

      • 한쪽이 NULL이면 추출 안됨
    • 테이블 한쪽에 데이터가 없는 경우(OUTER JOIN)

      • 오라클) 조인이 안되는 테이블 컬럼에 (+)을 붙여준다.

        SELECT *
        FROM ORDERS o, EMPLOYEES e
        WHERE O.SALESMAN_ID=E.EMPLOYEE_ID(+)

      • MYSQL) OUTER JOIN

        FROM orders o
        LEFT OUTER JOIN employees e
        ON(o.salesman_id = e.employee_id)

서브쿼리(Subquery)

  • 쿼리는 쿼리내에서 사용 가능
  • 쿼리가 길어지는 주범

    SELECT (subquery) name
    FROM table1 a, (subquery) b
    WHERE a.col = b.col
    AND a.col in (단일 컬럼 subquery)
    AND (a.col2, a.=col3) in (select col1, col2 from ...)

  • 서브쿼리가 들어가는 위치에 따라 명칭을 나눌 수 있다.
    • SELECT 절 서브쿼리 : 스칼라(Scalar) 서브쿼리
    • FROM 절 서브쿼리 : 인라인뷰(Inline Views) 서브쿼리
    • WHERE 절 서브쿼리 : 중첩(Nasted) 서브쿼리

      작년에 모 기업 기술면접에서 '스칼라 써봤어요?' 라는 질문을 받았다.
      대답 못했다.

profile
응애

0개의 댓글