CS 3630 Database Design and Implementation
Base Table and View Base Table Stored on disk View Virtual table Records are not stored on disk Query is stored Records are generated when requested Looks like a table The users don’t know the difference 2
Horizontal views (a subset) Create View HotelsOfGlasgow as Select * From Hotel Where Name = 'Glasgow'; Desc HotelsOfGlasgow select * from HotelsOfGlasgow; Drop View RoomsInHotel; 3
Vertical View (Projection) Table Schema Booking (Hotel_no, Guest_no, Date_from, Date_to, Room_No) Create or replace view HotelBooking as Select Hotel_no, Room_No, Date_from, Date_to From Booking; -- Cannot use Create or replace for tables 4
Horizontal and Vertical View Create or replace view BookingOfGlasgow as Select Room_No, Date_from, Date_to From Booking Where Hotel_No in ('H05', 'H28'); 5
Horizontal and Vertical View -- using view HotelsOfGlasgow Create or replace view BookingOfGlasgow as Select Room_No, Date_from, Date_to From Booking Where Hotel_No in (Select Hotel_No From HotelsOfGlasgow); 6
Views based on grouping -- must give names to aggregate functions -- and all fields when one aggregate -- function exists. Create or replace view RoomsInHotel (Hotel_no, Room_Count) as Select Hotel_no, Count(*) From Room Group By Hotel_No; 7
Using Views in Queries Create or Replace View HotelG As Select Hotel_No From Hotel Where Name = 'Grosvenor'; Select * From Room Where Hotel_No in HotelG; ERROR at line 3: ORA-00904: "HOTELG": invalid identifier 8
Using Views in Queries Create or Replace View HotelG As Select Hotel_No From Hotel Where Name = 'Grosvenor'; Select * From Room Where Hotel_No in (Select * from HotelG); -- works if one value from the view Where Hotel_No = (Select * from HotelG); 9
Sub-Queries -- List guests who don’t have any bookings during -- April Select * From guest Where guest_no Not IN (Select Distinct guest_no From booking Where date_from <= '30-Apr-05' and date_to >= '01-Apr-05'); 10
Using View -- List guests who don’t have any bookings for -- April Create or Replace View BookingApril2005 as (Select guest_no From booking Where date_from <= '30-Apr-05' and date_to >= '01-Apr-05'); Select * From guest Where guest_no Not IN BookingApril2005; ORA-00904: "BOOKINGAPRIL2005": invalid identifier 11
Using View -- List guests who don’t have any bookings for -- April Create or Replace View BookingApril2005 as (Select guest_no From booking Where date_from <= '30-Apr-05' and date_to >= '01-Apr-05'); Select * From guest Where guest_no Not IN (Select * From BookingApril2005); 12
Using WITH With BookingApril2005 as (Select guest_no From booking Where date_from <= '30-Apr-05' and date_to >= '01-Apr-05') Select * From guest Where guest_no Not IN (Select * From BookingApril2005); Must have () for the With sub-query 13
Outer Join -- List guests who don’t have any bookings during -- April Select G.* From guest G Left Join Booking B on G.guest_no = B.guest_no and date_from <= '30-Apr-05' and date_to >= '01-Apr-05' Where B.guest_no is null; 14
Database System and File System Views in a File System? 15
Database Views Look like base tables Used in queries the same way as base tables Insert? Delete? Update? 16
Insert/Delete/Update Views -- View based on group Create or Replace view RoomsInHotel(Hotel, Room_Count) as Select Hotel_no, Count(*) From Room Group By Hotel_No; Insert into RoomsInHotel Values ('H11', 5); -- should insert 5 records into Room with 'H11' -- which 5 rooms? -- RNo (part of PK) not specified. -- Cannot do it! 17
Assignmet 9 Any Questions? 18
Phase III Any Questions? 19
Schedule Assignment 10 Start Friday Quiz 4 Friday May 1 Test 2 Wednesday, May 6 Phase IV Friday, May 8 Final Exam Thursday, May 14 7 PM (Group #10) 20