A l l A b o u t J o i n s Step 1: Create Employee Table USE [Test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Employee]( [EmployeeID] [int] NOT NULL, [EmployeeName] [nchar](50) COLLATE Latin1_General_CI_AS NOT NULL, [ContactID] [int] NULL, [ManagerID] [int] NULL, [MaritalStatus] [nchar](1) COLLATE Latin1_General_CI_AS NULL, [HireDate] [datetime] NULL, CONSTRAINT [PK_FK_Employee_EmployeeID] PRIMARY KEY CLUSTERED ( [EmployeeID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Primary key for employee rows' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Employee', @level2type=N'COLUMN', @level2name=N'EmployeeID' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Identifies the employee in the Contact table. Foreign key to Contact.ContactID' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Employee', @level2type=N'COLUMN', @level2name=N'ContactID' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'M = Married S = Single' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Employee', @level2type=N'COLUMN', @level2name=N'MaritalStatus' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Date on which the employee was hired' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Employee', @level2type=N'COLUMN', @level2name=N'HireDate' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Manager to whom the employee is assigned. Foreign key to Employee.EmployeeID' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Employee', @level2type=N'CONSTRAINT', @level2name=N'PK_FK_Employee_EmployeeID' GO USE [Test] GO ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_Contact] FOREIGN KEY([ContactID]) REFERENCES [dbo].[Contact] ([ContactID]) GO ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_Manager] FOREIGN KEY([ManagerID]) REFERENCES [dbo].[Manager] ([ManagerID]) Step 2: Create EmployeeAddress Table USE [Test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[EmployeeAddress]( [EmployeeID] [int] NOT NULL, [AddressID] [int] NOT NULL, [Address] [nchar](70) COLLATE Latin1_General_CI_AS NOT NULL, CONSTRAINT [PK_EmployeeAddress] PRIMARY KEY CLUSTERED ( [AddressID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Employee identification number. Foreign key to Employee.EmployeeID' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'EmployeeAddress', @level2type=N'COLUMN', @level2name=N'EmployeeID' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Employee address identification number. Foreign key to Address.AddressID' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'EmployeeAddress', @level2type=N'COLUMN', @level2name=N'AddressID' GO USE [Test] GO ALTER TABLE [dbo].[EmployeeAddress] WITH CHECK ADD CONSTRAINT [FK_EmployeeAddress_Employee] FOREIGN KEY([EmployeeID]) REFERENCES [dbo].[Employee] ([EmployeeID]) Step 3: Insert Some values for both Employee and Employeeaddress tables Step 4 Join query Workouts Inner Join Examples SELECT E.EmployeeID, E.EmployeeName,E.ContactID,A.AddressID, A.address FROM Employee E INNER JOIN Employeeaddress A ON A.EmployeeID = E.EmployeeID WHERE A.addressID > 10 -- or = 10 or <> ORDER BY E.Employeename, A.address Inner Natural Join Examples SELECT E.*, A.addressID, A.address FROM Employee E INNER JOIN Employeeaddress A ON A.EmployeeID = E.EmployeeID Inner Equi Join Example: SELECT * FROM Employee E INNER JOIN EmployeeAddress A ON A.EmployeeID = E.EmployeeID Who is belongs to which manager select e1.Managername 'Manager',e2.employeename 'Employee' from Manager e1 join employee e2 on e1.managerid=e2.ManagerID Left Outer Join Example SELECT E.Employeename, E.ManagerID, C.Contactname FROM employee E LEFT OUTER JOIN contact C ON E.contactID = C.contactid ORDER BY E.employeename Right Outer Join Example SELECT E.Employeename, E.ManagerID, C.Contactname FROM employee E Right OUTER JOIN contact C ON E.contactID = C.contactid ORDER BY E.employeename --ORDER BY E.employeename, A.AU_FNAME FULL Outer Join Example SELECT E.Employeename, E.ManagerID, C.Contactname FROM employee E FULL OUTER JOIN contact C ON E.contactID = C.contactid ORDER BY E.employeename --ORDER BY E.employeename, A.AU_FNAME CROSS Join Example SELECT Employeename, EmployeeID, ContactName FROM Employee CROSS JOIN Contact ORDER BY Employeename LEFT OUTER JOIN that even returns the employees without managers SELECT t1.EmployeeName [Employee], COALESCE(t2.EmployeeName, 'No manager') [Manager] FROM Employee t1 LEFT OUTER JOIN Employee t2 ON t1.ManagerID = t2.EmployeeID |
Wednesday, 25 November 2009
Joins
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment