반응형
SQL의 소개
정의 : SQL (Structured Query Language)은 관계 데이터베이스를 위한 표준 질의어로 많이 사용되는 언어
기능에 따른 분류
- 데이터 정의어 : 테이블을 생성하고, 변경 제거하는 기능을 제공
- 데이터 조작어 : 테이블에 새 데이터를 삽입하거나, 테이블에 저장된 데이터를 수정, 삭제, 검색하는 기능 제공
- 데이터 제어어 : 보안을 위해 데이터에 대한 접근 및 사용 권한을 사용자별로 부여하거나 취소하는 기능을 제공하는 언어
SQL을 이용한 데이터 정의
테이블 생성
CREATE TABLE 테이블_이름 (
속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값]
[PRIMARY KEY (속성_리스트)] // 기본키는 NOT NULL 표기해주는 것이 좋다
[UNIQUE (속성_리스트)]
[FOREIGN KEY (속성_리스트) REFERENCES 테이블_이름(속성_리스트)] [ON DELETE 옵션] [ON UPDATE 옵션]
[CONSTRAINT 이름] [CHECK(조건)]
);
// 예시
CREATE TABLE 주문 (
주문번호 CHAR(3) NOT NULL,
주문고객 VARCHAR(20),
주문제품 CHAR(3),
수량 INT,
배송지 VARCHAR(30),
주문일자 DATE,
PRIMARY KEY(주문번호),
FOREIGN KEY(주문고객) REFERENCES 고객(고객아이디),
FOREIGN KEY(주문제품) REFERENCES 제품(제품번호)
);
- ON DELETE 옵션
- ON DELETE NO ACTION : 튜플을 삭제하지 못하게 한다
- ON DELETE CASCASE : 관련 튜플을 함께 삭제한다
- ON DELETE SET NULL : 관련 튜플의 외래키 값을 NULL로 변경한다
- ON DELETE SET DEFAULT : 관련 튜플의 외래키 값을 미리 지정한 기본 값으로 변경한다
- ON UPDATE 옵션
- ON UPDATE NO ACTION : 튜플을 변경하지 못하게 한다
- ON UPDATE CASCADE : 관련 튜플에서 외래키 값을 함께 변경한다
- ON UPDATE SET NULL : 관련 튜플의 외래키 값을 NULL로 변경한다
- ON UPDATE SET DEFAULT : 관련 튜플의 외래키 값을 미리 지정한 기본 값으로 변경한다
- 데이터 무결성 제약조건의 정의
- CHECK 키워드로 제약조건 지정
- CONSTRAINT 키워드로 제약 조건에 이름 부여
테이블 변경
// 새로운 속성 추가
ALTER TABLE 테이블_이름 ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값];
// 기존 속성 삭제
ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름;
// 새로운 제약조건 추가
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용;
// 기존 제약 조건 삭제
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름;
테이블 삭제
DROP TABLE 테이블_이름;
SQL을 이용한 데이터 조작
데이터 검색
SELECT [ ALL | DISTINCT ] 속성_리스트
FROM 테이블_리스트
[ WHERE 조건 ]
[ GROUP BY 속성_리스트 [ HAVING 조건 ] ]
[ ORDER BY 속성_리스트 [ ASC | DESC ] ];
- LIKE를 이용한 검색
- % : 0개 이상의 문자 (문자의 내용과 개수는 상관 없음)
- _ : 1개의 문자 (문자의 내용은 상관 없음)
- NULL을 이용한 검색 :
= <>
사용하면 안된다- IS NULL;
- IS NOT NULL;
- 집계 함수를 이용한 검색
- COUNT
- MAX
- MIN
- SUM : 숫자 데이터만 가능
- AVG : 숫자 데이터만 가능
집계 함수 이용시 주의사항
- 집계 함수는 널인 속성 값은 제외하고 계산한다
- 집계 함수는 WHERE 절에서는 사용할 수 없고 SELECT 절이나 HAVING 절에서만 사용할 수 있다
- 부속 질의문을 이용한 검색
다중 행 부속 질의문에 사용 가능한 연산자
IN
NOT IN
EXISTS
NOT EXISTS
ALL
ANY 또는 SOME
질의 내용은 다양하게 표현할 수 있다
// 조인 질의를 이용한 SELECT 문
SELECT 제품.제품명, 제품.제조업체
FROM 제품, 주문
WHERE 제품.제품번호 = 주문.주문제품 AND 주문.주문고객 = 'BANANA';
// EXISTS 연산자를 이용한 SELECT 문
SELECT 제품명, 제조업체
FROM 제품
WHERE EXISTS (SELECT *
FROM 주문
WHERE 제품.제품번호 = 주문.주문제품 AND 주문.주문고객 = 'BANANA');
// IN 연산자를 이용한 SELECT 문
SELECT 제품명, 제조업체
FROM 제품
WHERE 제품번호 IN (SELECT 주문제품
FROM 주문
WHERE 주문고객 = 'BANANA');
데이터 삽입
// 데이터 직접 삽입
INSERT INTO 테이블_이름[(속성_리스트)]
VALUES (속성값_리스트);
// 부속 질의문을 이용한 삽입
INSERT INTO 테이블_이름[(속성_리스트)]
SELECT 문;
데이터 수정
UPDATE 테이블_이름
SET 속성_이름1 = 값1, 속성_이름2 = 값2, ...
[WHERE 조건];
데이터 삭제
DELETE
FROM 테이블_이름
[WHERE 조건];
뷰
정의 : 다른 테이블을 기반으로 만들어진 가상 테이블
일반 테이블과 달리 데이터를 실제로 저장하고 있지 않는다.
뷰에 대한 삽입, 수정, 삭제 연산으로 인해 기본 테이블의 값이 변한다.
변경 불가능한 뷰의 중요한 특징
- 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰는 변경할 수 없다
- 기본 테이블에 있던 내용이 아니라 집계 함수로 새로 계산된 내용을 포함하고 있는 뷰는 변경할 수 없다
- DISTINCT 키워드를 포함하여 정의한 뷰는 변경할 수 없다
- GROUP BY 절을 포함하여 정의한 뷰는 변경할 수 없다
- 여러 개의 테이블을 조인하여 정의한 뷰는 변경할 수 없는 경우가 많다
장점
- 질의문을 좀 더 쉽게 작성할 수 있다
- 데이터의 보안 유지에 도움이 된다
- 데이터를 좀 더 편리하게 관리할 수 있다
뷰의 생성
CREATE VIEW 뷰_이름[(속성_리스트)]
AS SELECT 문
[WITH CHECK OPTION];
뷰의 삭제
DROP VIEW 뷰_이름;
삽입 SQL
크게 중요하지 않아 생략
PS
데이터베이스 개론 2판, 한빛아카데이, 김연희 저
반응형
'독서' 카테고리의 다른 글
[데이터베이스 개론] 회복과 병행 제어 (0) | 2022.03.15 |
---|---|
[데이터베이스 개론] 데이터베이스 설계 (0) | 2022.03.15 |
[데이터베이스 개론] 데이터 모델과 연산 (0) | 2022.03.07 |
[데이터베이스 개론] 데이터베이스 기초 이론 (0) | 2022.03.06 |
[이펙티브 자바] 아이템 02. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2022.01.18 |