ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [혼자 공부하는 SQL] 4장. SQL 고급 문법
    DB 2024. 4. 17. 22:56
    728x90

    MySQL의 데이터 형식

    정수형

    데이터 형식 바이트 수 숫자 범위

    TINYINT 1 -128 ~ 127
    SMALLINT 2 -32,768 ~ 32,767
    INT 4 약 -21억 ~ 21억
    BIGINT 8 약 -900경 ~ 900경

    UNSIGNED 예약어를 사용하면 값의 범위가 0부터 시작되도록 할 수 있다.

     

    문자형

    CHAR : 고정길이 문자형(자릿수 고정)

    VARCHAR : 가변길이 문자형(자릿수 유동적)

    💡 CHAR(10)에 ‘가나다’를 저장해도 10자리 모두 확보, VARCHAR(10)에 ‘가나다’를 저장하면 3자리만 사용

     

    VARCHAR가 CHAR보다 공간을 효율적으로 운영할 수 있지만, MySQL 내부적으로 성능면에서는 CHAR로 설정하는 것이 더 좋다.

    ⇒ CHAR는 글자의 개수가 고정된 경우, VARCHAR는 글자의 개수가 변동될 경우에 사용하는 것이 좋다.

     

    💡 데이터가 숫자 형태라도 연산이나 크기에 의미가 없다면 문자형으로 지정하는 것이 좋다. ex) 전화번호

     

     

    실수형

    데이터 형식 바이트 수 설명

    FLOAT 4 소수점 아래 7자리까지 표현
    DOUBLE 8 소수점 아래 15자리까지 표현

     

    날짜형

    데이터 형식 바이트 수 설명

    DATE 3 날짜만 저장, YYYY-MM-DD 형식
    TIME 3 시간만 저장, HH:MM:SS 형식
    DATETIME 8 날짜 및 시간 저장, YYYY-MM-DD HH:MM:SS

     

    변수 사용

    SET @변수이름 = 변수의 값;
    SELECT @변수이름
    

    ⇒ 변수는 MySQL 워크 벤치를 종료하면 없어짐, 따라서 임시로 사용한다고 생각하면 된다.

    LIMIT에서는 변수 사용이 불가능하다.

     

    💡 PERPARE, EXECUTE를 사용하여 LIMIT에서도 변수를 사용할 수 있다.

    SET @count = 3;
    -- mysql이라는 이름으로 쿼리문 준비
    PERPARE mysql FROM 'SELECT mem_name, height FROM member ORDER BY height LIMIT ?';
    -- mysql에 저장된 select문 실행할 때 ?에 @count 변수의 값 대입
    EXECUTE mysql USING @count;
    

     

     

    데이터 형 변환

    함수를 이용한 명시적인 변환

    CAST (값 AS 데이터_형식[(길이)])
    CONVERT (값, 데이터_형식[(길이)])
    

    암시적인 변환

    SELECT CONCAT('100', '200') -- 100200
    SELECT 100 + '200' -- 300
    

     

    두 테이블을 묶는 조인

    조인(join) : 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것

     

    Inner Join

    join이라고 부르면 inner join

     

    일대다 관계의 이해

     💡 데이터베이스의 테이블은 하나로 구성되는 것보다는 여러 정보를 주제에 따라 분리해서 저장하는 것이 효율적이다.

    일대 다 관계 : 한쪽 테이블에는 하나의 값만 존재해야 하지만, 연결된 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계

     

    Inner Join의 기본

    SELECT 열_목록
    FROM 첫_번째_테이블
    	(INNER) JOIN 두_번째_테이블
    	ON 조인될_조건
    [WHERE 검색_조건]
    

     

    Outer Join

    두 테이블 중 한쪽에만 데이터가 있어도 결과를 추출할 수 있다.

     

    Outer Join의 기본

    SELECT 열_목록
    	FROM 첫_번째_테이블(LEFT 테이블)
    		<LEFT | RIGHT | FULL> (OUTER) JOIN 두_번째_테이블(RIGHT 테이블)
    		ON 조인될_조건
    [WHERE 검색_조건]
    

     

    • left outer join
    SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
    	FROM memeber M -- M기준으로 outer join
    		LEFT JOIN buy B
    		ON M.mem_id = B.mem_id
    ORDER BY M.mem_id
    

     

    • right outer join
    SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
    	FROM buy B
    		RIGHT JOIN memeber M -- M기준으로 outer join
    		ON M.mem_id = B.mem_id
    ORDER BY M.mem_id
    

     

    • full outer join

    왼쪽이든 오른쪽이든 한쪽에 들어있는 내용이면 출력

     

    기타 조인

    Cross Join

    한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능

    → 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 개수가 된다.

    • 특징
      • ON 문 사용 불가
      • 결과의 내용은 의미가 없음(랜덤 조인이기 때문에)
      • 테스트를 위해 대용량의 데이터를 생성할 때 주로 사용

     

    Self Join

    자신이 자신과 조인

    SELECT 열_목록
    	**FROM 테이블 A
    		JOIN 테이블 B**
    		ON 조인될_조건
    [WHERE 검색_조건]
    
    728x90
Designed by Tistory.