- 1974년 IBM 연구소에서 개발한 SEQUEL(Structured English Query Language)에서 유래되었다.
- 관계대수와 관계해석을 기초로 한 혼합 데이터 언어이다.
- 데이터 정의, 데이터 조작, 데이터 제어 기능을 모두 갖추고 있다.
- 임시 테이블(Temporary Table)
- CREATE SCHEMA
- CREATE DOMAIN
- INTEGER (정수형)
- FLOAT (실수형)
- CREATE DOMAIN SYEAR SMALLINT DEFAULT 1 CONSTRAINT VALID-SYEAR CHECK(VALUE IN (1,2,3,4)) NOT NULL;
- data_type 정의는 CREATE DOMAIN
- VALUE IN에서 물결은 금지된다.
- 테이블의 이름, 속성, 제약 사항을 명시한다.
- 새로운 테이블을 생성하기 위해 사용한다.
- 명령을 적용할 스키마를 명시할 수 있다.
- 테이블 생성 명령어가 스키마를 생성하지 않으면 현재 명령어가 실행되는 환경에 있는 스키마에 명령이 적용된다. (이전 환경은 상관이 없다.)
- 테이블명 및 해당 테이블에 속하는 컬럼, 이름, 데이터 타입 등을 명시한다.
- PRIMARY KEY 절에서는 기본키 속성을 지정한다.
- NOT NULL은 널 값을 허용하지 않을 때 지정한다.
- CHECK 절은 제약 조건을 정의한다.
CREATE TABLE 학생 (이름 VARCHAR(15) Not Null, 학번 VARCHAR(15) Not Null, 전공 VARCHAR(20) Not Null, 성별 SEX, 생년월일 DATE, PRIMARY KEY (학번), FOREIGN KEY (전공) REFERENCES 학과(학과코드) CHECK (성별 = "남"));
- 이름, 학번, 전공, 성별, 생년월일로 구성된 "학생" 테이블을 정의한다.
- 이름은 최대 15글자까지 입력할 수 있다.
- 학과 릴레이션의 기본키인 학과코드를 학생 릴레이션이 참조할 때 전공 속성을 외래키로 이용한다.
- SEX는 data_type이 없기 때문에 CREATE DOMAIN으로 사용자가 정의한 data_type이다.
CREATE UNIQUE INDEX 고객_INX ON 고객(국가 ASC) CLUSTER;
- CLUSTER: 동일 인덱스 값을 갖는 튜플들을 그룹으로 묶을 때 사용
ALTER TABLE STUDENT ADD ADDRESS CHAR(20);
- STUDENT 테이블에서 ADDRESS열을 추가한다.
- 제거될 테이블을 참조하는 모든 제약과 뷰를 자동적으로 스키마로부터 삭제시키는 옵션이 존재한다.
- CASCADE: 외래 키가 참조하는 기본 키의 레코드가 수정되거나 삭제될 때 연결레코드도 함께 수정되거나 삭제되도록 설정하는 옵션
- SET NULL: 외래 키가 참조하는 기본 키의 레코드가 수정되거나 삭제될 때 연결 레코드 값을 NULL로 설정
- 기타 SET DEFAULT, NO ACTION 존재.
- FROM절은 질의에 의핸 검색될 테이블들을 포함하는 테이블을 기술한다.
- 복잡한 탐색 조건을 구성하기 위하여 단순 탐색 조건들을 AND, OR, NOT으로 결합할 수 있다.
- ORDER BY절은 질의 결과가 한 개 또는 그 이상의 열 값을 기준으로 오름차순 또는 내림차순으로 정렬될 수 있도록 기술된다.
- SELECT절은 질의 결과에 포함될 테이블 열들을 기술하며, 이는 데이터베이스로부터 테이블 열 또는 계산 열이 될 수 있다.
GROUP BY절
SELECT 지원, 지원학과, 전화번호 FROM 지원자 WHERE 점수 > 59 ORDER BY 지원학과, 점수 DESC;
- 지원자 테이블을 검색한다.
- 점수가 60점 이상인 지원자만 검색한다.
- 지원학과 별 점수 순위를 알 수 있다.
INSERT INTO 학생 VALUES (100, "홍길동", "컴퓨터")
- LIKE: 지정된 속성에서 부분 문자가 들어 있는 튜플을 대상으로 검색시킬 조건을 표현할 때 사용
SELECT * FROM STUDENT WHERE SNAME LIKE '홍%';
- SNAME이 '홍'씨로 시작되는 튜플을 찾는다.
- SUM: 열에 있는 값들의 합계
- COUNT: 튜플의 개수
- MAX: 열에서 최대값
- AVG: 열에 있는 값들의 평균 (AVR 아니다.)
- 튜플이 어떤 속성값을 기준으로 분류된 그룹 단위에 내장 함수를 적용하고자 하는 경우에 사용한다.
- 튜플을 그룹으로 분류하는 데 사용되는 속성을 그룹화 속성(Grouping Attribute)라 한다.
- 그룹화를 위하여 GROUP BY절을 사용하여 그룹화 속성을 명시한다.
- 함수를 적용시킨 결과를 그룹화 속성의 값과 같이 나타나도록 하기 위해서 SELECT절에 그룹화 속성을 같이 명시해야 한다.
- ORDER BY절을 사용한다.
- 기본 정렬 방식은 오름차순이다.
- ASC 키워드를 사용하여 사용자가 오름차순 정렬 방식을 지정할 수 있다.
- DESC 키워드를 사용하여 사용자가 내림차순 정렬 방식을 지정할 수 있다.
SELECT works.name, city FROM lives, works WHERE company="제일은행" AND located.name = work.name
- 명령 하나로 한개의 테이블에만 삽입할 수 있다.
- 부속 질의어를 사용할 수 있다.
- 하나의 INSERT 명령어를 사용하여 여러 개의 튜플을 삽입할 수도 있다.
- NULL 값도 삽입할 수 있다.
DELETE FROM 학생 WHERE 학번 = 1000;
- 하나 또는 그 이상의 튜플의 속성값을 변경하는 데 사용된다.
- 테이블에서 수정할 튜플을 선택하기 위해 WHERE 절이 사용된다.
- 변경할 속성과 그들의 새로운 값을 명시하기 위해 SET 절이 사용된다.
- 참조 무결성 제약이 존재하는 경우 기본키 값을 변경하는 경우 그 변경이 외래키 값에 영향을 미칠 수 있다.
UPDATE 테이블명 SET 속성명 = 데이터 WHERE 조건;
UPDATE STUDENT SET SCORE = SCORE + 10 WHERE SNAME = "LEE";
- STUDENT 테이블에서 SNAME이 "LEE"인 모든 튜플의 SCORE 속성에 10을 더한다.
- DELETE 문에는 한 개의 테이블명만 사용할 수 있다.
따라서 아래 구문은 잘못됐다.# STUDNET, ENROL 둘 중 하나만 써야한다. DELETE FROM STUDENT, ENROL WHERE SNO = 100;
- 이렇게 하면 앞뒤로 신이 들어간 경우를 찾을 수 있다.
SELECT * FROM 공급자 WHERE 공급자명 LIKE '%신%';
SELECT 가격 FROM 도서가격 WHERE 책번호 = (SELECT 책번호 FROM 도서 WHERE 책명 = "운영체제");
- 15000원을 알 수 있다.