Subquery VS straight query in SQL -


i'm trying answer question: (general sql syntax)

write query display orders salesman belongs city new york

salesman

salesman_id  name        city        commission -----------  ----------  ----------  ---------- 5001         james hoog  new york    0.15 5002         nail knite  paris       0.13 5005         pit alex    london      0.11 5006         mc lyon     paris       0.14 5003         lauson hen  san jose    0.12 5007         paul adam   rome        0.13 

orders:

ord_no      purch_amt   ord_date    customer_id  salesman_id ----------  ----------  ----------  -----------  ----------- 70001       150.5       2012-10-05  3005         5002 70009       270.65      2012-09-10  3001         5005 70002       65.26       2012-10-05  3002         5001 70004       110.5       2012-08-17  3009         5003 70007       948.5       2012-09-10  3005         5002 70005       2400.6      2012-07-27  3007         5001 70008       5760        2012-09-10  3002         5001 70010       1983.43     2012-10-10  3004         5006 70003       2480.4      2012-10-10  3009         5003 70012       250.45      2012-06-27  3008         5002 70011       75.29       2012-08-17  3003         5007 70013       3045.6      2012-04-25  3002         5001 

the solution provided subquery as:

select * orders salesman_id= (select salesman_id salesman city='new york') 

i know there several answer questions in sql more efficient or reason why use 1 or other? answer below brings same result, i'm wonder if there reason on why use subqueries?

select * orders, salesman  orders.salesman_id = salesman.salesman_id , salesman.city='new york' 

thanks

if subquery returns more 1 row, mysql throw error.

select ...    orders o  o.salesman_id =        ( select s.salesman_id            salesman s           s.city='new york'        ) 

that is, if there 2 or more rows in salesman have 'new york' in city column, query throw error. workaround that, replace equality comparison in operator.

if write query join operation, don't have problem. , can return column values salesman table.

given suitable indexes, we'd expect query execution plans equivalent, though there cases might not be.

worst case, subquery, execution plan retrieve every row orders, , execute subquery find out if there 1 row in salesman table salesman_id has city value of new york. simple case, wouldn't expect that.

subqueries powerful tool keep in sql toolbelt. , there reasons choose use subquery.

but given result returned particular query, if need return columns orders table, we'd typically write join.

select o.*   orders o   join salesman s     on s.salesman_id = o.salesman_id  s.city='new york' 

(as aside, typically avoid using old-school comma operator join operation, , make use of newer(?) join keyword , join predicates moved on clause.)