DDL : 데이터 제어
CREATE
| CREATE TABLE 테이블_이름( |
| // INT, SMALINT, CHAR(N), VARCHAR(N) :최대길이 가변, DATE |
| // 실수 : NUMERIC(p, s), FLOAT(N), REAL |
| // NOT NULL, DEFAULT |
| 속성_이름 데이터_타입(35), [NOT NULL] [DEFAULT 값] |
| |
| // PRIMARY KEY 기본키 |
| [PRIMARY KEY (속성리스트)] |
| |
| // UNIQUE 대체키 |
| [UNIQUE (속성리스트)] |
| |
| // FORIEGN KEY 외래키 |
| // 조건 NO ACTION(DEFAULT), CASCADE, SET NULL, SET DEFAULT |
| [FOREIGN KEY (속성) REFERENCES 테이블이름(속성) ON DELETE 옵션 ON UPDATE 옵션] |
| |
| // 제약 조건 |
| [CONSTRAINT 이름 CHECK (재고)] |
| ); |
ALTER
| // **속성 추가** |
| ALTER TABLE 테이블_이름 |
| ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본값]; |
| |
| // **속성 제거** |
| // 삭제할 속성 관련된 제약 조건이 있다면? |
| // 제약조건을 삭제하지 않으면 속성 삭제가 수행되지 않음 |
| ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름; |
| |
| // **제약 조건 추가** |
| ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 CHECK(제약조건); |
| |
| // **제약 조건 삭제** |
| ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름; |
DROP
DML : 데이터 조작
SELECT
| // ALL : 결과 테이블이 투플의 중복을 허용하도록 지정, 생략 가능 |
| // DISTINCT : 결과 테이블이 투플의 중복을 허용하지 않도록 지정 |
| SELECT [ALL|DISTINCT] 속성리스트 [+|/|-|*] AS 속속이름, 속성이름, 속성이름, [*] |
| FROM 테이블 리스트 |
| |
| // LIKE 부분적으로 일치하는 문자열 찾기 |
| // _ 1개의 문자, % 0개의 문자 |
| // IS NULL, IS NOT NULL |
| [WHERE a = b AND a LIKE '%기-힣_' OR 나이 IS NULL] |
| |
| // ASC : 오름차순, DESC : 내림차순 |
| [ORDER BY 속성리스트 [ASC|DESC]]; |
| //COUNT, MAX, MIN, SUM, AVG 집계함수 SELECT 와 HAVING 절에서만 가능 |
| SELECT [ALL|DISTINCT] 속성, [COUNT, MAX, MIN, SUM, AVG] |
| FROM 테이블 리스트 [[LEFT|RIGHT|FULL] OUTER]|INNER JOIN 테이블 2 ON 조인조건 |
| [WHERE a = b AND a LIKE '%..._' OR 나이 IS NULL] -> 먼저 실행되고 |
| [GROUP BY 속성 [HAVING sum()=N]] |
| [ORDER BY 속성리스트 [ASC|DESC]]; |
| |
| SELECT * |
| FROM 제품 INNER 주문 on 제품.제품번호 = 주문.주문번호 |
| |
| SELECT 제품명, 단가 |
| FROM 제품 |
| WHERE 제조업체 = (SELECT 제조업체 |
| FROM 제품 |
| WHERE 제품명 = '달콤 비스킷'); |
조인 질의를 이용한 SELECT 문
| SELECT 제품.제품명, 제품.제조업체 |
| FROM 제품, 주문 |
| WHERE 제품.제품번호 = 주문.주문제품 AND 주문.주문고객 = 'banana'; |
EXISTS 연산자를 이용한 SELECET 문
| SELECT 제품명, 제조업체 |
| FROM 제품 |
| WHERE EXISTS (SELECT * |
| FROM 주문 |
| WHERE 제품.제품번호 = 주문.주문제품 |
| AND 주문.주문고객= 'banana'); |
IN 연산자를 이용한 SELECET 문
| // IN : 부속 질의문의 결과 값 중 일치하는 것이 있으면 검색 조건이 참 |
| // NOT IN : 부속 질의문의 결과 값 중 일치하는 것이 없으면 검색 조건이 참 |
| // EXISTS : 부속 질의문의 결과 값이 하나라도 존재하면 검색 조건이 참 |
| // NOT EXISTS : 부속 질의문의 결과 값이 하나도 존재하지 않으면 검새 조건이 참 |
| // ALL : 부속 질의문의 결과 값 모두와 비교한 결과가 참이면 검색 조건을 만족(비교 연산자와 함께 사용) |
| // ANY 또는 SOME : 부속 질의문의 결과 값 중 하나라도 비교한 결과가 참이면 검색 조건을 만족(비교 연산자와 함께 사용) |
| |
| SELECT 제품명, 제조업체 |
| FROM 제품 |
| WHERE 제품번호 IN (SELECT 주문제품 |
| FROM 주문 |
| WHERE 주문고객 = 'banana'); |
INSERT
| INSERT |
| INTO 테이블_이름[(속성_리스트)] |
| VALUES (속성값_리스트); |
| INSERT |
| INTO 테이블_이름[(속성_리스트)] |
| SELECT 문; |
UPDATE
| UPDATE 테이블_이름 |
| SET 속성_이름1 = 값1, 속성_이름2 = 값2, ... |
| [WHERE 조건]; |
DELETE
| DELETE |
| FROM 테이블_이름 |
| [WHERE 조건]; |
View
CREATE VIEW
| CREATE VIEW 뷰_이름[(속성_리스트)] |
| AS SELECT 문 |
| [WITH CHECK OPTION]; |
VIEW : SELECT
VIEW : INSERT, UPDATE, DELETE
변경 불가능한 뷰의 특징
- 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰
- 기본 테이블에 있던 내용이 아닌 집계 함수로 새로 계산된 내용을 포함하는
- DISTICNT 키워드를 포함하여 정의한 뷰
- GROUP BY 절을 포함하여 정의한 뷰
- 여러 개의 테이블을 조인하여 정의한 뷰는 변경이 불가능한 경우가 많
DROP VIEW
DROP VIEW 뷰_이름;