#1 데이터 정의어 DDL - Data Definition Language
CREATE - 테이블 생성
CREATE TABLE 테이블명(
필드명1 타입,
필드명2 타입,
...
);
CREATE TABLE 테이블명(
id VARCHAR(10) NOT NULL,
name VARCHAR(10) NOT NULL,
address VARCHAR(30) NULL
);
SHOW - 테이블 목록 조회
// 데이터베이스가 가지고 있는 테이블의 목록을 출력
SHOW TABLES;
DESC - 테이블 구조 확인
// 테이블이 가진 필드, 타입, 조건 등의 구조 출력
DESC 테이블명;
ALTER - 테이블 수정
// 새로운 필드 추가
ALTER TABLE 테이블명 ADD 필드명 타입 AFTER 필드명(위치);
// 기존 필드 삭제
ALTER TABLE 테이블명 DROP 필드명;
// 테이블 이름 변경
ALTER TABLE 테이블명 RENAME 새로운_테이블명;
DROP - 테이블 삭제
DROP TABLE 테이블명;
#2 데이터 조작어 DML - Data Manipulation Language
SELECT - 데이터 검색 (조회)
// 데이터 전체 조회
SELECT * FROM 테이블명;
// 특정 필드만 조회
SELECT 필드명1 FROM 테이블명;
SELECT 필드명1, 필드명2 FROM 테이블명;
// 특정 필드에서 특정한 데이터 조회
SELECT 필드명1, 필드명2 FROM 테이블명 WHERE 필드명=조건;
INSERT - 데이터 삽입 (레코드 단위)
INSERT INTO 테이블명(필드명1, 필드명2, ... ) VALUES(데이터1, 데이터2, ...);
UPDATE - 레코드 수정
UPDATE 테이블명 SET 필드명=변경조건 WHERE 필드명=기존값;
DELETE - 레코드 삭제
DELETE FROM 테이블명 WHERE 필드명=조건;
+
검색 조건
LIKE - 유사한 값 찾기
SELECT * FROM book WHERE title LIKE '어린왕자'; // 제목이 어린왕자인 책 검색
SELECT * FROM book WHERE title LIKE '%왕자'; // ~왕자
SELECT * FROM book WHERE title LIKE '어린%'; // 어린~
SELECT * FROM book WHERE title LIKE '%왕%'; // ~왕~
DISTINCT - 중복값을 제거하고 조회
SELECT DISTINCT title, author FROM book;
BETWEEN, IN, NOT IN - 특정 범위의 데이터 조회
SELECT * FROM 테이블명 WHERE 필드명 BETWEEN a AND b; // a와 b 사이의 값
// a IN b: b에 a가 포함된 값
// a NOT IN b: b에 a가 포함되지 않은 값
ORDER BY ~ ASC/DESC - 데이터 정렬
SELECT * FROM 테이블명 ORDER BY 필드명 ASC; // 오름차순 (S->L)
SELECT * FROM 테이블명 ORDER BY 필드명 DESC; // 내림차순 (L->S)
#3 데이터 제어어 DCL - Data Control Language
GRANT - 유저에게 데이터베이스 권한 부여
// 사용자 생성 (로컬로 접속한 호스트를 허용)
CREATE USER username@localhost IDENTIFIED BY '1234';
// 권한 부여 (ALL: 모든 권한 부여)
GRANT ALL PRIVILEGES ON shared_kickboard.* TO username@localhost;
// 설정 권한 적용
FLUSH PRIVILEGES;
// 권한 확인
SHOW GRANTS FOR username@localhost;
REVOKE - 유저로부터 데이터베이스 권한 회수
// 모든 권한 제거
REVOKE ALL ON shared_kickboard.* FROM username@localhost;
#4 제약 조건
NOT NULL - 널 값 비허용: 데이터를 입력하지 않으면 에러 발생 (기본값은 널 값 허용)
CREATE TABLE customer(
id VARCHAR(10),
name VARCHAR(10) NOT NULL
);
UNIQUE - 중복 값 비허용, 똑같은 값이 있으면 에러 발생 (널 값은 비교가 불가능하여 에러 미발생)
CREATE TABLE customer(
id VARCHAR(10) UNIQUE,
name VARCHAR(10) NOT NULL
);
DEFAULT - 기본값 설정
CREATE TABLE customer(
id VARCHAR(10) UNIQUE,
name VARCHAR(10) NOT NULL,
address VARCHAR(30) DEFAULT 'No address'
);
CHECK - 값의 범위를 제한, 제한 값이 아닌 경우 에러 발생
CREATE TABLE customer(
id VARCHAR(10) UNIQUE,
name VARCHAR(10) NOT NULL,
address VARCHAR(30) DEFAULT 'No address',
age INT CHECK (age >= 19)
);
CONSTRAINT - 제약 조건 정의
CREATE TABLE customer(
id VARCHAR(10) UNIQUE,
age INT,
CONSTRAINT id_unique UNIQUE (id),
CONSTRAINT age_check CHECK (age >= 19)
);
// 생성된 제약 조건 조회
SELECT * FROM information_schema.table_constraints;
제약 조건 추가/수정/삭제
// 제약 조건 추가
ALTER TABLE customer
ADD CONSTRAINT address_unique UNIQUE (address);
// DEFAULT 제약 조건 수정
ALTER TABLE customer
ALTER address SET DEFAULT '주소 없음';
// 제약 조건 삭제
ALTER TABLE customer DROP CONSTRAINT address_unique;
// DEFALT 제약 조건 삭제
ALTER TABLE customer ALTER address DROP DEFAULT;
#4 인덱스
데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
데이터를 검색할 때는 테이블에서 모든 데이터를 하나씩 접근하여 확인해야 하지만, 인덱스가 있다면 보다 쉽게 데이터를 찾아갈 수 있다.
규모가 크고, 데이터의 삽입/수정/삭제 작업이 많지 않고, WHERE/ORDER BY/JOIN을 자주하며 데이터의 중복도가 낮은 컬럼에서 유용하다.
CREATE INDEX customer_id ON customer(id);
'Database' 카테고리의 다른 글
[SQL] 계층형 질의 - WITH, CTE (0) | 2024.05.12 |
---|---|
[SQL] 집합 연산자 (0) | 2024.05.12 |
[DB/SQL] 서브쿼리 (0) | 2024.04.07 |
[DB/SQL] 다수의 테이블 제어 - 데이터 그룹 짓기 (0) | 2024.04.07 |
[DB/SQL] 키 Key (0) | 2024.04.07 |