출처https://www.geeksforgeeks.org/sql-ddl-dml-tcl-dcl/
데이터의 구조등을 정의하는 명령어
(가독성을 위해 메모를 코드 블럭 안에 넣어두었습니다:p)
테이블(스키마, 인덱스,...)=>객체등을
sql
생성
CREATE
삭제
DROP
TRUNCATE
수정
ALTER
테이블 생성
CREATE TABLE 테이블이름(
컬럼이름1 데이터타입(크기) [제약조건1] [제약조건2],
컬럼이름2 데이터타입(크키) [제약조건1] [제약조건2]...,
[CONSTRAINT 제약조건이름 제약조건종류(적용컬럼)],
[CONSTRAINT 제약조건이름 제약조건종류(적용컬럼)]
);
제약조건종류
UNIQUE
중복되는 값은 허용하지 않겠다
PRIMARY KEY
각각의 행을 구분하는 기본키로 사용하겠다
(중복 X, NULL X)
NOT NULL
NULL 값을 허용하지 않겠다
CHECK (조건)
조건을 만족하는 범위의 값들만 허용하겠다
FOREIGN KEY
(외래키)제약조건
테이블과 테이블을 연결할 때 사용,
외래키로 지정한다면 관계가 생긴다
외래키로 지정이 되면 제공을 해주는 테이블(부모)과
제공을 받는 테이블(자식) 사이에서 참조무결성을 지켜줄 수 있다
자식에서 부모에없는 데이터를 추가하려면 오류발생
자식에서 있는 데이터를 부모에서 삭제하려면 오류발생
컬럼의 DEFAULT 값 설정하기
데이터를 저장할 때 명시적으로 작성된 값이 없다면 들어갈 기본 값
기본적으로 컬럼에 명시적으로 작성된 값이 없다면 NULL값이 들어간다
이때 특수한 값을 기본값으로 설정하고 싶다면 다음과 같이 작성한다
CREATE TABLE 테이블이름(
컬럼이름1 데이터타입(크기) [DEFAULT 값] [제약조건1] [제약조건2],
컬럼이름2 데이터타입(크키) [DEFAULT 값] [제약조건1] [제약조건2]...,
[CONSTRAINT 제약조건이름 제약조건종류(적용컬럼)],
[CONSTRAINT 제약조건이름 제약조건종류(적용컬럼)]
);
DROP
DROP TABLE 테이블이름;
테이블 전체 구조 삭제
TRUNCATE
TRUNCATE TABLE 테이블이름;
테이블 구조를 최초의 상태로 만든다
(데이터만 삭제)
ALTER
테이블 구조를 수정
ADD
테이블속 새로운 컬럼을 추가(기존컬럼이름과 중복 X)
ALTER TABLE 테이블이름
ADD 컬럼이름 데이터타입(크기) [DEFAULT 값] [제약조건];
새로운 제약조건을 추가
ALTER TABLE 테이블이름
ADD CONSTRAINT 제약조건이름 제약조건종류 (컬럼이름);
MODIFY
테이블속 만들어져있는 컬럼을 수정
ALTER TABLE 테이블이름
MODIFY 컬럼이름 데이터타입(크기) [DEFAULT 값] [제약조건];
DROP
컬럼을 삭제
ALTER TABLE 테이블이름
DROP 컬럼이름;
제약조건을 삭제
ALTER TABLE 테이블이름
DROP CONSTRAINT 제약조건이름;
CHANGE
컬럼이름 수정
ALTER TABLE 테이블명
CHANGE 기존컬럼이름 새컬럼이름 데이터타입(크기) [DEFAULT 값] [제약조건]
데이터 조작(다루다, MANIPULATION)
DML(Data Manipulation Language)
SELECT
조회(저장되어있는 데이터 조회)
INSERT
삽입(새로운 데이터 추가)
UPDATE
수정(기존 데이터 수정)
DELETE
삭제
INSERT
INSERT INTO 테이블이름
(컬럼이름1, 컬럼이름2, ... , 컬럼이름N)
VALUES
(값, 값, ... , 값);
정의된 데이터의 구조에 따라 알맞지 않는 데이터가 삽입이 되면
오류발생
SELECT
데이터 조회
SELECT 컬럼이름, 컬럼이름, 컬럼이름, ... , 컬럼이름
FROM 테이블이름;
행 골라내기
SELECT 컬럼이름, 컬럼이름, ... , 컬럼이름
FROM 테이블이름
WHERE 조건;
연산자
A > B
A가 B보다 큰조건
A < B
A가 B보다 작은 조건
A >= B
A가 B보다 크거나같은 조건
A <= B
A가 B보다 작거나 같은 조건
A = B
A가 B랑 같은 조건
A <> B, !=
A가 B랑 다른 조건
SQL 연산자
a LIKE 패턴
a가 패턴을 만족하는 문자열이라면 행을 골라내겠다
패턴
% : 물결이라고 생각한다
_ : 자릿수
A IS NULL
A가 NULL 이라면 행을 골라내겠다
A IS NOT NULL
A가 NULL이 아닌 행을 골라내겠다
a BETWEEN b AND c
a가 b 이상 c 이하를 만족하는 행을 골라내겠다
a IN (b, c, d, ... n)
a 가 b 또는
a 가 c 또는
a 가 d 또는
...
a 가 n 이랑 같은 조건을 만족하는 행을 골라내겠다
EXIST
NOT EXIST
(서브쿼리 배워야 사용가능)
논리연산자
조건1 AND 조건2
조건1과 조건2를 모두 만족하는 행만 골라내겠다
조건1 OR 조건2
조건1 혹은 조건2 둘 중 하나라도 만족하는 행만
골라내겠다
NOT 조건
조건을 만족하지 않는 행을 골라내겠다
정렬방법
좀더 고급 레벨을 공부하고 싶다면 찾아보기!
JOIN(여러 테이블 합치기)
집합연산자(여러 테이블 합치기)
집계함수
WINDOW함수
DROP TABLE a;
DROP TABLE tbl_users;
# 부모테이블
CREATE TABLE 회원(
아이디 VARCHAR(8),
비밀번호 VARCHAR(200) NOT NULL,
이름 VARCHAR(200) NOT NULL,
주소 VARCHAR(200) NOT NULL,
CONSTRAINT 회원테이블PK PRIMARY KEY (아이디)
);
# 회원테이블에 있는 아이디 라는 컬럼을 주문정보테이블 에서 참조해야한다
CREATE TABLE 주문정보(
주문번호 INT PRIMARY KEY,
상품코드 VARCHAR(200) NOT NULL,
주문자 VARCHAR(8) REFERENCES 회원(아이디),
개수 INT
);
DROP TABLE 주문정보;
CREATE TABLE 주문정보(
주문번호 INT PRIMARY KEY,
상품코드 VARCHAR(200) NOT NULL,
주문자 VARCHAR(8),
개수 INT,
CONSTRAINT 주문정보주문자FK FOREIGN KEY(주문자) REFERENCES 회원 (아이디)
);
# 컬럼 삭제
ALTER TABLE 주문정보
DROP COLUMN 개수;
# 제약조건 삭제
ALTER TABLE 주문정보
DROP CONSTRAINT 주문정보주문자FK;
# 컬럼 추가
ALTER TABLE 주문정보
ADD 가격 INT DEFAULT 0 NOT NULL;
# 제약조건 추가
ALTER TABLE 주문정보
ADD CONSTRAINT 주문정보가격UN UNIQUE (가격);
# 컬럼 추가
ALTER TABLE 주문정보
MODIFY 상품코드 INT NOT NULL;
# 데이터 삽입(추가)
INSERT INTO 회원
(아이디, 비밀번호, 이름, 주소)
VALUES
('abc123', '1234', '배상엽', '서울시 송파구');
INSERT INTO 회원
(아이디, 비밀번호, 이름, 주소)
VALUES
('def123', '9876', '홍길동', '서울시 강남구');
SELECT * FROM 회원;
SELECT 아이디,
비밀번호,
이름,
주소
FROM 회원;
# ----------------------------------------------------------------------------------------------------
# 연습용 테이블
# 테이블이름은 TBL_TMP 입니다
# 총 3개의 컬럼이 있으며
# ID 컬럼은 PRIMARY KEY로 사용되고, INT타입입니다
# NAME 컬럼은 VARCHAR(20) 타입이며, NULL값은 들어갈 수 없습니다
# AGE 컬럼은 INT 타입이며 NULL값은 가능하고, 기본값으로는 0이 설정되어있습니다
create table tbl_tmp(
id int,
name varchar(20) not null,
age int default 0,
constraint tbl_tmp_pk primary key (id)
);
drop table tbl_tmp;
# ID : 1
# NAME : 'Kevin'
# AGE : 10
# 추가하기
insert into tbl_tmp
values(1, 'kevin', 10);
# ID : 20
# NAME : 'David'
# AGE : 15
# 추가하기
insert into tbl_tmp
values(20, 'David', 15);
# ID : 30
# NAME : 'Jessie'
# AGE : 32
# 추가하기
insert into tbl_tmp
values(30, 'Jessie', 32);
# ID : 40
# NAME : 'Brian'
# AGE : 14
# 추가하기
insert into tbl_tmp
values(40, 'Brian', 14);
# ID : 50
# NAME : '홍길동'
# AGE : null
# 추가하기
insert into tbl_tmp
values(50, '홍길동', null);
# ID : 60
# NAME : '김철수'
# AGE : null
# 추가하기
insert into tbl_tmp
values(60, '김철수', null);
insert into tbl_tmp
(id, name)
values(100, '유하준');
select * from tbl_tmp;
# 행 골라내기: select문 안의 where 절에 조건을 작성한다
select *
from tbl_tmp
where 15 > 10; # 조건이 true이기 때문에 모든 행이 다 골라짐
select *
from tbl_tmp
where 15 < 10; # 조건이 false이기 때문에 행이 하나도 안골라짐
select
*
from
tbl_tmp
where
id > age;
select
*
from
tbl_tmp
where
id != 50;
select *
from tbl_tmp
where age is not null;
select *
from tbl_tmp
where age between 10 and 30;
select *
from tbl_tmp
where id in (20, 40, 100);
select *
from tbl_tmp
where id between 10 and 50
or age < 30;
select *
from tbl_tmp
where name like '%v%i%'; # kevin, David 나옴