Skip to content
- 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
- 관계 해석(relational calculus)
- 원하는 데이터만 명시하고 질의를 어떻게 수행할 것인가는 명시하지 않는 선언적인 언어
- 관계 대수(relational algebra)
- 어떻게 질의를 수행할 것인가를 명시하는 절차적 인어
- 관계 대수는 상용 관계 DBMS들에서 널리 사용되는 SQL의 이론적인 기초
- 관계 대수는 SQL을 구현하고 최적화하기 위해 DBMS의 내부 언어로서도 사용됨
- SQL
- 상용 관계 DBMS들의 사실상의 표준 질의어인 SQL을 이해하고 사용할 수 있는 능력은 매우 중요함
- 사용자는 SQL을 사용하여 관계 데이터베이스에 릴레이션을 정의하고, 관계 데이터베이스에서 정보를 검색하고, 관계 데이터베이스를 갱신하며, 여러 가지 무결성 제약조건들을 명시할 수 있음
- 관계 연산자 종류와 표기법
- 관계연산자 표기법과 SQL
- 사용 테이블
- EMPLOYEE
- DEPARTMENT
- 실렉션1 : σtitle=’사원’(EMPLOYEE)
- SELECT * FROM EMPLOYEE WHERE title=’사원’;
- 실렉션2 : σdno=3(EMPLOYEE)
- SELECT * FROM EMPLOYEE WHERE dno=3;
- 프로젝션 : πdno(EMPLOYEE)
- SELECT dno FROM EMPLOYEE;
- SELECT DISTINCT dno FROM EMPLOYEE;
- 합집합 : σtitle=’사원’(EMPLOYEE) ∪ σdno=3(EMPLOYEE)
- SELECT * FROM EMPLOYEE WHERE title=’사원’
UNION
SELECT * FROM EMPLOYEE WHERE dno=3;
- 교집합 : σtitle=’사원’(EMPLOYEE) ∩ σdno=3(EMPLOYEE)
- SELECT * FROM EMPLOYEE WHERE title=’사원’
INTERSECT
SELECT * FROM EMPLOYEE WHERE dno=3;
- 차집합 : σtitle=’사원’(EMPLOYEE) – σdno=3(EMPLOYEE)
- SELECT * FROM EMPLOYEE WHERE title=’사원’
EXCEPT
SELECT * FROM EMPLOYEE WHERE dno=3;
- 카티션 곱 : EMPLOYEE × DEPARTMENT
- SELECT * FROM EMPLOYEE, DEPARTMENT
- 디비전 : EMPLOYEE ÷ EMPDIV
- 사용 테이블 EMPDIV
- SQL문 정의가 어려움, 이 예제에 대해서만 만족하는 Sql임
SELECT empno, empname, title, manager, salary
FROM EMPLOYEE
WHERE DNO IN (SELECT DNO FROM EMPDIV);
- 동등 조인(equijoin) : 세타 조인 중 비교 연산자가 =인 조인
- 세타 조인(=, <>, <=, <, >=, > 중 하나를 비교 연산자로 사용)
- EMPLOYESS ▷◁ dno=deptno DEPARTMENT
- SELECT * FROM EMPLOYEE, DEPARTMENT
WHERE EMPLOYEE.DNO = DEPARTMENT.DEPTNO;
또는
SELECT * FROM EMPLOYEE JOIN DEPARTMENT
ON EMPLOYEE.DNO = DEPARTMENT.DEPTNO;
- 자연 조인(natural join)
- 동등조인에서 중복되는 dno와 deptno중 하나를 제거한 조인
- EMPLOYESS * dno=deptno DEPARTMENT
- 동등 조인과 별 차이 없음
- 보통은 dno, deptno 둘다 표시 하지 않음, 왜냐하면 부서번호보다는 부서명이 더 필요하기 때문
- SELECT empno, empname, title, manager, salary, deptname, floor
FROM EMPLOYEE JOIN DEPARTMENT
ON EMPLOYEE.DNO = DEPARTMENT.DEPTNO
- 외부조인 :
- LEFT OUTER JOIN
- RIGHT OUTER JOIN : sqlite는 지원 안 함, mysql은 지원 함,
- FULL OUTER JOIN : sqlite, mysql은 지원 안 함 , 다른 DBMS는 ?
- SELECT empno, empname, title, deptno, deptname
FROM DEPARTMENT LEFT OUTER JOIN EMPLOYEE
ON EMPLOYEE.DNO = DEPARTMENT.DEPTNO
error: Content is protected !!