Data Definition Language
데이터베이스나 테이블 등의 생성, 수정 및 삭제 등 전체 구조를 정의하는 SQL
데이터베이스 또는 테이블을 생성하기 위한 SQL
CREATE DATABASE `데이터베이스명`;
CREATE TABLE `테이블명` ( `필드명1` 데이터타입(size) [속성], `필드명2` 데이터타입(size) [속성], `필드명3` 데이터타입(size) [속성] );
userid, passwd, name, email 4개의 필드를 가진 user 테이블을 생성한다.
CREATE TABLE `user` (
`userid` varchar(20) NOT NULL,
`passwd` varchar(128) NOT NULL,
`name` varchar(20) NOT NULL,
`email` varchar(50) NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
테이블의 구조 또는 필드의 속성을 변경하기 위한 SQL
ALTER TABLE `테이블명`
속성변경을위한명령;
user 테이블의 마지막에 타입이 3자리 정수인 age 필드를 추가한다.
ALTER TABLE `user`
ADD `age` INT(3) NOT NULL ;
데이터베이스 또는 테이블을 삭제하기 위한 SQL
DROP DATABASE `데이터베이스명`;
DROP TABLE `테이블명`;
CREATE TABE 문으로 생성된 user 테이블을 삭제한다.
DROP TABLE `user`;
Data Manipulation Language
데이터의 추가, 검색, 수정, 삭제 등과 같이 레코드를 조작할 수 있도록 하는 SQL
테이블에 데이터를 추가할 때 사용하는 SQL
INSERT INTO `테이블명`
(`필드명1`, `필드명2`, `필드명3`, ...)
VALUES
(값1, 값2, 값3, ...);
필드명을 나열함으로써 특정 필드값만을 가진 데이터를 추가하는 형식으로, 주어진 VALUES 이후에 값이 테이블 명 이후에 나열된 필드 순서와 개수가 일치해야 한다.
INSERT INTO `user`
(`userid`, `name`)
VALUES
('test01', '홍길동');
테이블명 뒤에 필드명 나열을 생략한 형태로 VALUES 이후에 값들은 테이블의 기본 필드순서에 따르고 또한 개수가 일치해야 한다.
INSERT INTO `user`
VALUES
('test01', '1111', '홍길동', 'test01@test.com');
필드명이 나열된 경우 VALUES 이후의 값들은 나열된 필드순에 따른다.
INSERT INTO `user`
(`userid`, `name`, `passwd`, `email`)
VALUES
('test02', '김철수', password('1234'), 'test02@test.com');
하나의 INSERT 문으로 여러개의 레코드를 추가하기 위한 형식으로 VALUES 이후 각 레코드를 ','로 구분한다.
INSERT INTO `user`
VALUES
('test03', '3333', '김철수', 'test03@daum.net'),
('test04', '4444', '홍명보', 'test04@daum.net');
하나의 INSERT 문으로 여러개의 레코드를 추가하기 위한 또다른 형식으로 필드명이 나열된 형태이며 각 레코드의 값은 나열된 필드명 순서에 따른다.
INSERT INTO `user`
(`userid`, `passwd`, `name`, `email`)
VALUES
('test05', password('3333'), '김대중', 'test05@naver.com'),
('test06', password('4444'), '김영삼', 'test06@naver.com');
테이블에 저장된 값을 검색할 때 사용하는 SQL
SELECT `필드명`, ...
FROM `테이블명`
WHERE 조건식;
user 테이블에 저장된 모든 레코드를 대상으로 사용자 아이디와 이름을 검색하고 출력한다.
SELECT `userid`, `name`
FROM `user`;
user 테이블에 저장된 모든 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`;
user 테이블의 레코드 중 이름(name)이 '홍길동'인 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `name` = '홍길동';
user 테이블의 레코드 중 나이(age)가 20살 이상 30살 이하인 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `age` BETWEEN 20 AND 30;
user 테이블의 레코드 중 나이(age)가 20살 이상 30살 이하인 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `age` >= 20
AND `age` <= 30;
user 테이블의 레코드 중 이름(name)이 '홍길동'이거나 '김철수'이거나 '전우치'인 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `name` IN ( '홍길동', '김철수', '전우치' );
user 테이블의 레코드 중 이름(name)이 '홍길동'이거나 '김철수'이거나 '전우치'인 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `name` = '홍길동'
OR `name` = '김철수'
OR `name` = '전우치';
user 테이블의 레코드 중 이름(name)이 '홍'으로 시작하는 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `name` LIKE '홍%';
user 테이블의 레코드 중 아이디(userid)가 6글자이며 't'로 시작하는 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `userid` LIKE 't_____';
user 테이블의 레코드 중 이메일(email)이 '.com'으로 끝나는 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `email` LIKE '%.com';
user 테이블의 레코드 중 이메일(email)에 'naver'가 있는 레코드를 대상으로 모든 필드를 검색하고 출력한다.
SELECT *
FROM `user`
WHERE `email` LIKE '%naver%';
user 테이블에 저장된 모든 레코드를 대상으로 모든 필드를 검색하고 이름순(올림차순)으로 출력한다. 만약 중복된 이름이 있으면 아이디순(올림차순)으로 출력한다.
SELECT *
FROM `user`
ORDER BY `name` , `userid`;
user 테이블에 저장된 모든 레코드를 대상으로 이름과 이메일을 검색하고 출력한다. 이때 중복된 출력은 한 번만 출력된다.
SELECT DISTINCT `name`, `email`
FROM `user`;
user 테이블에 저장된 모든 레코드를 대상으로 이름별로 그룹지고 인원수와 이름을 검색하고 출력한다.
SELECT COUNT(*), `name`
FROM `user`
GROUP BY `name`;
user 테이블에 저장된 모든 레코드를 대상으로 이름과 이메일을 검색하되 두번째 레코드부터 세개의 레코드를 검색하고 출력한다.
SELECT *
FROM `user`
LIMIT 1, 3;
테이블에 저장된 값을 수정할 때 사용하는 SQL
UPDATE `테이블명`
SET `필드명1`=값1, `필드명2`=값2, ...
WHERE 조건식;
user 테이블에서 사용자아이디(userid)가 'test05'인 레코드에 대해 사용자이름(name)을 '고길동'으로 수정한다.
UPDATE `user`
SET `name` = '고길동'
WHERE `userid` = 'test05';
user 테이블의 모든 레코드에 대해 나이(age)를 한 살 증가시킨다.
UPDATE `user`
SET `age` = `age` + 1;
user 테이블에서 사용자아이디(userid)가 'test05'인 레코드에 대해 사용자이름(name)을 '홍길동'으로 수정하고 나이(age)를 한 살 증가시킨다.
UPDATE `user`
SET `name` = '홍길동', `age` = `age` + 1
WHERE `userid` = 'test05';
테이블에 저장된 값을 삭제할 때 사용하는 SQL
DELETE
FROM `테이블명`
WHERE 조건식;
user 테이블에서 사용자아이디(userid)가 'test05'인 레코드를 삭제한다.
DELETE
FROM `user`
WHERE `userid` = 'test05';
user 테이블의 모든 레코드를 삭제한다.
DELETE
FROM `user`;
Data Control Language
데이터의 보안, 무결성, 회복, 병행 등을 제어 하는데 사용하는 SQL