데이터의 집합, 데이터의 저장소
대량의 데이터베이스를 효율적으로 관리하고 운영하기 위한 시스템 또는 소프트웨어
MySQL, Oracle, MariaDB
테이블이라는 최소 단위로 이루어진 관계형 DBMS
RDBMS에서 데이터를 구축, 관리하고 활용하기 위해 사용되는 언어
MySQL의 모든 권한이 있는 관리자 이름
MySQL을 설치할 때 기본적으로 생성
현실 세계의 업무를 컴퓨터 시스템으로 옮겨 놓는 일련의 과정
데이터베이스 구축 전 테이블의 구조를 미리 설계하는 과정
소프트웨어 개발 절차 중 하나로
위에서 아래로 폭포가 떨어지듯 개발 단계가 진행되기 때문에 붙여진 이름
테이블의 열에 저장될 데이터의 형식
문자형(CHAR), 정수형(INT), 날짜형(DATE) 등이 있음
테이블의 세로, 테이블은 여러 개의 열로 구성되며, 각 열을 구분하기 위해 열 이름을 사용
테이블의 가로, 실질적인 데이터(행 데이터)를 의미
MySQL 안에 들어 있는 데이터베이스
기존에 약속된 SQL, SELECT, FROM, WHERE 등이 있음
쿼리 창에서 입력하면 자동으로 파란색으로 표시됨
비어 있는 값
빈 값을 허용하지 않는, 즉 반드시 입력해야 하는 값
사용할 데이터베이스를 선택하는 구문으로, 한 번 지정하면 계속 유지된다. MySQL 워크벤치를 재시작하거나 쿼리 창을 새로 열면 다시 USE를 실행해야 함
가장 기본적인 SQL문
SELECT 다음에는 열 이름이
FROM 다음에는 테이블 이름이
WHERE 다음에는 다양한 조건식이 나옴
WHERE 절에서 2가지 이상의 조건을 지정할 때 사용. AND, OR 등으로 참/거짓을 판별
문자열의 일부 글자를 검색할 때 사용
모두 허용할 때는 % 를, 하나로 지정할 때는 _ 를 사용
결과가 출력되는 순서를 조절
오름차순인 ASC(Ascending)와 내림차순인 DESC(Descending) 중 선택할 수 있음
출력하는 개수를 제한하며, 주로 ORDER BY와 함께 사용됨
조회된 결과에서 중복된 데이터를 1개만 남김
DISTINCT를 열 이름 앞에 붙여 사용함
데이터를 그룹으로 묶어주는 기능을 함
주로 집계 함수와 함께 사용됨
SELECT 문에서 실제 열 이름 대신 출력되도록 설정하는 문자
데이터를 그룹화(grouping)해주는 기능을 함
주로 GROUP BY와 함께 사용함
집계 함수 종류
함수명 | 설명 |
---|---|
SUM() | 합계 구하기 |
AVG() | 평균 구하기 |
MIN() | 최소값 구하기 |
MAX() | 최대값 구하기 |
COUNT() | 행의 개수 세기 |
COUNT(DISTINCT) | 행 개수 세기 (중복은 1개만 인정) |
집계 함수와 관련된 조건을 제한하며, 반드시 GROUP BY 절 다음에 나와야 함
테이블에 데이터를 입력(삽입)하는 기본적인 SQL 문
열을 정의할 때 1부터 증가하는 값을 자동으로 입력해줌
해당 열은 반드시 PRIMARY KEY로 지정해야 함
다른 테이블의 데이터를 가져와 한 번에 입력
단, SELECT 문의 열 개수는 INSERT를 할 테이블의 열 개수와 같아야 함
기존에 입력되어 있는 값을 수정하는 명령
주로 WHERE 절과 함께 사용
WHERE 절을 생략하면 테이블의 모든 행의 값이 변경되므로 주의해야 함
행 단위로 데이터를 삭제함
WHERE 절을 생략하면 전체 행 데이터가 삭제되므로 주의해야 함
대량의 행 데이터를 모두 삭제할 때는 DELETE보다 TRUNCATE가 효율적
소수점이 없는 숫자
TINYINT, SMALLINT, INT, BIGINT 등이 있음
UNSIGNED
정수형에 붙이면 범위가 0부터 지정됨
글자를 저장하기 위해 사용
입력할 최대 글자의 개수를 지정해야 함
고정길이 문자형인 CHAR와 가변길이 문자형인 VARCHAR가 있음
소수점이 있는 숫자를 저장할 때 사용
소수점 아래 7자리까지 표현되는 FLOAT와 소수점 아래 15자리까지 표현되는 DOUBLE이 있음
날짜를 저장하는 DATE
시간을 저장하는 TIME
날짜와 시간을 둘 다 저장하는 DATETIME이 있음
MySQL에서는 변수 이름 앞에 @를 붙이고 SET 문으로 변수에 값을 대입함
문자형, 정수형 등의 데이터 형식을 다른 형태로 변경하는 것
직접 함수를 사용해서 변환하는 명시적 변환과 별도의 지시 없이 자연스럽게 변환되는 암시적 변환이 있음
명시적 변환에는 CAST(), CONVERT() 등을 사용함
두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것
두 테이블이 조인할 경우 한쪽 테이블에는 하나의 값만 존재해야 하지만,
연결된 다른 테이블에는 여러 개의 값이 존재할 수 있는 관계를 말함
주로 기본 키(PK)와 외래 키(FK) 관계로 맺어져 있어 ‘PK-FK 관계’라고 부르기도 함
두 테이블을 조인할 때, 두 테이블에 모두 데이터가 있어야 결과가 바로 추출됨
조인 중에 가장 많이 사용되며, 일반적으로 조인이라 하면 바로 이 내부 조인을 뜻함
두 테이블을 조인할 때, 필요한 데이터가 한쪽 테이블에만 있어도 결과를 추출할 수 있음
한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능
따라서 상호 조인 결과의 전체 행 개수는 두 테이블의 각 행 개수를 곱한 개수가 됨
자신이 자신과 조인된다는 의미로, 하나의 테이블에 서로 다른 별칭을 붙여 사용
다양한 조건을 처리할 때 사용
조건식이 참이라면 결과가 실행되지만, 그렇지 않으면 실행되지 않음
조건식이 참일 때와 거짓일 때 각각 다른 부분을 실행함
2가지 이상의 여러 가지 조전에 따라 처리가 가능
‘다중 분기’라고 부름
조건식이 참인 동안에는 계속 같은 내용을 반복
지정한 레이블로 가서 계속 실행하는 ITERATE 문과 지정한 레이블을 빠져나가는 LEAVE 문을 함께 사용할 수 있음
미리 SQL 문을 준비한 후에 필요할 때 실행하는 것
PREPARE는 SQL 문을 준비만 해놓고, EXECUTE는 준비한 SQL문을 실행함
실행 후에는 DEALLOCATE PREPARE로 문장을 해제해야 함
표 형태로 구성된 2차원 구조로
열과 행으로 구성되어 있음
테이블을 생성하는 SQL로, 테이블 이름, 열 이름, 데이터 형식 등을 지정함
두 테이블이 일대다로 연결되는 관계로 기본 키-외래 키 관계를 맺으면 오류가 없는 데이터가 됨
기본 키가 있는 테이블을 기준 테이블, 외래 키가 있는 테이블을 참조 테이블이라 함
데이터의 무결성, 즉 데이터에 결함을 없애기 위해 제한하는 조건
많은 행 데이터 중 특정 데이터를 구분할 수 있는 식별자, 기본 키를 지정하여 중복된 데이터가 입력되지 않도록 제한하는 제약조건임
테이블 또는 뷰의 정보를 조회하는 SQL 문, 줄여서 DESC라고 써도 됨
이미 만들어진 테이블을 수정하는 SQL 문
외래 키로 두 테이블 사이를 기본 키-외래 키 관계로 연결하여 무결한(오류가 없는) 데이터로 만드는 제약조건임
기준 테이블의 기본 키를 변경하면 참조 테이블의 외래 키도 자동으로 변경되는 기능
기준 테이블의 기본 키를 삭제하면 참조 테이블의 외래 키도 자동으로 삭제되는 기능
중복되지 않는 유일한 값을 입력해야 하는 제약조건
기본 키와는 다르게 NULL값을 허용하며 여러 개를 설정해도 됨
입력되는 데이터를 점검하는 제약조건
해당 열의 정의 뒤에 CHECK(조건)을 추가하여 사용
값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 제약조건
가상의 테이블
테이블처럼 실제 데이터를 가지고 있지는 않고, SELECT 문으로 만들어져 있기 때문에 뷰에 접근하는 순간 SELECT가 실행되면서 그 결과가 화면에 출력되는 방식
뷰를 실행하는 SQL 문
뷰를 수정하는 SQL 문
뷰를 삭제하는 SQL 문
뷰에 설정된 범위에 따라 그에 해당되는 값만 입력되도록 지정하는 SQL 문
테이블에서 데이터를 빠르게 조회할 수 있도록 도와주는 도구
기본 키로 지정하면 자동으로 생성되고 테이블당 1개만 만들 수 있음
해당 열을 기준으로 자동 정렬됨
고유 키(Unique)로 지정하면 자동으로 생성되며, 테이블당 여러 개를 만들 수 있음
자동 정렬은 되지 않음
자료 구조에서 범용적으로 사용되는 데이터 구조
클러스터형 인덱스와 보조 인덱스 모두 내부적으로 이 균형 트리로 만들어짐
균형 트리 구조에서 데이터가 저장되는 공간
가장 상위부터 루트 노드, 중간 노드, 리프 노트로 구분함
MySQL에서는 노드를 페이지라고 부름
16Kbyte(16384byte) 크기를 가진 최소한의 저장 단위로,
데이터를 1건만 입력해도 1개 페이지가 필요
데이터 입력 시 입력할 페이지에 공간이 없는 경우 새로운 페이지를 준비해서 데이터를 나누는 작업
페이지 분할이 일어날수록 MySQL이 느려지기 때문에 성능에 나쁜 영향을 줄 수 있음
클러스터형 또는 보조 인덱스를 이용해서 데이터를 검색하는 것
속도는 인덱스를 사용하지 않았을 때보다 빠르고
클러스터형 인덱스가 보조 인덱스보다 조금 더 빠름
인덱스를 직접 생성하는 구문
보조 인덱스가 생성됨
CREATE INDEX 문으로 생성한 인덱스를 제거함
기본 키, 고유 키로 자동 생성된 인덱스는 DROP INDEX로 제거하지 못함
테이블에 어떤 인덱스가 설정되어 있는지 확인하는 SQL 문
테이블에 생성된 인덱스의 크기를 확인하는 SQL 문
중복을 허용하는 보조 인덱스
CREATE INDEX 문으로 생성함
중복을 허용하지 않는 보조 인덱스
CREATE UNIQUE INDEX 문으로 생성함
인덱스를 생성한 후 ANALYZE TABLE 문을 실행해서 테이블을 분석/처리해줘야 실제로 적용됨
MySQL 워크벤치에서 SQL 실행 시 인덱스의 사용 여부를 확인할 수 있음
MySQL에서 제공하는 프로그래밍 기능
쿼리 문의 집합으로 어떤 동작을 일괄 처리하기 위한 용도로 사용
SQL를 묶는 개념 외에 연산식, 조건문, 반복문 등을 사용할 수도 있음
스토어드 프로시저는 BEGIN ~ END 사이에 코드를 구현
MySQL에서는 기본적으로 세미콜론(;)을 구분자로 사용하는데,
스토어드 프로시저 안에 있는 SQL의 끝에도 세미콜론을 사용하면 혼동될 수 있으므로
구분자를 $$, ##, %%, && 등으로 바꿔 사용하는 것이 좋음
작성된 스토어드 프로시저를 실행(호출)하는 명령문
스토어드 프로시저에 값을 전달
형식은 IN 구문을 사용
스토어드 프로시저에서 처리된 결과를 돌려받음
형식은 OUT 구문을 사용
MySQL에서 제공하는 다양한 내장 함수 외에 사용자가 직접 만들어서 사용하는 함수
스토어드 함수에서 반환할 값의 데이터 형식을 미리 지정할 때 사용함
스토어드 함수에서 값을 반환할 때 사용함
테이블의 모든 행을 한 행씩 처리할 때 사용하는 방식
DECLARE로 선언하며, 그 내용은 SELECT 문임
행의 끝을 파악하기 위한 변수로 endOfRow를 준비함
행의 끝에 다다르면 TRUE 값인지 체크하는 방식을 사용
테이블에서 DML 문(Inset, Update, Delete 등)의 이벤트가 발생할 때 자동으로 실행되는 프로그래밍 기능
참고
[혼자 공부하는 SQL]