1 / 39

Chapter 4: Intermediate SQL

Chapter 4: Intermediate SQL. Chapter 4: Intermediate SQL. 조인 표현식 (Join Expressions) 뷰 (Views) 무결성 (Integrity Constraints). 조인 릴레이션 ( Joined Relations). 죠인 연산은 두 릴레이션을 취해 또 다른 릴레이션을 결과로 돌려준다. 죠인 연산은 주어진 조건 하에 두 릴레이션내의 튜플들이 매칭되는 결과만을 포함하는 카티션 곱 연산이다 . 또한 조인 결과에 어떤 애트리뷰트가 나타날지를 지정한다.

twestfield
Download Presentation

Chapter 4: Intermediate SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 4: Intermediate SQL

  2. Chapter 4: Intermediate SQL • 조인 표현식 (Join Expressions) • 뷰 (Views) • 무결성 (Integrity Constraints)

  3. 조인 릴레이션(Joined Relations) • 죠인 연산은 두 릴레이션을 취해 또 다른 릴레이션을 결과로 돌려준다. • 죠인 연산은 주어진 조건 하에 두 릴레이션내의 튜플들이 매칭되는 결과만을 포함하는 카티션 곱 연산이다. 또한 조인 결과에 어떤 애트리뷰트가 나타날지를 지정한다. • 이들 부가적인 연산은 일반적으로 from절 내의 부 질의 표현식으로 사용된다. • select *from instructor natural join teaches;

  4. 조인 연산 – Example • Relation course • Relation prereq • Observe that prereq informationis missing for CS-315 and courseinformationis missing for CS-347

  5. 자연 조인 (Natural Join) • Natural join matches tuples with the same values for all common attributes, and retains only one copy of each common column • select *from instructor natural join teaches;

  6. Natural Join Example • List the names of instructors along with the course ID of the courses that they taught. • select name, course_idfrom instructor, teacheswhere instructor.ID = teaches.ID; • select name, course_idfrom instructor natural join teaches; • select name, course_idfrom instructor join teaches using(ID);

  7. Outer Join • 정보 손실을 피하기 위한 조인 연산의 확장. • 조인을 계산하고 다른 릴레이션의 튜플과 그 값이 일치하지 않는 어떤 릴레이션의 튜플들을 죠인의 결과에 추가한다. • 널 값을 사용한다.

  8. Left Outer Join • coursenatural left outer joinprereq

  9. Right Outer Join • coursenatural right outer joinprereq

  10. Full Outer Join • coursenatural full outer joinprereq

  11. Joined Relations • 조인 연산은 두 릴레이션을 취해 또 다른 릴레이션을 결과로 돌려준다. • 이들 부가적인 연산은 일반적으로 from절 내의 부 질의 표현식으로 사용된다. • 조인 조건 (Join condition)- 두 릴레이션내의 어떤 튜플들이 부합하고 조인 결과에 어떤 애트리뷰트가 나타날지를 정한다. • 죠인 유형 (Join type)- 다른 릴레이션의 어떤 튜플과 부합하지 않는 튜플들을 어떻게 취급할 것인가(조인 조건에 근거해)를 정한다.

  12. Joined Relations – Examples • select* from course (inner) join prereq oncourse.course_id = prereq.course_id • select * from course, prereqwhere course.course_id = prereq.course_id • What is the difference between the above, and a natural join? • course left outer join prereq oncourse.course_id = prereq.course_id

  13. Joined Relations – Examples • course natural right outer join prereq • coursefullouter join prereq using(course_id)

  14. 뷰(Views) • 어떤 경우에는, 시스템의 모든 사용자에게 DB의 전체적인 논리적 모델을 공개하는 것이 바람작하지 않을 수 있다. • 어떤 사람이 강사의 ID, 이름, 학과명을 알고자 하는 경우 (단 급여는 필요 없음), 다음과 같은 질의를 작성하여야 한다. select ID, name, dept_namefrom instructor • 뷰 (view)는 어떤 사용자의 뷰로부터 어떤 데이터를 숨기는 방법을 제공한다. • 뷰는 DB의개념 모델에 해당하지 않으며, 오직 사용자에게 보이는 목적의 가상 릴레이션 (virtual relation)을 의미한다.

  15. 뷰 정의 • 뷰를 생성하려면 다음과 같은 명령을 사용한다. create view v as < query expression > 여기서: - <질의 표현식>은 적법한 표현식이다. - 뷰명은 v로 표현된다. • 일단 뷰가 정의되면, 뷰를 생성하는 가상 릴레이션을 참조하는데 뷰명이 사용될 수 있다. • 뷰 정의는 질의 표현식을 평가함으로써 새로운 릴레이션을 생성하는 것과는 다르다. 대신, 뷰 정의는 뷰를 사용하는 질의내에 대치될 표현식을 저장한다.

  16. Example Views • A view of instructors without their salarycreate view faculty asselect ID, name, dept_namefrom instructor • Find all instructors in the Biology departmentselect namefrom facultywhere dept_name = ‘Biology’ • Create a view of department salary totalscreate view departments_total_salary(dept_name, total_salary) as select dept_name, sum (salary)from instructorgroup by dept_name;

  17. 다른 뷰 정의를 이용한 새로운 뷰 정의 • create view physics_fall_2009as select course.course_id, sec_id, building, room_numberfrom course, sectionwhere course.course_id = section.course_idand course.dept_name = ’Physics’and section.semester = ’Fall’and section.year = ’2009’; • create view physics_fall_2009_watson as select course_id, room_numberfrom physics_fall_2009where building= ’Watson’;

  18. 뷰 확장 • Expand use of a view in a query/another view create view physics_fall_2009_watson as (select course_id, room_number from (select course.course_id, building, room_number from course, section where course.course_id = section.course_id and course.dept_name = ’Physics’ and section.semester = ’Fall’ and section.year = ’2009’) where building= ’Watson’;

  19. 다른 뷰를 사용해 정의한 뷰 • 하나의 뷰는 다른 뷰를 정의하는 표현식에 사용될 수 있다. • 뷰 릴레이션 v1은 v2가 v1을 정의하고 있는 표현식에 사용된다면 뷰 릴레이션 v2에 직접 종속한다고 말한다. • 뷰 릴레이션 v1은 종속 그래프내에 v2에서 v1로의 경로가 존재하면 뷰 릴레이션 v2에 종속한다고 말한다. • 뷰 릴레이션 v가 그 자신에 종속하면 순환적이라 말한다.

  20. 뷰 확장 • 다른 뷰의 용어로 정의된 뷰의 의미를 정의하는 방법 • 뷰 v1을 그 자신이 뷰 릴레이션의 사용을 내포할 수 있는 표현식 e1으로 정의된다 하자. • 표현식의 뷰 확장은 다음과 같은 대치 절차를 반복한다. repeat e1에서 어떠한 뷰 릴레이션 vi를 찾는다. 뷰 릴레이션 vi를 vi를 정의하고 있는 표현식으로 대치한다. until더 이상의 뷰 릴레이션이 e1내에 존재하지 않음 • 뷰 릴레이션이 순환적이지 않은 한 이 루프는 종료할 것이다.

  21. 뷰의 갱신 • faculty 뷰에 새로운 튜플을 삽입하시오. insert into faculty values (’30765’, ’Green’, ’Music’); 이 삽입문은 instructor relation 에다음과 같은 튜플 삽입문으로 표현되어야 한다. (’30765’, ’Green’, ’Music’, null)

  22. Some Updates cannot be Translated Uniquely • create view instructor_info as select ID, name, buildingfrom instructor, departmentwhere instructor.dept_name= department.dept_name; • insert intoinstructor_info values (’69987’, ’White’, ’Taylor’); • which department, if multiple departments in Taylor? • what if no department is in Taylor? • 대부분의 SQL 시스템에서는 오직 단순한 뷰 갱신만을 허용한다. 복잡한 뷰에의 갱신은 변환하기가 어렵거나 불가능해 허용되지 않는다.

  23. 무결성 제약 조건 (Integrity Constraints) • 무결성 제약 조건은 데이터베이스에의 권한 있는 변경이 데이터의 일관성을 잃지 않도록 보장함으로써 데이터베이스를 우발적인 손상으로부터 보호한다. • A checking account must have a balance greater than $10,000.00 • A salary of a bank employee must be at least $4.00 an hour • A customer must have a (non-null) phone number

  24. 단일 릴레이션에 대한 무결성 제약조건 • not null • primary key • unique • check (P), where P is a predicate

  25. Not Null 과 Unique 제약조건 • not null • Declare name and budget to be not null name varchar(20) not nullbudget numeric(12,2) not null • unique ( A1, A2, …, Am) • 속성 A1, A2, … Am 이 후보키를 임을 나타냄.candidate key. • 후보키는 null 값을 가질 수 있음 (주키와 다름).

  26. check 절 • check (P) 여기서 P는 술어이다. Example: semester 속성은 “fall”, “winter”, “spring” “summer” 중 하나의 값을 갖는다. create table section ( course_id varchar (8), sec_id varchar (8), semester varchar (6), year numeric (4,0), building varchar (15), room_number varchar (7), time slot id varchar (4), primary key (course_id, sec_id, semester, year), check(semester in (’Fall’, ’Winter’, ’Spring’, ’Summer’)));

  27. 참조 무결성(Referential Integrity) • 주어진 애트리뷰트의 집합에 대해 한 릴레이션에 나타나는 값이 다른 릴레이션의 어떤 애트리뷰의 집합에도 또한 나타나도록 한다. • Example: 만약 “Biology” 가 instructor릴레이션 튜플에 나타나는 학과명 (department name)이라면, department 릴레이션에 “Biology”를 위한 튜플이 존재하여야 한다. • 형식적 정의 - r1(R1)과 r2(R2)를 각각 주키 K1과 K2를 가진 릴레이션이라 하자. - r2내 각각의 t2에 대해 t1[K1] = t2[]인 r1내에 튜플 t1이 존재해야 한다면, R2의 부분 집합 는 릴레이션 r1의 K1을 참조하는 외래 키이다. - 참조 무결성 제약 조건: (r2)  K1(r1)

  28. Cascading Actions in Referential Integrity • create table course ( course_id char(5) primary key,title varchar(20), dept_name varchar(20) references department) • create table course ( …dept_name varchar(20),foreign key (dept_name) references departmenton delete cascade on update cascade, . . . ) • alternative actions to cascade: set null, set default

  29. Built-in Data Types in SQL • date: Dates, containing a (4 digit) year, month and date • Example: date ‘2005-7-27’ • time: Time of day, in hours, minutes and seconds. • Example: time ‘09:00:30’ time ‘09:00:30.75’ • timestamp: date plus time of day • Example: timestamp ‘2005-7-27 09:00:30.75’ • interval: period of time • Example: interval ‘1’ day • Subtracting a date/time/timestamp value from another gives an interval value • Interval values can be added to date/time/timestamp values

  30. 인덱스 생성 • create table student (ID varchar (5),name varchar (20) not null,dept_name varchar (20),tot_cred numeric (3,0) default 0,primary key (ID)) • create index studentID_index on student(ID) • 인덱스는 레코드 검색을 고속으로 수행하기 위하여 생성한다. • e.g. select * from studentwhere ID = ‘12345’ can be executed by using the index to find the required record, without looking at all records of student More on indices in Chapter 11

  31. End of Chapter 4

  32. Figure 4.01

  33. Figure 4.02

  34. Figure 4.03

  35. Figure 4.04

  36. Figure 4.05

  37. Taylor Figure 4.07

  38. Figure 4.06

  39. Figure 4.03

More Related