sql

ttomy·2023년 1월 12일
0

테이블

  • column(열)과 row(행)으로 이뤄진 데이터 집합

테이블을 포함하는 database생성

  • CREATE DATABSE TEST_LIST;

db의 데이터 타입들

  • varchar
  • int
  • dec
  • blob
  • datetime/ timestamp
  • date

-char / varchar 등의 타입은 작은 따옴표('')를 사용하기에
"" 보다 ''를 사용해 쿼리를 작성하자.

table만들기, 삭제

-CREATE TABLE TEST_LIST
(
NAME VARCHAR(10),
BIRTHDAY DATE
);

-DROP TABLE TEST_LIST;

insert

-INSERT INTO TEST_LIST
VALUES
('HUM', '1998-02-02');

select

-SELECT FROM TEST_LIST;
-SELECT
FROM TEST_LIST
WHERE NAME = 'HUM';

-SELECT NAME FROM TEST_LIST
WHERE NAME = 'HUM'
AND
BIRTHDAY = '1998-02-02';

  • OR

  • LIKE
    -SELECT * FROM MY_CONTACTS
    WHERE LOCATION LIKE '%CA';

  • BETWEEN

  • IN
    같은 column에 대한 조건 여러개를 IN으로 대체할 수 있다.
    -SELECT DATE_NAME FROM BLACK_BOOK
    WHERE
    RATING IN ('innovative', 'fabulous', 'good');

group by


group by로 같은 기준값을 가지는 행들은 그룹화 된다.
여기서 count,avg,sum등의 집계함수를 사용하면 각 그룹의 행들에 대해 집계가 된다.

프로그래머스 sql키트를 풀며 select에 익숙해지자.
https://school.programmers.co.kr/learn/courses/30/lessons/131120
https://school.programmers.co.kr/learn/courses/30/lessons/131536

delete

  • delete
    -DELETE FROM CLOWN_INFO
    WHERE
    ACTICITIES = 'dancing';

마지막 레코드가 최신 데이터가 아닐 수 있다.
사용자의 sql제어, 혹은 인덱스 존재 여부, 회사의 dbms정책 등의 요소에 따라 다르다.

update

  • update
    -UPDATE drink_info
    SET cost = cost + 1
    WHERE
    drink_name = 'Blue moon';

정규화

alter

고급 select

테이블 확장 설계 - 참조

여러 개의 테이블 다루기

union

합집합
열 구성이 다른 테이블은 UNION으로 합칠 수 없음.
중복인 레코드는 하나만 저장.

  • union all
    중복인 레코드도 그대로 저장.

JOIN

cross join

  • 교차 결합
    두 테이블의 대상 열에 대한 모든 경우를 합해서 테이블 생성
    -SELECTFROM * MEALS,DRINKS;

-SELECT * FROM MEALS CROSS JOIN DRINKS;

테이블들의 행(ROW) 수가 곱해진 게 CROSS JOIN한 테이블의 행 수이다.

UNION과 CROSS JOIN의 차이
union은 열 구성이 같은 테이블들을 합쳐 레코드의 행 길이(세로 확장)가 늘어나는 것이고, cross join 은 열의 확장(가로 방향)이 이뤄진다.

INNER JOIN

-SELECT * FROM SAMPLE1 AS A, SAMPLE2 AS B
WHERE A.CODE = B.CODE; ->구식

-SELECT * FROM SAMPLE1 A INNER JOIN SAMPLE2 B
ON A.CODE = B.CODE;

  • 동등 조인
  • 비동등 조인
  • 자연 조인

OUTER JOIN


OUTER JOIN은 조인하는 여러테이블에서 한 쪽에는 데이터가 있고, 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽 테이블의 내용을 모두 출력하는 것입니다. 즉, 조건에 맞지 않아도 해당하는 행을 출력하고 싶을 때 사용할 수 있습니다.

SELECT 검색할 컬럼
FROM 테이블명 LEFT OUTER JOIN 테이블명2
ON 테이블.컬럼명 = 테이블2.컬럼명;
->
LEFT OUTER JOIN : 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져 온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL로 표시한다.

  • 문제 https://school.programmers.co.kr/learn/courses/30/lessons/59042
    예를 들어 나간 동물 테이블에는 데이터가 존재하고 들어온 동물 테이블에는 데이터가 없는 경우, 두 테이블 모두에 존재하지 데이터라도 나간 동물 테이블에 존재한다면 JOIN에 포함시킬 수 있다.

MySQL에서는 FULL OUTER JOIN이 없으므로,
LEFT OUTER JOIN 과 RIGHT OUTER JOIN을 UNION 하는 식으로 하여 FULL OUTER JOIN을 만들어 준다.

NATURAL JOIN

자기결합

외부 조인, 셀프 조인, 유니온

외부 조인

  • 외부 조인은 두 테이블 간에 겹치는 레코드가 없어서
    한 테이블의 정보가 누락되지 않고 조인된다. -> join된 결과 중 레코드 값이 null일 수 있다.

셀프 조인

유니온

서브쿼리

제약조건 뷰, 트랜잭션

0개의 댓글