릴레이션의 특징
관계 대수 연산자의 분류
일반 집합 연산자
순수관계 연산자
키(Key)
DDL : 데이터 정의문
테이블 생성 : CREATE문
테이블 삭제 : DROP문
테이블 구조 변경 : ALTER문
ALTER TABLE 테이블명{
{ADD|ALTER|DROP}[COLUMN]속성명[타입]
}
속성 추가
ALTER TABLE 테이블명 ADD 속성명 속성타입
속성 제거
ALTER TABLE 테이블명 DROP 속성명
속성 타입 변경
ALTER TABLE 테이블명 ALTER 속성명 속성타입
DML문 : 데이터 조작문
튜플 삽입 : INSERT문
INSERT INTO 테이블명(속성명, 속성명 , . . .)
VALUES(속성값, 속성값, . . .)
튜플 변경 : UPDATE문
UPDATE 테이블명
SET 속성명 = 수식
[WHERE 조건]
튜플 삭제 : DELETE문
DELETE FROM 테이블명
[WHERE 조건]
트랜잭션 관련
SELECT 속성명, 속성명, ...
FROM 테이블
[WHERE 조건]
DCL문 : 데이터 제어문
제약 조건
데이터 무결성
제약조건 설정
테이블을 만들 때 속성에 제약조건 지정
CREATE TABLE 테이블명
(
속성명 속성 타입 [ [제약조건명] 제약조건],
속성명 속성 타입,
. . .
)
참조 무결성 제약조건
속성명[CONSTRAINTS 제약조건명]
REFERENCE 참조테이블명(속성명)
테이블 수준 제약조건
속성 단위로 제약조건 설정은 표현에 있어서 제약이 따름
CREATE TABLE 테이블명(
속성명 속성타입 ...
[CONSTRAINT 제약조건명] 제약조건(속성명)
)
제약조건 변경
추가
ALTER TABLE 테이블명
ADD [ CONSTRAINT 제약조건명] 제약조건(속성명)
제거
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명
DISTINCT : 중복된 것 제거
BETWEEN a AND b : 검색 조건의 상한과 하한 지정
IN(a, b, c, . . .) : 속성값이 a, b, c, . . . 중 하나라도 일치하면 참
IS NULL : NULL값은 어떤 비교를 하든 거짓
LIKE : 컬럼에 저장된 문자열 중 LIKE연산자에서 지정한 문자 패턴과 부분적으로 일치하면 참이 되는 연산자
ORDER BY 절
ORDER BY {column_name} {ASC |DESC}
트랜잭션 제어문(TCL)
COMMIT : 트랜잭션의 마지막 명령어가 수행되었음을 나타냄
ROLLBACK : 트랜잭션의 변경을 취소하고 트랜잭션 종료
SAVEPOINT : 현재 트랜잭션에서 ROLLBACK시킬 위치 지정
ex)
SAVE TRAN svpoint1
insert into table vales(50, 'product', 'Seoul');
-- 삽입
ROLLBACK TRAN svpoint1
-> 삽입이 되지 않는다.
하나의 SQL질의문에 의해서 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능
다양한 조인들
표현
FROM 테이블명 INNER JOIN 테이블명 ON 조인조건
FROM 테이블명 JOIN 테이블명 ON 조인조건
FROM 테이블명 LEFT OUTER JOIN 테이블명 ON 조인조건
FROM 테이블명 RIGTH OUTER JOIN JOIN 테이블명 ON 조인조건
중첩 질의문의 필요성 : 조인의 필요성과 동일
단일행 서브 쿼리 : 서브 쿼리의 결과로 하나의 튜플만이 반환
ex)
SELECT ENO, DNO
FROM EMPLOYEE
WHERER EMPLOYEE.DNO = (SELECT DNO FROM EMPLOYEE WHERE
EMPLOYEE.ENO = 110)
다중행 서브 쿼리 : 서브 쿼리의 결과로 여러 개의 튜플들이 반환
ex)
SELECT ENO, DNO
FROM EMPLOYEE
WHERER EMPLOYEE.DNO = (SELECT DNO FROM EMPLOYEE WHERE
EMPLOYEE.ENO >= 110)
다중행 비교 연산자
다중행 서브 쿼리 : IN
SELECT ENAME, SALARY, DNO
FROM EMPLOYEE
WHERE DNO IN (SELCT DNO FROM EMPLOYEE
WHERE SALARY >= 500)
다중행 서브 쿼리 : ANY
SELECT ENAME, SALARY, DNO
FROM EMPLOYEE
WHERE SALARY > ANY (SELECT SALARY FROM
EMPLOYEE WHERE DNO = 20)
SELECT ENAME, SALARY, DNO
FROM EMPLOYEE
WHERE SALARY > ALL ( SELECT SALARY FROM
EMPLOYEE WHERE DNO = 10)
EXISTS : 서브 쿼리의 결과가 하나라도 존재하면 참
NOT EXISTS : EXISTS와 상반되는 연산자
ex) 봉급과 커미션의 합이 500이 넘는 사원이 존재하면 모든 사원의 이름 출력
SELECT ENAME, SALARY, DNO
FROM EMPLOYEE
WHERE EXISTS (SELECT * FROM EMPLOYEE
FROM EMPLOYEE
WHERE SALARY+COMMISSION > 500)
UNION : 합집합
예) 부서 번호 10인 사원들과 직급이 staff인 사원들 검색
(select * from employee where dno = 10)
union
(select * from employee where job = "staff")
중복 허용 : union all 사용
INTERSECT : 교집합
예) 부서 번호 10이고 직급이 staff인 사원들 검색
(select * from employee where dno = 10)
intersect
(select * from employee where job = "staff")
EXCEPT : 차집합
예) 부서 번호 10이고 직급이 staff가 아닌 사원들 검색
(select * from employee where dno = 10)
except
(select * from employee where job = "staff")
외부 합집합
*두 질의 결과의 속성 수와 타입이 일치되게 만듦
(select eno, ename, dno, NULL from Empl)
union
(select NULL, NULL, dno, dname from department)
집단 함수의 종류
집단 함수의 예
Q 사원의 최대 봉급, 최소 봉급 구하기
SELECT MAX(SALARY), MIN(SALARY)
FROM EMPLOYEE
Q 사원 테이블의 튜플 수와 COMMISION의 개수 구하기
SELECT COUNT(*), COUNT(COMMISION)
FROM EMPLOYEE
Q 사원의 직급의 수와 중복되지 않는 직급의 수 구하기
SELECT COUNT(JOB), COUNT(DISTINCT JOB)
FROM EMPLOYEE
Q 부서별 사원들의 평균 봉급과 부서번호 검색
SELECT DNO, AVG(SALARY)
FROM EMPLOYEE
GROUP BY DNO
Q 부서의 최대 봉급이 500초과인 부서에 대해서만 부서별 사원들의 평균 봉급과 부서 번호 출력
SELECT DNO, AVG(SALARY) AS DNOAVGSAL
FROM EMPLOYEE
GROUP BY DNO
HAVING MAX(SALARY)>500
Q ROLLUP 연산자를 이용하여 부서별 직급별 사원들의 봉급 합 구하기
SELECT DNO, JOB, SUM(SALARY)
FROM EMPOYEE
GROUP BY DNO, JOB WITH ROLLUP
Q CUBE 연산자를 이용하여 부서별 직급별 사원들의 봉급 합 구하기
SELECT DNO, JOB, SUM(SALARY)
FROM EMPOYEE
GROUP BY DNO, JOB WITH CUBE
TOP() 함수
질의 결과 튜플 수의 제한
Q 사원들 중 급여 기준 5등까지만 결과로 출력하기
SELECT TOP(5) *,
FROM EMPLOYEE
ORDER BY SALARY DESC
동률이 있을 때를 모두 보고 싶은 경우 -> WITH TIES
SELECT TOP(5) WITH TIES *
FROM EMPLOYEE
ORDER BY SALARY DESC
정렬 기준 특정 비율까지만 보고 싶은 경우
Q 사원들 중 급여 기준 20%까지만 결과로 출력하기
SELECT TOP(20) PERCENT *
FROM EMPLOYEE
ORDER BY 속성명 DESC
RANK() 함수
각 튜플에 등수를 표시함
RANK() 함수 : 동률에 대하여 동일 등수 배정, 비연속식 등수 배정(1,2,2,4, . . .)
Q 사원에 대하여 이름, 급여, 급여에 대한 내림차순 RANK() 값
SELECT ENAME, SALARY, RANK() OVER
(ORDER BY SALARY DESC) AS RANK
FROM EMPLOYEE
DENSE_RANK()함수 : 등률에 대하여 동일 등수 배정, 연속식 등수 배정(1, 2, 3, 3, ...)
ROW_NUMBER() 함수 : 동률에 대하여 임의 등수 배정, 연속식 등수 배정(1, 2, 3, 4, ...)
NTILE(n) 함수 : 전체 튜플을 n개로 균등 분할하여 순위 지정
그룹 별 순위 지정
PARTITION BY 속성명
: 튜플들의 속성값에 따라서 그룹핑함
: 각 그룹에 대하여 순위 함수를 적용
Q DNO별로 분류하고 각 분류된 소그룹에서 SALARY 기준 내림차순하고 순위 나타내기
SELECT ENAME, SALARY, DNO,
RANK() OVER(PARTITION BY DNO ORDER BY SALARY DESC) AS RANK_DEPT
FROM EMPOYEE
행 순서 함수
: 정렬된 대상에서 특정 순위의 튜플들을 추출할 필요가 있을 때 사용되는 함수
FIRST_VALUE 함수
: 정렬 대상에서 첫 번째 데이터 추출
FIRST_VALUE(SALARY)
LAG/LEAD 함수
: 지정된 순서에서 선행 / 후행 데이터를 참조하는 함수
LAG(SALARY, 1) : 선행 순위의 급여
LEAD(SALAY,1) : 후행 순위의 급여
색인 생성
CREATE INDEX 색인명
ON 테이블명(속성명, 속성명, ...)
색인 삭제
DROP INDEX 색인명
ON 테이블명
고유 인덱스
: 유일 값을 가지는 속성에 대하여 생성하는 색인
: 각 키 값은 테이블의 하나의 튜플과 연관됨
Q 부서 테이블에 부서 이름에 대하여 고유 색인 생성하기
CREATE UNIQUE INDEX idx_name_unique
ON DEPARTMENT(dNname)
비고유 인덱스
: 중복된 값을 가지는 속성에 생성하는 인덱스
: 키 값은 여러 개의 튜플들과 연관됨
Q 부서 테이블에 부서 위치에 대하여 비고유 색인 생성하기
CREATE INDEX idx_loc_unique
ON DEPARTMENT(loc)
뷰의 생성 구문
CREATE VIEW 뷰이름
AS SQL문(SELECT문)
뷰의 삭제 구문
DROP VIEW 뷰이름
Q 사원 테이블에 부서번호 30인 사원들의 뷰 생성하기
CREATE VIEW EMP30
AS
SELECT * FROM EMPLOYEE
WHERE DNO = 30
뷰의 갱신 연산
: 뷰가 집단연산의 결과일 경우, 뷰를 통한 갱신 연산 불가능
GREANT문
: 자신에게 허용된 권한을 다른 사용자에게 부여하는 구문
GRANT[권한|ALL] ON 데이터 객체 TO 사용자
REVOKE문
: 다른 사용자에게 허용한 권한을 철회하는 구문
REVOKE 권한 ON 데이터객체 TO 사용자
DENY문
: 다른 사용자에게 특정 권한을 불허하는 구문
DENY 권한 ON 데이터객체 TO 사용자
개념 : 자주 사용되는 질의문들을 하나로 묶어서 저장해두고 필요할 때마다 명령문처럼 실행할 수 있도록 해주는 것
생성 구문
CREATE[PROCEDURE|PROC] 프로시저 이름
AS
BEGIN SQL문 END
// BEGIN END는 SQL문이 하나만 있다면 생략 가능
프로시저 실행 문법
EXEC 프로시저 이름
프로시저 수정 문법
ALTER PROCEDURE 프로시저 이름
AS SQL문
DROP PROCEDURE 프로시저 이름
입력 매개변수의 선언
--생성
CREATE PROCEDURE 프로시저 이름
@매개변수명 타입, . . .
AS SQL문
--실행
EXEC 프로시저이름 매개변수값
출력 매개변수의 선언
CREATE PROCEDURE 프로시저 이름
@매개변수명 타입 OUTPUT, ...
AS
SELECT @매개변수명 = 속성명
FROM WHERE ...
출력 매개변수 값 받기
DECLARE @매개변수명
EXEC 프로시저명 @매개변수명 OUTPUT
SELECT @매개변수명
사용자 정의 함수의 선언
CREATE FUNCTION 함수명
(@매개변수명 타입, ...)
RETURNS 반환타입
AS
[BEGIN] SQL 문[END]
CREATE TRIGGER 트리거명
ON 테이블명
[FOR/AFTER/INSTEAD OF][INSERT/UPDATE/DELETE]
AS
SQL문
CREATE TRIGGER 트리거명
ON DATABASE
{FOR|AFTER}{DROP_TABLE|CREATE_TABLE|AFTER_TABLE}
AS SQL문