ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MariaDB 열과 행
    DBMS/MariaDB 2024. 2. 23. 22:25
    728x90
    반응형

    열(Column)


        - 테이블에 존재하는 레코드가 가지는 데이터의 타입을 정하기 위해 사용
        - 명명법 : 스네이크 케이스, 단/복수형

     

    열의 구조는 아래와 같다

    `열 이름` [데이터 타입] [null|not null]? [default x]? [auto_increment]?


            null            : 해당 열의 값이 비어있을 수 있다는 의미. 생략시 기본값
            not null        : 해당 열의 값이 비어있을 수 없다
            default         : 레코드 삽입 시 열의 값을 명시하지 않을 경우 사용할 기본값을 x로 설정. 생략시 x는 null
            auto_increment  : 


    데이터 타입

        - 모든 정수형과 decimal을 제외한 실수형 타입 뒤에 unsigned 키워드를 붙여 음수부 크기만큼 양수를 추가적으로 사용할 수 있다.
          가령, tinyint unsigned 타입의 범위는 0부터 255까지

        정수형
            - tinyint(1 byte)   : -128~ 127까지 정수

            - smallint(2 byte)  : -32,768~ 32767까지 정수

            - mediumint(3 byte) : -8,388,608~ 8,388,607까지 정수

            - int(4 byte)       : -2,147,483,648~ 2,147,483,647까지 정수
            
            - bigint(8 byte)    : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807까지 정수

        실수형
            - float(4 byte)     : -3.402823466e+38부터 3.402823466e+38 까지 부동 소수
                                    값을 저장하는 방식 때문에 오차가 발생할 수 있어 민감한 데이터를 저장하는데 사용하지 않음
                                    
            - double(8 byte)    : -1.797693134862315157e+308~ 1.79769313486231573e + 308 까지 부동 소수
                                    값을 저장하는 방식 때문에 오차가 발생할 수 있어 민감한 데이터를 저장하는데 사용하지 않음

            - decimal(t, p)(t byte) : 전체 길이가 t, 소수부 길이가 p인 고정 소수. 차지하는 용량이 큰 대신, 값이 유실되지 않음

        문자형
           - varchar(n):(최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 65,535이다.   
                                값을 직접 저장함. 값을 빨리, 자주 보여줘야 하는 것들은 varchar 사용

            - tinytext(n): (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 255이다.

            - text(n)    : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 65,535이다.   
                                값을 다른 곳에 따로 저장하고 그 파일의 경로를 저장함. 나머지 text들도 마찬가지

            - mediumtext(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 16,777,215이다.

            - longtext(n)   : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 4,294,967,295이다.

        논리형
            - boolean(1 byte)   : 참(true)과 거짓(false)을 가질 수 있다

        날짜와 시간
            - date      : 날짜(년, 월, 일)를 가질 수 있다.
            - time(n)   : 시간(시, 분, 초)을 가질 수 있다. n은 밀리초의 길이를 의미하며, 생략시 0이고, 최대값은 6이다.
            - datetime(n)   : 날짜 및 시간을 가질 수 있다. n은 밀리초의 길이를 의미하며, 생략시 0이고, 최대값은 6이다.

        기타
            - tinyblob(n)   : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 255이다.

            - blob(n)       : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 65,535이다.   

            - mediumblob(n) : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 16,777,215이다.

            - longblob(n)   : (최대 4n Bytes) 문자를 담기 위해 사용한다. 최대 n개의 문자를 담을 수 있고 n의 최대 값은 4,294,967,295이다.

     

    레코드(Record)

        - 테이블에 소속된 실제 데이터(행, row)를 의미

    삽입하기

        - 테이블에 레코드 삽입을 위해 아래 쿼리 실행

    INSERT INTO `스키마`.`테이블` ([열 이름, ...])
    VALUES ([값, ...])


    위 쿼리에서 명시한 열의 순서와 값의 순서는 반드시 일치해야 한다.
    명시한 열의 순서는 테이블이 가지는 열의 순서와 일치할 필요는 없다.
    열 이름을 명시할 필요는 없는데, 열 이름을 명시하지 않을 경우 테이블이 가지고 있는 모든 열을 순차적으로 명시한 것과 동일하다
            명시되지 않은 열의 값은 기본값(DEFAULT)을 활용한다.

    쿼리 하나로 여러 레코드를 한 번에 삽입하기 위해 아래 쿼리 실행

    INSERT INTO `스키마`.`테이블`([열, ...])
    VALUES([값, ...]),
    ([값, ...]),
    ([값, ...]),
    ([값, ...]), ...;


    VALUES 뒤에 오는 쉼표(,)로 구분된 소괄호((,))한 묶음이 레코드 하나를 의미한다
    여러개의 레코드를 삽입할 때 여러개의 쿼리를 실행하는 것보다 하나의 쿼리만 실행하는 것이 무조건 빠름, 가능한 한 이런 방식을 사용

    조회하기

    테이블이 가지고 있는 레코드를 조회하기 위해 아래 쿼리 실행       

    SELECT [*|열, ...|리터럴, ...]
    FROM `스키마`.`테이블`
    [JOIN...]?
    [WHERE [조건]]?
    [GROUP BY [기준 열, ...]]?
    [ORDER BY [기준 열, ...] [ASC|DESC]?]?
    [LIMIT [개수] [OFFSET [개수]]?]?;


    *             : 테이블이 가지고 있는 모든 열
    WHERE       : 조건에 맞는 레코드만 선택
    GROUP BY    : 통계 함수를 사용할 때 레코드를 묶어낼 기준 열을 명시한다. 명시하지 않을 경우, 모든 레코드를 통계 기준으로 한다.
                
    ORDER BY    : 선택 결과를 정렬할 기준열 지정
    ASC      : 오름차순 정렬, 기본값
    DESC    : 내림차순 정렬

    LIMIT OFFSET
                LIMIT   : 본래 SELECT에 의해 선택될 결과에서 명시한 개수의 상위 레코드만 선택
                OFFSET  : 본래 SELECT에 의해 선택될 결과에서 명시한 개수의 상위 레코드만 선택. LIMIT보다 선행. 단독 생략 불가

    SELECT `code`, `name`
    FROM `world`.`countries`
    ORDER BY `code`
    LIMIT 2 OFFSET 1;       # 2개를 가져오는데 1단계 생략하고 출력, 12를 출력할 때 OFFSET 1; 을 하면 23이 출력된다
                            <!-- 생략만 하고 싶으면 LIMIT 0 OFFSET 1을 하면 됨 -->



    조인

           - 현재 조회하고 있는 테이블이 가진 데이터를 활용하여 다른 테이블에 있는 데이터를 함께 조회할 때 사용
        - 구조는 아래와 같다

    [LEFT|RIGHT|INNER] JOIN `스키마`.`테이블` AS `별명` ON [조건]


    조인 대상이 되는 테이블이 가지는 레코드 중 조건에 부합하는 레코드를 모두 가져온다.
            LEFT    : FROM 대상이 되는 테이블이 가지는 데이터를 기준으로 선택
            RIGHT   : JOIN 대상이 되는 테이블이 가지는 데이터를 기준으로 선택
            INNER   : FROM과 JOIN 대상이 되는 테이블이 가지는 데이터의 교집합을 기준으로 선택

    한 SELECT문에 여러 개의 JOIN이 사용될 수 있고, 따로 구분자는 없어서 그냥 한 줄 더 적으면 된다.      

    단, 별명(AS)이 같은 경우는 안됨

    예시

    SELECT CONCAT_WS('-', `student_grade`,`student_class`,`student_number`) AS 학년반번호,
                                                                        `stdents`.name AS 이름,
                                                                        `subjects`.`text` AS 과목,
                                                                        `scores`.`value` AS 점수
    
    FROM `school`.`scores`
    LEFT JOIN `school`.`subjects` ON scores.subject_code = subjects.code
    LEFT JOIN `school`.`stdents` ON scores.student_grade = stdents.grade &&
            scores.student_class = stdents.class &&
            scores.student_number = stdents.number;



    수정하기

    레코드가 가지는 값을 수정하기 위해 아래 쿼리를 실행

    UPDATE `스키마`.`테이블`
    SET [[`열 이름` = [값]], ...];


    위 쿼리는 조건 없이 모든 레코드를 수정하는 쿼리이므로, 일반적으로 사용하지 않는다.
    주로 아래와 같이 WHERE 키워드를 사용하여 수정하고자 하는 레코드를 제한한다.

    UPDATE `스키마`.`테이블`
    SET [[`열 이름` = [값]], ...]
    WHERE [조건];



    삭제하기

        - 레코드를 삭제하기 위해 아래 쿼리 실행

    DELETE
    FROM `스키마`.`테이블`;


    위 쿼리는 조건 없이 모든 레코드를 삭제하는 쿼리이므로, 일반적으로 사용하지 않는다.
    주로 아래와 같이 WHERE 키워드를 사용하여 삭제하고자 하는 레코드를 제한한다.

    DELETE
    FROM `스키마`.`테이블`
    WHERE [조건];
    
    DELETE
    FROM `world`.`countries`
    WHERE `code` = 'JP';

     

    728x90
    반응형

    'DBMS > MariaDB' 카테고리의 다른 글

    MariaDB 함수  (0) 2024.02.25
    MariaDB 연산자  (0) 2024.02.23
    MariaDB 스키마와 테이블  (0) 2024.02.23
    MariaDB 기본 개념, 사용자와 권한  (0) 2024.02.23
Designed by Tistory.