SQL 문법 정리

2024. 5. 29. 06:52SW/SQL

728x90

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

// 만약 삭제할 테이블을 참조하는 테이블이 있다면?
// 관련 외래키 제약 조건을 먼저 삭제해야 삭제가 수행됨
DROP TABLE 테이블_이름;

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 집계함수 SELECTHAVING 절에서만 가능
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 뷰_이름;
728x90