빙응의 공부 블로그
[정처기]실기 SQL 본문
📝DDL
DB를 구축하거나 수정하는 목적으로 사용하는 언어이다.
🚩CREATE TABLE
CREATE TABLE 테이블명
속성명 데이터_타입 [DEFAULT 기본값][NOT NULL], ...
, PRIMARY KEY(속성명)
, UNIQUE(대체키)
, FOREIGN KEY() REFERENCES 참조테이블(기본키)
ON DELETE 옵션
ON UPDATE 옵션
, CONSTRAINT 제약조건명 CHECK(조건식)};
더보기
예제, 이름, 학번, 전공, 성별 ,생년월일로 구성된 <학생> 테이블을 정의하는 SQL문을 작성하시오
- 이름은 NULL이 올 수 없고, 학번은 기본키이다.
- 전공은 <학과> 테이블의 학과코드를 참조하는 외래키를 사용한다.
- <학과> 테이블에서 삭제가 일어나면 관련된 튜플들의 전공 값을 NULL로 만든다.
- <학과> 테이블에서 학과코드가 변경되면 전공 값도 같은 값으로 변경한다.
- 생년월일은 1980-01-01 이후의 데이터만 저장할 수 있다.
- 제약 조건의 이름은 생년월일제약으로 한다.
- 각 속성의 데이터 타입은 적당하게 지정한다. 단 성별은 도메인 SEX를 사용한다.
CREAT TABLE 학생{
이름 VARCHAR(15) NOT NULL,
학번 CHAR(8),
전공 CHAR(5),
성별 SEX,
생년월일 DATE,
PRIMARY KEY(학번)
FOREIGN KEY(전공) REFERENCES 학과(학과코드)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT 생년월일제약 CHACK(생년월일>='1980-01-01')};
🚩CREATE VIEW
CREATE VIEW 뷰명(속성명)
AS SELECT문;
더보기
예제, <고객> 테이블에서 주소가 안산시인 고객들의 성명과 전화번호를 안산고객이라는 뷰로 정의하시오
CREATE VIEW 안산고객(성명, 전화번호)
AS SELECT 성명, 전화번호
FROM 고객
WHERE 주소 = '안산시';
🚩CREATE INDEX
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성 [ASC|DESC])
[CLUSTER] ;
🚩ALTER TABLE
테이블에 대한 정의를 변경하는 명령문이다.
ALTER TABLE 테이블명 ADD 속성명 데이터아비 [DEFAULT '기본값'] //새로운 속성 추가
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'] //특정 속성 DEFAULT 추가
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE] //특정 속성 삭제
🚩DROP
DROP TABLE 테이블명 [CASCADE|RESTRICT]
DROP CONSTRAINT 제약조건명;
📝DCL
데이터의 보안, 무결성, 회복, 병행 제어 등을 정의
🚩GRANT / REVOKE
사용자 등급 지정 및 해제
GRANT 사용자등급 TO 사용자_리스트 [IDENTIFIED BY 암호];
REVOKE 사용자등급 FROM 사용자_리스트;
테이블 및 속성에 대한 권한 부여 및 취소
GRANT 권한_리스트 ON 개체 TO 사용자 [WITH GRANT OPTION]
REVOKE [GRANT OPTION FOR] 권한_리스트 ON 개체 FROM 사용자 [CASCADE];
- WITH GRANT OPTION : 부여받은 권한을 다른 사용자에게 부여 가능한 권한 부여
- GRANT OPTION FOR : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소함
- CASCADE : 권한 취소 시 권한을 부여받은 사용자가 다른 사용자에게 부여한 권한도 연쇄적 취소
📝DML
🚩삽입문(INSERT)
INSERT INTO 테이블명(속성,,,)
VALUES(데이터1,,,,);
🚩삭제문(DELETE FROM)
DELETE
FROM 테이블명
[WHERE 조건];
🚩갱신문(UPDATE SET)
UPDATE 테이블명
SET 속성명 = 데이터
[WHERE 조건];
📝DML - SELECT
일반 형식
SELECT 속성명 FROM 테이블명;
조건문
SELECT 속성명 FROM 테이블명 [WHERE 조건];
이름 조건 검색
SELECT * FROM 테이블명 WHERE 이름 LIKE "김%";
정렬 검색
SELECT TOP 2 * //상위 2개만
FROM 사원
ORDER BY 주소 DESC //내림차순 정렬
그룹 검색
SELECT * FROM 테이블명 GROUP BY 속성명 [HAVING 조건];
📝JOIN
연관된 튜플들을 결합하여, 하나의 새로운 릴레이션을 반환
INNER JOIN
SELECT 학번, 이름, 학생.학과코드, 학과명
FROM 학생, 학과
WHERE 학생.학과코드 = 학과.학과코드;
SELECT 학번, 이름, 학생.학과코드, 학과명
FROM 학생 NATURAL JOIN 학과;
SELECT 학번, 이름, 학생.학과코드, 학과명
FROM 학생 JOIN 학과 USING(학과코드);
OUTER JOIN
SELECT 학번, 이름, 학생.학과코드, 학과명
FROM 학생 LEFT OUTER JOIN 학과
ON 학생.학과코드 = 학과.학과코드;
SELECT 학번, 이름, 학생.학과코드, 학과명
FROM 학생, 학과
WHERE 학생.학과코드 = 학과.학과코드(+);
'정처기' 카테고리의 다른 글
[정처기]실기 요약 7~12장 (0) | 2024.04.21 |
---|---|
[정처기] 실기 요점 정리 1~6장 (1) | 2024.04.19 |
[정처기]실기 12장 - 제품 소프트웨어 패키징 (0) | 2024.04.14 |
[정처기]실기 11장 - 응용 SW 기초 기술 활용 (0) | 2024.04.12 |
[정처기]실기 9장 - 소프트웨어 개발 보안 구축 (0) | 2024.04.10 |