w3resource

SQL Exercise: Salesmen works either for one or more customer or not

SQL JOINS: Exercise-12 with Solution

Write a SQL statement to generate a list in ascending order of salespersons who work either for one or more customers or have not yet joined any of the customers.

Sample table: customer


Sample table: salesman


Sample Solution:

SELECT a.cust_name,a.city,a.grade, 
b.name AS "Salesman", b.city 
FROM customer a 
RIGHT OUTER JOIN salesman b 
ON b.salesman_id=a.salesman_id 
ORDER BY b.salesman_id;

Output of the Query:

cust_name	city		grade	Salesman	city
Brad Davis	New York	200	James Hoog	New York
Nick Rimando	New York	100	James Hoog	New York
Graham Zusi	California	200	Nail Knite	Paris
Julian Green	London		300	Nail Knite	Paris
Geoff Cameron	Berlin		100	Lauson Hen	San Jose
Brad Guzan	London			Pit Alex	London
Fabian Johnson	Paris		300	Mc Lyon		Paris
Jozy Altidor	Moscow		200	Paul Adam	Rome

Explanation:

The said SQL query is performing a right outer join on the customer table alias a and the salesman table alias b on the 'salesman_id' column. It is then selecting the 'cust_name', 'city', and 'grade' columns from the customer table, and the 'name' and 'city' columns from the salesman table. The result is ordered by the 'salesman_id' column.
This query will select all the rows from the salesman table and any matching rows from the customer table and returning the results in the order of salesman_id. If there is no match, it will return NULL for the non-matching columns of customer table.

Visual Explanation:

Result of a list in ascending order for the salesmen who works either for one or more customer or not yet join under any of the customer

Practice Online


Query Visualization:

Duration:

Query visualization of Prepare a list in ascending order for the salesmen who works either for one or more customer or not yet join under any of the customers - Duration

Rows:

Query visualization of Prepare a list in ascending order for the salesmen who works either for one or more customer or not yet join under any of the customers - Rows

Cost:

Query visualization of Prepare a list in ascending order for the salesmen who works either for one or more customer or not yet join under any of the customers - Cost

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

Previous SQL Exercise: Find customers who have placed no order or one or more.
Next SQL Exercise: Salesmen who works either for one or more customer.

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