[데이터베이스 첫걸음] 6장

    728x90

    디비디비딥 스터디 시리즈 

    더보기

    [ 데이터베이스 첫걸음 ] 1장 2장 3장 4장 5장 6장 7장 8장 9-10장

    [ SQL 첫걸음 ] 1장 2장 3-4장 5-6장 7-8장

    6장 SQL문의 기본

    SELECT문의 기본

    • SQL은 주로 DBMS에 저장된 테이블을 조작하기 위해 사용
    • 데이터베이스가 여러개 존재할 수 있기 때문에 테이블을 보기 위해서는 데이터베이스를 선택해야 함
    • 데이터베이스 목록 보기
    • mysql> show databases;
    • 데이터베이스 사용하기
    • mysql> use 데이터베이스명;
    • 테이블 목록 보기
    • mysql> show tables;

    WHERE

    • 테이블에서 열의 수는 테이블을 작성(정의)했을때 결정되어 이후 명시적으로 변경하지 않는 한 늘어나지 X.
    • but 행수는 제한이 X. → SELECT문 줄이고 WHERE을 지정할 것.
    SELECT 컬럼명 FROM 테이블명 WHERE 조건;
    
    • 행 수를 제한하기 위해 사용
    • 테이블의 각 행을 살피고 일치하는 행만 SELECT
    • AND와 OR을 사용해 여러 조건 사용 가능

    *연산자 생략

    SQL 기술 규칙

    • SQL문의 마지막에 딜리미터(문장의 단락을 의미하는 기호)를 붙인다. 대부분 세미콜론 (;)
    • 키워드(SELECT, FROM 등)의 대소문자는 구별하지 않는다. select, SELECTSelect 모두 가능
    • 정수는 기존 그대로 사용, 문자열이나 날짜 시각은 작은 따옴표('')로 감싼다.1000 은 정수, '1000' 은 문자열
    • 단어(word)는 반각 스페이스나 개행으로 구별. 전각 스페이스 사용 X

    DISTINCT와 중복 배제

    • 선택한 행에서 중복을 없애고 싶은 경우 DISTINCT 키워드 사용
    SELECT DISTINCT 컬럼명 FROM 테이블명;
    

    SELECT문의 응용 및 조작

    • 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
    • 컬럼명
      • * 사용 시 모든 컬럼 지정 가능
      • 임의의 열을 , 로 구분하여 복수 지정 가능

    검색 결과 정렬 방법

    • 컬럼의 순서는 SELECT 컬럼1, 컬럼2, ... 로 지정
    • 레코드의 순서는 ORDER BY 로 지정
    SELECT ~ ORDER BY 컬럼1 [, 컬럼2, ...] [DESC / ASC]
    
    • DESC/ASC : 내림차순/오름차순 정렬. 미지정시 오름차순
    • 정렬키 : ORDER BY에 사용한 열명
      • 정렬키가 Unique하지 않으면 같은 값 내에서 정렬 결과는 매번 다를 수 있음

    집약 함수 (집계 함수)

    • 복수의 행(이나 행의 값)에 대해 집계를 수행하는 함수
    • COUNT : 테이블의 행수를 알려주는 함수
    • SUM : 테이블의 수치 데이터를 합계하는 함수
    • AVG : 테이블의 수치 데이터 평균을 구하는 함수
    • MAX : 테이블의 임의열 데이터 중 최대값을 구하는 함수
    • MIN : 테이블의 임의열 데이터 중 최소값을 구하는 함수

    GROUP BY, HAVING

    • 데이터를 몇 개의 그룹으로 나누어 집계 함수를 적용할 수 있음
    SELECT ~ FROM 테이블명 GROUP BY 컬럼1 [, 컬럼2, ...]
    
    • HAVING을 통해 집약한 결과에 조건을 적용할 수 있음
    SELECT ~ FROM 테이블명 GROUP BY ~ HAVING 그룹의 값에 대한 조건
    

    데이터 갱신, 삽입, 제거

    데터를 변경하는 UPDATE문

    UPDATE 테이블명 SET 열명 = 값 WHERE 조건;
    
    • 갱신하는 컬럼에 디폴트값이 있는 경우에는 값 대신 DEFAULT 키워드 지정하여 디폴트값으로 갱신 가능

    데이터를 입력하는 INSERT문

    • INSERT 전에 테이블 정의 확인 필요
      • \\G는 ; 대신에 사용할 수 있는 딜리미터로 결과를 세로로 보기 쉽게 한다.
      • 테이블 정의 대신 단순 열 정보 조회 가능
      • DESC 테이블명;
    • SHOW CREATE TABLE 테이블명\\G
    • INSERT문의 기본 구문
      • 테이블명 뒤의 컬럼 리스트와 VALUES 뒤의 값 리스트는 수와 데이터형이 일치하여야 한다.
      • 테이블에 정의된 모든 컬럼에 대해 값 설정 시 컬럼 리스트 생략 가능
      • 디폴트값으로 입력하는 2가지 방법
        • DEFAULT 키워드 지정
        • 컬럼 리스트에서 제외하여 암묵적 지정
    • INSERT INTO 테이블명(열1[, 열2, ...]) VALUES (값1[, 값2, ...]);
    • MySQL에서는 Multi row insert 가능
      • 보기 쉬움. 처리 시간 단축.
    • INSERT INTO 테이블명(컬럼1, 컬럼2, ...) VALUES (값1-1, 값1-2, ...) [, (값2-1, 값2-2, ...), ...];
    • 자주 사용되는 구문
      • SELECT의 결과를 입력 레코드로 사용
    • INSERT INTO 테이블1 SELECT * FROM 테이블2;

    데이터를 제거하는 DELETE 문

    DELETE FROM 테이블명 [WHERE 조건];
    
    • 조건 생략 시 테이블의 전체 행이 제거됨
      • 테이블은 남아있음

    뷰 VIEW

    • 뷰는 SQL 시점에서 테이블과 동일하지만 테이블처럼 데이터를 갖는 것이 아닌 테이블에 대한 SELECT를 가지고 있다.
      • 실행 시점에 질의를 재적성하여 수행

    뷰를 사용하는 이점

    • 복잡한 SELECT 문을 매번 기술할 필요 없음
    • 필요한 열과 행만 사용자에게 보여줄 수 있고, 갱신 시에도 뷰 정의에 따른 갱신으로 한정할 수 있다.
    • 데이터 저장 없이(기억장치의 용량 사용 없이) 실현 가능
    • 뷰를 제거해도 참조 테이블은 영향을 받지 않음

    뷰를 작성하는 CREATE VIEW문

    CREATE VIEW 뷰 명 (컬럼명1[, 컬럼명2, ...]) AS SELECT 문;
    

    뷰로의 입력, 갱신 제한

    • 어떤 행이 대응하는지 모르거나 어떤 값을 넣으면 좋을지 모르는 경우에는 갱신 불가
      • GROUP BY를 통한 집약 수치, DISTINCT로 얻은 값, 2개 이상의 테이블을 조합한 뷰 등
      • 뷰에서 원래 테이블의 일부 컬럼만 선택되었고, 이외의 컬럼에 DEFAULT 값이 없고 NOT NULL인 경우

    서브쿼리

    • 메인 쿼리와 대비해 서브쿼리를 이용하여 SELECT문의 결과를 데이터처럼 다루거나 수치처럼 취급하여 조건문에 이용 가능한 쿼리
    • Scalar 서브쿼리: 한 행, 한 컬럼만 반환하는 서브쿼리

    결합 JOIN

    • JOIN을 사용하여 2개 이상의 테이블을 결합하여 쿼리 적용 가능
    • ON 을 통해 두 테이블의 행을 결합시키기 위해 결합 조건 지정 필요

    INNER JOIN

    • ON 으로 지정한 결합 조건에 일치하는 행만을 두 테이블로부터 가져와 결합
    SELECT 선택하고 싶은 열 리스트 FROM 첫 번째 테이블명 INNER JOIN 두 번째 테이블명 ON 결합 조건;
    

    OUTER JOIN

    • 한 쪽 테이블을 기준으로 전체 행을 표시하고 다른 테이블에서는 조건에 일치하는 행만을 가져와 결합
    SELECT 선택하고 싶은 열의 리스트 FROM 첫 번째 테이블명 LEFT OUTER JOIN 두 번째 테이블명 ON 결합 조건;
    
    SELECT 선택하고 싶은 열의 리스트 FROM 첫 번째 테이블명 RIGHT OUTER JOIN 두 번째 테이블명 ON 결합 조건;
    
    • 특별한 이유가 없는 한 LEFT OUTER JOIN 사용
      • 특별한 이유: 쿼리의 자동 생성으로 첫 번째 테이블, 두 번째 테이블의 순서를 변경할 수 없는 경우 등

    'Book' 카테고리의 다른 글

    [데이터베이스 첫걸음] 8장  (0) 2023.10.07
    [데이터베이스 첫걸음] 7장  (0) 2023.09.09
    [데이터베이스 첫걸음] 5장  (0) 2023.09.09
    [데이터베이스 첫걸음] 4장  (0) 2023.09.01
    [데이터베이스 첫걸음] 3장  (0) 2023.09.01

    댓글