Answer simple quiz at the end of the blog post and –
Every day one winner from India will get Joes 2 Pros Volume 1.
Every day one winner from United States will get Joes 2 Pros Volume 1.
Finding un-matching Records
Often time we want to find records in one table that have no matching key in another table. This is common for things like finding products that have never sold, or students who did not re-enroll. Something we were expecting is missing. Records in one table were expecting some related activity in another table and did not find them. There are many ways to find these records.
Basic Subquery
We have probably all heard that subqueries should be avoided if there is a better solution. Often times basic subqueries are used where a simple “Unmatched Records Query” could have been used.
Let’s start off with the subquery example. Looking at the Location table in the figure below we see all the data. In fact, this table does not allow nulls for the LocationID field. Looking further, there are no nulls anywhere in the Location table. So does this mean that all locations have at least one employee? It’s possible that some of these locations might be new and have not employees working there yet.
How can we find the location with no employees. We can use a subquery. For example we can use the following query to find all locations of the JProCo database that have now employee working there.
SELECT *
FROM Location
WHERE LocationID
NOT IN (SELECT DISTINCT LocationID
FROM Employee
WHERE LocationID IS NOT NULL)
Unmatched Records Queries
If you wanted to find all locations with no employees, you could run an “Unmatched Records Query”. Let’s build this piece by piece. In this case, we have to join the Location table with the Employee table to determine the location that has no employees. What type of join will tell us this? Since nulls don’t map through a join, the INNER JOIN drops the record from the result set and we won’t see Chicago. The outer join will show both the matches and the unmatched records, so we see every location. In the figure below we get all location even if there are no employees.
Notice Seattle is listed many times but Chicago is listed once with no employees found. A NULL appears in the fields from the Employee table for Chicago. With the Location table on the left and the NULL on the right, we have part of an unmatched records query. To find just the records that don’t match, we look for null records on the table that the outer join does not favor. In this case, it’s the Employee table.
The outer join will show us the unmatched records with null location details if you set the WHERE clause to look for nulls on a field in the non-dominant table. Unmatched record queries use SQL to return a result set displaying only the unmatched records between the two tables.
When our query criterion specifies NULL, only Chicago shows up in our result set. By doing a LEFT OUTER JOIN and using a NULL value from the Employee table (or “RIGHT” table) as our search condition criteria, our unmatched records query shows us one record.
Note: If you want to setup the sample JProCo database on your system you can watch this video.
Question 5
Q 5) Which of the following queries will show all location that have no employees?
- SELECT P.EmployeeID, T.[Name]
FROM Employee P LEFT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE T.TerritoryID IS NULL - SELECT P.EmployeeID, T.[Name]
FROM Employee P LEFT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL - SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE T.TerritoryID IS NULL - SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Please post your answer in comment section to win Joes 2 Pros books.
Rules:
Please leave your answer in comment section below with correct option, explanation and your country of resident.
Every day one winner will be announced from United States.
Every day one winner will be announced from India.
A valid answer must contain country of residence of answerer.
Please check my facebook page for winners name and correct answer.
Winner from United States will get Joes 2 Pros Volume 1.
Winner from India will get Joes 2 Pros Volume 1.
The contest is open till next blog post shows up at which is next day GTM+2.5.
Reference: Pinal Dave (https://blog.sqlauthority.com)
135 Comments. Leave new
In case of LEFT OUTER JOIN : It will result all the records from the left table irrespective of the records in the right table
Simillarly, in RIGHT OUTER JOIN : it will result all the records from the right table irrespective of the records in the left table
1. We have to take all the records from the Location, hence we can take left outer join having Location in the left or right outer join having Location in the right
2. We have to show the locations having no employees, hence we have to put
in where condition Employee.TerritoryID is null
Above two conditions are satisfied only in Option – 4
So, Correct Answer is Option 4
SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Ishan Shah,
Gandhinagar,
India
SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
We have to use Right Outer Join to get data from Location table and where clause to check NULL value must be on Employee table.
Chetan – USA
Answer is : 1, 3
India
Hi Pinal,
Challenge:
Which of the following queries will show all location that have no employees?
Correct Answer:
4.SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
The RIGHT OUTER JOIN will get all of the Location Records. The Where clause will filter the results to show only the Location Records that don’t have employees (WHERE P.TerritoryID IS NULL).
Country:
United States
Thanks for the knowledge!
Regards,
Bill Pepping
Option #4 is the correct answer
Thanks,
Kunal
Florida, USA
Option 4 is the correct answer.
Jason Markantes
USA
Answer #4 –
SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
you need the RIGHT OUTER JOIN so you can get locations without employees, but you also need to be checking the employee table for the null TerritoryID. Checking the location table for the null TerritoryID won’t return anything since all locations will have an ID
I believe the correct answer is 4.
The first two are doing a left outer join which would get employees without location rather than locations without employees.
The third one is close, but it is checking for nulls on the wrong table. The table is P for employee, not t for Territory. With number 4 you would see the rows that have nulls in the Employee table.
I am from the United States.
Correct answer is option # 4
SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Nikhil Bhatt, Tampa, FL, USA
the answer is 4
i m from india
The correct answer is 4.
left out join list all rows from left hand table plus null.
right out join list all rows from right hand table plus null.
So in this case, we want to know null employees, right out join is used here.
Country – Canada
Correct Answer is Option 4
Sandeep
INDIA
Option 4 is correct.
4.SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Right outer join returns the records only from the right table excluding the subset of primary and secondary table records and NULL on employee table returns rows that have no employees.
Country: USA
I think the answer for this case is option 4
SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Country : Chile
Answer No 4 is correct:
“SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL”
—————–
Rajneesh Verma
INDIA
4.SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Gordon Kane
USA
Answer is Option no – 4
India
Option No 4 is correct:
SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Country: India
Answer is 4.
SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
David Brust
USA
Answer:
4.SELECT P.EmployeeID, T.[Name]
FROM Employee P RIGHT OUTER JOIN Location T
ON T.TerritoryID = P.TerritoryID
WHERE P.TerritoryID IS NULL
Vinay,Pune,India