w3resource

SQL Exercise: Customers from a different city than the salesmen

SQL JOINS: Exercise-20 with Solution

Write a SQL statement to make a Cartesian product between salesman and customer i.e. each salesman will appear for all customers and vice versa for those salesmen who must belong to a city which is not the same as his customer and the customers should have their own grade.

Sample table: salesman


Sample table: customer


Sample Solution:

SELECT * 
FROM salesman a 
CROSS JOIN customer b 
WHERE a.city IS NOT NULL 
AND b.grade IS NOT NULL 
AND  a.city<>b.city;

Output of the Query:

salesman_id	name		city	commission	customer_id	cust_name	city		grade	salesman_id
5002		Nail Knite	Paris	0.13		3002		Nick Rimando	New York	100	5001
5005		Pit Alex	London	0.11		3002		Nick Rimando	New York	100	5001
5006		Mc Lyon		Paris	0.14		3002		Nick Rimando	New York	100	5001
5007		Paul Adam	Rome	0.13		3002		Nick Rimando	New York	100	5001
5003		Lauson Hen	San Jose0.12		3002		Nick Rimando	New York	100	5001
5002		Nail Knite	Paris	0.13		3007		Brad Davis	New York	200	5001
5005		Pit Alex	London	0.11		3007		Brad Davis	New York	200	5001
5006		Mc Lyon		Paris	0.14		3007		Brad Davis	New York	200	5001
5007		Paul Adam	Rome	0.13		3007		Brad Davis	New York	200	5001
5003		Lauson Hen	San Jose0.12		3007		Brad Davis	New York	200	5001
5001		James Hoog	New York0.15		3005		Graham Zusi	California	200	5002
5002		Nail Knite	Paris	0.13		3005		Graham Zusi	California	200	5002
5005		Pit Alex	London	0.11		3005		Graham Zusi	California	200	5002
5006		Mc Lyon		Paris	0.14		3005		Graham Zusi	California	200	5002
5007		Paul Adam	Rome	0.13		3005		Graham Zusi	California	200	5002
5003		Lauson Hen	San Jose0.12		3005		Graham Zusi	California	200	5002
5001		James Hoog	New York0.15		3008		Julian Green	London		300	5002
5002		Nail Knite	Paris	0.13		3008		Julian Green	London		300	5002
5006		Mc Lyon		Paris	0.14		3008		Julian Green	London		300	5002
5007		Paul Adam	Rome	0.13		3008		Julian Green	London		300	5002
5003		Lauson Hen	San Jose0.12		3008		Julian Green	London		300	5002
5001		James Hoog	New York0.15		3004		Fabian Johnson	Paris		300	5006
5005		Pit Alex	London	0.11		3004		Fabian Johnson	Paris		300	5006
5007		Paul Adam	Rome	0.13		3004		Fabian Johnson	Paris		300	5006
5003		Lauson Hen	San Jose0.12		3004		Fabian Johnson	Paris		300	5006
5001		James Hoog	New York0.15		3009		Geoff Cameron	Berlin		100	5003
5002		Nail Knite	Paris	0.13		3009		Geoff Cameron	Berlin		100	5003
5005		Pit Alex	London	0.11		3009		Geoff Cameron	Berlin		100	5003
5006		Mc Lyon		Paris	0.14		3009		Geoff Cameron	Berlin		100	5003
5007		Paul Adam	Rome	0.13		3009		Geoff Cameron	Berlin		100	5003
5003		Lauson Hen	San Jose0.12		3009		Geoff Cameron	Berlin		100	5003
5001		James Hoog	New York0.15		3003		Jozy Altidor	Moscow		200	5007
5002		Nail Knite	Paris	0.13		3003		Jozy Altidor	Moscow		200	5007
5005		Pit Alex	London	0.11		3003		Jozy Altidor	Moscow		200	5007
5006		Mc Lyon		Paris	0.14		3003		Jozy Altidor	Moscow		200	5007
5007		Paul Adam	Rome	0.13		3003		Jozy Altidor	Moscow		200	5007
5003		Lauson Hen	San Jose0.12		3003		Jozy Altidor	Moscow		200	5007

Explanation:

This SQL query is selecting all columns from two tables, salesman and customer, and joining them using a cross join. The query also has several conditions in the WHERE clause:
The city column in the salesman table is not null
The grade column in the customer table is not null
The city column in the salesman table is not equal to the city column in the customer table.
This query is likely returning a large set of data containing all combinations of rows from the two tables, filtered by the conditions in the WHERE clause. The result set will contain all rows where the salesman and customer are from different city.

Visual Explanation:

Result to a cartesian product between salesman and customer i.e. each salesman will appear for all customer and vice versa for those salesmen who must belongs a city which is not the same as his customer and the customers should have a own grade

Practice Online


Query Visualization:

Duration:

Query visualization of Prepare a cartesian product between salesman and customer i.e. each salesman will appear for all customer and vice versa for those salesmen who must belong a city which is not the same as his customer and the customers should have an own grade - Duration

Rows:

Query visualization of Prepare a cartesian product between salesman and customer i.e. each salesman will appear for all customer and vice versa for those salesmen who must belong a city which is not the same as his customer and the customers should have an own grade - Rows

Cost:

Query visualization of Prepare a cartesian product between salesman and customer i.e. each salesman will appear for all customer and vice versa for those salesmen who must belong a city which is not the same as his customer and the customers should have an own grade - Cost

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous SQL Exercise: Salesmen belongs to a city, customers have a grade
Next SQL Exercise: Display each item producer company.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.

SQL: Tips of the Day

Grouped LIMIT in PostgreSQL: Show the first N rows for each group?

db=# SELECT * FROM xxx;
 id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  3 |          1 | C
  4 |          1 | D
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G
  8 |          2 | H
(8 rows)

I need the first 2 rows (ordered by name) for each section_id, i.e. a result similar to:

id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G
(5 rows)

PostgreSQL v9.3 you can do a lateral join

select distinct t_outer.section_id, t_top.id, t_top.name from t t_outer
join lateral (
    select * from t t_inner
    where t_inner.section_id = t_outer.section_id
    order by t_inner.name
    limit 2
) t_top on true
order by t_outer.section_id;

Database: PostgreSQL

Ref: https://bit.ly/3AfYwZI

 





We are closing our Disqus commenting system for some maintenanace issues. You may write to us at reach[at]yahoo[dot]com or visit us at Facebook