--table expressions --sub query in the from clause --sub queries must be aliased Select PersonLastName, PersonFirstName, PersonEmail, City From (Select PersonLastname, PersonFirstName, PersonEmail, PersonAddressCity City From Person p inner join PersonAddress pa on p.PersonKey = pa.PersonKey where PersonAddressCity='Bellevue') as BellevueResidents --same but with wildcard Select * From (Select PersonLastname, PersonFirstName, PersonEmail, PersonAddressCity City From Person p inner join PersonAddress pa on p.PersonKey = pa.PersonKey where PersonAddressCity='Bellevue') as BellevueResidents --another table expression example Select GrantType, total, Average From (Select GrantTypeName GrantType, Sum(GrantRequestAmount) as Total, Avg(GrantRequestAmount) as Average From GrantRequest gr inner join GrantType gt on gr.GrantTypeKey=gt.GrantTypeKey Group by GrantTypeName) as TypeTotals --Common table expressions are similar --to reqular expressions except --the subquery is defined first which --is better logically With BellevueResidents as ( Select PersonLastname, PersonFirstName, PersonEmail, PersonAddressCity City From Person p inner join PersonAddress pa on p.PersonKey = pa.PersonKey where PersonAddressCity='Bellevue' ) Select * from BellevueResidents go -- a second example with typeTotals as ( Select GrantTypeName GrantType, Sum(GrantRequestAmount) as Total, Avg(GrantRequestAmount) as Average From GrantRequest gr inner join GrantType gt on gr.GrantTypeKey=gt.GrantTypeKey Group by GrantTypeName )Select GrantType, Total, Average from TypeTotals go --Declare @City nvarchar(255) ='Kent' Declare @city nvarchar(255) set @city ='Kent'; With BellevueResidents as ( Select PersonLastname, PersonFirstName, PersonEmail, PersonAddressCity City From Person p inner join PersonAddress pa on p.PersonKey = pa.PersonKey where PersonAddressCity=@city ) Select * from BellevueResidents go --views are basically stored queries-- they usually --represent "a view" some user has of the data --they also can be used to obscure the underlying --structure of the database, because the user --of a view can only see the aliases for the columns --and can't see the underlying tables Create view vw_Employee As Select PersonLastName [Last Name], PersonFirstName [First Name], PersonEmail Email, EmployeeHireDate [Hire Date], EmployeeAnnualSalary [Annual Salary], PositionName [Position] From Person p inner join Employee e on p.Personkey=e.PersonKey inner join EmployeePosition ep on e.EmployeeKey = ep.EmployeeKey inner join Position ps on ep.PositionKey=ps.PositionKey Go Select [last name], [first name], Email from vw_Employee Where [Annual Salary] > 0 order by [Last Name] --schemabinding makes it so that the --tables underlying the view --cannot be changed --at least not without removing the view go Create view vw_Donations with schemabinding As Select PersonLastName, PersonFirstName, PersonEmail, DonationDate, DonationAmount From dbo.person p inner join dbo.donation d on p.PersonKey=d.PersonKey go Select * from vw_Donations go --this won't work because table bound to view Alter table Donation Drop column DonationDate go --a schema, in this context, is a set of objects --with common ownership --dbo, database owner, is the default schema Create schema managerSchema go --here is a view that is owned by the managerSchema Create view managerSchema.RequestSummary As Select GrantTypeName GrantType, Sum(GrantRequestAmount) as Total, Avg(GrantRequestAmount) as Average From GrantRequest gr inner join GrantType gt on gr.GrantTypeKey=gt.GrantTypeKey Group by GrantTypeName go --table valued function is a function that --returns a table as a result --this one takes a parameter @City --that must be provided by the user Create function fx_GetCities(@city nvarchar(255)) returns table As Return ( Select PersonLastname, PersonFirstName, PersonEmail, PersonAddressCity City From Person p inner join PersonAddress pa on p.PersonKey = pa.PersonKey where PersonAddressCity=@city ) --using the function go Select * from dbo.fx_GetCities('Kent')
Monday, May 1, 2017
Table Expressions
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment