SELECT Products.prod_id, Products.prod_name FROM Products;
SELECT P.prod_id, P.prod_name FROM Products AS P;
SELECT C.cust_name AS KlantNaam, C.cust_contact AS KlantContact, P.prod_name AS ProductNaam, V.vend_name AS Leverancier FROM Customers AS C INNER JOIN Orders AS O ON C.cust_id = O.cust_id INNER JOIN OrderItems AS OI ON O.order_num = OI.order_num INNER JOIN Products AS P ON OI.prod_id = P.prod_id INNER JOIN Vendors AS V ON P.vend_id = V.vend_id WHERE OI.prod_id = 'RGAN01';
-- Oracle / MySQL / SQL Server SELECT C.cust_name KlantNaam, C.cust_contact KlantContact, P.prod_name ProductNaam, V.vend_name Leverancier FROM Customers C INNER JOIN Orders O ON C.cust_id = O.cust_id INNER JOIN OrderItems OI ON O.order_num = OI.order_num INNER JOIN Products P ON OI.prod_id = P.prod_id INNER JOIN Vendors V ON P.vend_id = V.vend_id WHERE OI.prod_id = 'RGAN01';
SQL pro's gebruiken geen AS
Verschillende soorten Joins | |
---|---|
Type | Beschrijving |
Self Join | Een Join op dezelfde tabel; Door gebruik van aliassen kan dezelfde tabel meerdere keren aangeroepen worden |
Inner Join | Een Join met een andere tabel; De regels waar de sleutels overeenkomen zijn onderdeel van het resultaat |
Left outer Join | Een Join met een andere tabel; De regels waar de sleutels overeenkomen zijn onderdeel van het resultaat + de regels die niet overeenkomen van de eerstgenoemde tabel in de FROM |
Right outer Join | Een Join met een andere tabel; De regels waar de sleutels overeenkomen zijn onderdeel van het resultaat + de regels die niet overeenkomen van de 'ge-join-de' tabel in de FROM |
Full outer Join | Een Join met een andere tabel; De regels waar de sleutels overeenkomen zijn onderdeel van het resultaat + de regels die niet overeenkomen van beide andere tabellen |
Selecteer alle klantcontacten die voor het gelijknamige bedrijf werken als 'Jim Jones'
Met een Subquery
SELECT cust_id, cust_name, cust_contact FROM Customers WHERE cust_name = ( SELECT cust_name FROM Customers WHERE cust_contact = 'Jim Jones' ) ;
Met een Self Join
SELECT c1.cust_id, c1.cust_name, c1.cust_contact FROM Customers c1, Customers c2 WHERE c1.cust_name = c2.cust_name AND c2.cust_contact = 'Jim Jones';
cust_id | cust_name | cust_contact |
1000000003 | Fun4All | Jim Jones |
1000000004 | Fun4All | Denise L. Stephens |
Inner join
SELECT <kolom1>, <kolom2> FROM <tabel1> INNER JOIN <tabel2> ON <tabel1>.<sleutel> = <tabel2>.<sleutel>
Left Outer join
Right Outer join
SELECT <kolom1>, <kolom2> FROM <tabelA> LEFT OUTER JOIN <tabelB> ON <tabelA>.<sleutel> = <tabelB>.<sleutel>
SELECT <kolom1>, <kolom2> FROM <tabelA> RIGHT OUTER JOIN <tabelB> ON <tabelA>.<sleutel> = <tabelB>.<sleutel>
SELECT <kolom1>, <kolom2> FROM <tabelA> LEFT OUTER JOIN <tabelB> ON <tabelA>.<sleutel> = <tabelB>.<sleutel>
SELECT <kolom1>, <kolom2> FROM <tabelB> RIGHT OUTER JOIN <tabelA> ON <tabelA>.<sleutel> = <tabelB>.<sleutel>
Selecteer de namen van de leveranciers die producten leveren van minder dan 6,-
-- Oracle / MySQL / SQL Server SELECT DISTINCT V.vend_name FROM Vendors V INNER JOIN Products P ON V.vend_id = P.vend_id WHERE P.prod_price < 6;
Met een INNER JOIN
-- Oracle / MySQL / SQL Server SELECT DISTINCT V.vend_name FROM Vendors V LEFT OUTER JOIN Products P ON V.vend_id = P.vend_id WHERE P.prod_price < 6;
Met een LEFT OUTER JOIN
vend_name |
Doll House Inc. |
Bears R Us |
Bij het gebruik van een LEFT OUTER JOIN wordt er meer data opgehaald dan nodig is.
Onnodige data ophalen betekend hogere kosten en heeft niet de voorkeur.
Selecteer de namen van de klanten die wel en geen bestelling geplaatst hebben en de bijbehorende ordernummers.
-- Oracle / MySQL / SQL Server SELECT C.cust_name, O.order_num FROM Customers C LEFT OUTER JOIN Orders O ON C.cust_id = O.cust_id;
cust_name | order_num |
Village Toys | 20005 |
Village Toys | 20009 |
Kids Place | NULL |
Fun4All | 20006 |
Fun4All | 20007 |
The Toy Store | 20008 |
Full Outer join
SELECT <kolom1>, <kolom2> FROM <tabelA> FULL OUTER JOIN <tabelB> ON <tabelA>.<sleutel> = <tabelB>.<sleutel>