[6장] SELECT

신은지·2021년 11월 7일
0

DBMS에 저장된 테이블을 조작하는 SQL

관리 명령

  • show databases
    : 데이터베이스 조회

  • use 데이터베이스명
    : 디폴트(현재) 데이터베이스 지정

  • show tables
    : 데이터베이스 내의 테이블 리스트 조회


SQL 기본

  • SELECT문
    : SELECT 열명 FROM 테이블명;
    : FROM구에는 데이터베이스명.테이블명 형태로 명시적으로 DB의 테이블을 조회할 수 있다
    : DISTINCT 키워드로 중복을 제거할 수 있다.

  • WHERE구
    : 필요한 데이터만을 클라이언트로 가져오기 위해 사용하는 조건
    : SELECT 열명 FROM 테이블명 WHERE 조건식;
    : 연산자 우선순위를 고려해서 조건 지정 필요


SQL 기술 규칙

  • SQL문 마지막에 딜리미터 필수 (-> 대부분 세미콜론 사용)
  • 키워드의 대소문자는 구별하지 않는다. select = SELECT = Select
  • 정수는 그대로, 문자열/날짜시각형은 작은따옴표('')로 감싸서 사용한다.
  • 단어는 반각 스페이스 또는 개행으로 구별한다.

SELECT문 응용

  • ORDER BY
    : 검색 결과의 정렬 방식을 지정할 때 사용한다

  • 집약 (집계함수)

  1. COUNT : 검색 결과의 행 수를 카운트할 때 사용한다.
  2. MIN, MAX, SUM, AVG : 검색 결과의 최소, 최대, 총수, 평균 계산에 사용한다.
  3. group_concat : 그룹에 속한 결과들을 한 행으로 집약할 때 사용한다. (문자열 집약)
  4. GROUP BY : 테이블을 그룹으로 분리할 때 사용한다.
  5. HAVING : GROUP BY에 조건식을 지정할 때 사용한다.

데이터의 갱신(UPDATE), 삽입(INSERT), 제거(DELETE)

  • 갱신(UPDATE)
    : 기존 데이터의 변경(수정)에 사용
    : UPDATE 테이블명 SET 열명=값 WHERE 조건;
    : SET구에 리스트를 지정하여 복수 열을 동시에 갱신할 수 있다.
    : 갱신하려는 열에 DEFAULT 설정값이 있다면 값 대신 DEFAULT키워드를 사용할 수 있다
    : DEFAULT 설정 열은 열 리스트에서 제외했을 때 기본값으로 갱신된다

  • 삽입(INSERT)
    : 새로운 데이터의 입력에 사용
    : INSERT INTO 테이블명(열1,[열2, ...]) VALUES (값1,[값2, ...])
    : 삽입하려는 열에 DEFAULT 설정값이 있다면 값 대신 DEFAULT키워드를 사용할 수 있다
    : DEFAULT 설정 열은 열 리스트에서 제외했을 때 기본값으로 저장된다

    INSERT INTO 테이블(열1, 열2, 열3) VALUES (값1, 값2, 값3), (값4, 값5, 값6), (깂7, 값8, 값9)...
    처럼 VALUES 뒤의 괄호를 콤마로 연결해 동시에 여러 번 INSERT할 수 있다.

  • 제거(DELETE)
    : 기존 데이터의 제거에 사용
    : DELETE FROM 테이블명 WHERE 조건;


뷰 테이블 생성 & 복수 테이블에서 SELECT

  • 뷰(View)
    : 테이블로부터 필요한 데이터를 뽑아 만든 가상 테이블. 데이터를 가지는 것이 아니라, 각 테이블에 대한 SELECT를 가진다
    : 장점

    1. 복잡한 SELECT문을 매번 기술하지 않아도 된다
    2. 필요한 열과 행만 사용자에게 보여줄 수 있고, 갱신 시에도 뷰 정의에 따른 갱신으로 한정할 수 있다.
    3. 데이터 저장 없이 1, 2의 장점을 실현할 수 있다. 뷰를 제거해도 참조 테이블에는 영향이 없다.
  • 뷰 생성하기
    : CREATE VIEW 뷰명(열1, [열2, 열3, ...]) AS SELECT문;
    : 열 전체를 지정할 경우 뷰명 뒤의 괄호와 열 리스트 생략 가능

  • 뷰 입력 제한
    : 어떤 행이 대응하는지 모를 때 & 어떤 값을 넣어야 할지 모를 때 갱신 불가능

    1. GROUP BY나 DISTINCT에서 얻은 값의 갱신 불가능 (뭘 갱신할지 모르니까)
    2. 2가지 이상의 테이블을 조합한 뷰를 갱신할 때, 어떤 테이블을 갱신해야할지 모르는 경우 갱신 불가능
    3. 원래 테이블의 일부 열만 선택한 뷰의 경우, 선택된 열 외의 열에 기본값이 없거나 NOT NULL인 경우 삽입 불가능
  • 서브쿼리
    : SELECT문의 결과를 데이터 & 수치처럼 취급하여 여러개의 쿼리를 동시에 실행하는 것

  • 결합(JOIN)
    : 하나의 테이블에 있는 열만으로 충족되지 않는 경우, 타 테이블에서 열을 가지고 오는 것
    : 2개 이상의 테이블을 대상으로 SQL을 실행할 때 사용

    • 내부 결합(INNER JOIN)
      : 결합 조건에 일치하는 행만을 가져온다.
      : SELECT 열 FROM 테이블1 INNER JOIN 테이블2 ON 결합조건;
    • 외부 결합(OUTER JOIN)
      : 한쪽 테이블을 기준으로 전체 행을 표시하고, 다른 테이블은 값이 있으면 표시하고 싶은 경우
      : JOIN하는 테이블에 조건에 일치하는 값이 없다면 NULL이 된다
      : SELECT 열 FROM 테이블1 LEFT OUTER JOIN 테이블2 ON 결합조건;
      (LEFT는 첫번째 테이블을 기준으로, RIGHT는 두번째 테이블을 기준으로 삼는다)
profile
호그와트 장학생

0개의 댓글