--Joins
--inner joins
use Automart
Select * from Customer.RegisteredCustomer
--simple inner join using inner join syntax
--inner joins retrurn only matching records from
--the joined tables
Select LastName, Firstname, Email, CustomerPassword
from Person
Inner Join Customer.RegisteredCustomer
on person.Personkey=Customer.RegisteredCustomer.PersonKey
--another, older way to join tables
--it uses the where clause to make the join
--it seems easier but is more dangerous and can
--result in unintended cross joins
Select LastName, Firstname, Email, CustomerPassword
From Person p, Customer.RegisteredCustomer rc
Where p.Personkey=rc.PersonKey
--intentional cross join
Select LastName, Firstname, Email, CustomerPassword
From Person p
Cross join Customer.RegisteredCustomer
--multitable inner join
Select LastName, Firstname, Email, CustomerPassword,
VehicleMake, VehicleYear, LicenseNumber, serviceDate
From Person p
inner join Customer.RegisteredCustomer rc
on p.Personkey=rc.PersonKey
inner join Customer.vehicle v
on p.Personkey = v.personkey
inner join Employee.VehicleService vs
on v.VehicleId=vs.VehicleID
--same join with where clause syntax
Select LastName, Firstname, Email, CustomerPassword,
VehicleMake, VehicleYear, LicenseNumber, serviceDate
From Person p, Customer.RegisteredCustomer rc, Customer.Vehicle v,
Employee.VehicleService vs
Where p.Personkey=rc.PersonKey
And v.PersonKey=p.Personkey
And v.VehicleId=vs.VehicleID
And LastName='Anderson'
--insert to have an unmatched value
Insert into Customer.Autoservice( ServiceName, ServicePrice)
values ('Replacing Upholstry',900.50)
--outer joins return all the records from one table
--and only matching records from the other
--in a left join the first table named returns all its records
--while the second one only returns matching records
--a right outer join it is just flipped
--the first table returns only matching records and the
--second table returns all, matched or unmatched
Select Distinct ServiceName, ServicePrice, vsd.AutoServiceID
From Customer.AutoService a
left outer join Employee.VehicleServiceDetail vsd
on a.AutoServiceID=vsd.AutoServiceID
--another outer join
Select Distinct ServiceName, ServicePrice, vsd.AutoServiceID
From Customer.AutoService a
join Employee.VehicleServiceDetail vsd
on a.AutoServiceID=vsd.AutoServiceID
--see only the nonmatching records
--the null in vsd.autoserviceID
--is only in the result set
Select Distinct ServiceName, ServicePrice, vsd.AutoServiceID
From Customer.AutoService a
left outer join Employee.VehicleServiceDetail vsd
on a.AutoServiceID=vsd.AutoServiceID
Where vsd.AutoServiceID is null
--another
Select LastName, firstName, rc.Personkey
From Person p
left outer join Customer.RegisteredCustomer rc
on p.Personkey=rc.PersonKey
where rc.PersonKey is null
--and another
Select Distinct LocationName, vs.LocationId
From Customer.Location loc
left outer join Employee.VehicleService vs
on loc.LocationID=vs.LocationID
Where vs.LocationID is null
--a full join returns all the records
--from both tables whether they are
--matched or not
Select LocationName, vs.LocationId
From Customer.Location loc
full join Employee.VehicleService vs
on loc.LocationID=vs.LocationID
Select LocationName, Month(ServiceDate) as [Month], Count(VehicleServiceID) as [Count]
From Customer.Location loc
inner join Employee.VehicleService vs
on loc.LocationID=vs.LocationID
Where LocationName='Spokane'
Group by LocationName, Month(ServiceDate)
having count(VehicleServiceID) > 2
Wednesday, January 21, 2015
Joins
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment