Good evening. I am new to SQL and I am currently learning how to write SQL SELECT statements. I read a lot about the difference of performance between different ways of writing SELECT statement.
I am asking myself about the difference between one SELECT query with a lot AND statements and “Interlaced” SELECT statements.
e.g
SELECT s.name
FROM studenten s, vorlesungen v, hoeren h, professoren p
WHERE p.name='Kant'
AND s.matr_nr=h.matr_nr
AND v.vorl_nr=h.vorl_nr
AND v.gelesen_von=p.pers_nr;
SELECT s.name FROM studenten s,
(SELECT h.matr_nr FROM hoeren h ,
(SELECT v.vorl_nr FROM Vorlesungen v,
(SELECT p.pers_nr FROM Professoren p WHERE name ='Kant') AS tab1
WHERE tab1.pers_nr = v.gelesen_von) AS tab2
WHERE tab2.vorl_nr=h.vorl_nr) AS tab3
WHERE tab3.matr_nr=s.matr_nr;
Which is better. Or is there maybe a third even better way?
Advertisement
Answer
SELECT s.name FROM studenten s JOIN hoeren h USING (matr_nr) JOIN vorlesungen v USING (vorl_nr) JOIN professoren p ON (v.gelesen_von = p.pers_nr) WHERE p.name='Kant';
Note that with USING, you don’t really need the table aliases for hoeren or vorlesungen. You only need aliases to distinguish between studenten.name and professoren.name. Hence, the query could be shortened to
SELECT s.name FROM studenten s JOIN hoeren USING (matr_nr) JOIN vorlesungen USING (vorl_nr) JOIN professoren p ON (gelesen_von = p.pers_nr) WHERE p.name='Kant';
Whether you want to keep the table aliases or not is a matter of taste.