SQL Basis

Hoofdstuk 5 - Geavanceerd Filteren

  • Door gebruik te maken van de logische operatoren 'AND' en 'OR' kunnen voorwaarden in de WHERE-clausule gecombineerd worden
  • AND en OR zijn keywords
SELECT <kolom1>,
       <Kolom2>,
       <Kolom3>
FROM   <tabel>
WHERE  <kolom1> = 'waarde' AND <kolom2> < 6;
  • Bij de 'AND' moeten de condities links EN rechts van de AND waar zijn (TRUE)
  • Als 1 van de 2 condities niet waar is (FALSE) wordt de rij weg-gefilterd

Selecteer uit Producten het product id, prijs en naam waarbij het vend_id 'DLL01' is EN de product-prijs minder is dan 4

-- Oracle / MySQL / SQL Server	
SELECT prod_id,
       prod_price,
       prod_name
FROM   Products
WHERE  vend_id = 'DLL01' AND prod_price < 4;
prod_idprod_priceprod_name
BNBG013.49Fish bean bag toy
BNBG023.49Bird bean bag toy
BNBG033.49Rabbit bean bag toy
  • Bij de OR operator hoeft maar 1 van de 2 condities in de WHERE clausule waar (TRUE) te zijn
  • Wanneer 1 van de 2 condities waar is zal het DBMS niet meer naar de 2de conditie kijken
SELECT <kolom1>,
       <Kolom2>,
       <Kolom3>
FROM   <tabel>
WHERE  <kolom1> = 'waarde' OR <kolom2> < 6;


Selecteer uit Producten de productnaam en prijs waarbij het vend_id 'DLL01' is of 'BRS01'

-- Oracle / MySQL / SQL Server	
SELECT prod_name,
       prod_price
FROM   Products
WHERE  vend_id = 'DLL01' OR vend_id = 'BRS01';
prod_nameprod_price
Fish bean bag toy3.49
Bird bean bag toy3.49
Rabbit bean bag toy3.49
8 inch teddy bear5.99
12 inch teddy bear8.99
18 inch teddy bear11.99
Raggedy Ann4.99
  • AND en OR kunnen ook gecombineerd worden waarbij AND eerst wordt uitgevoerd en daarna pas OR
  • Om problemen te voorkomen, gebruik altijd ( )
  • ( ) hebben een hogere prioriteit dan AND en OR
SELECT <kolom1>,
       <Kolom2>,
       <Kolom3>
FROM   <tabel>
WHERE  <kolom1> = 'waarde' AND ( <kolom2> < 6 OR <kolom3> > 8 );

Selecteer uit Producten de productnaam en prijs waarbij het vend_id 'DLL01' is of 'BRS01' EN de prod_price groter of gelijk is aan 10

-- Oracle / MySQL / SQL Server	
SELECT prod_name,
       prod_price
FROM   Products
WHERE  (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price >= 10;
prod_nameprod_price
18 inch teddy bear11.99
  • De IN operator werkt met een lijst van mogelijkheden (condities)
  • De lijst is komma gescheiden en staat tussen ( )
  • Als de gevonden waarde overeenkomt met 1 item uit de lijst is de conditie waar (TRUE)
  • Het resultaat kan ook bereikt worden met een OR
SELECT <kolom1>,
       <Kolom2>,
       <Kolom3>
FROM   <tabel>
WHERE  <kolom1> IN ('waarde1', 'waarde2', 'waarde3');	

Voordelen van het werken met de IN operator:

  • Wanneer je veel condities gebruikt is het werken met IN schoner en duidelijker
  • De verwerkingsvolgorde is makkelijker te beheren als je ook gebruik maakt van AND en OR
  • De verwerkingstijd is minder / wordt sneller uitgevoerd
  • Het belangrijkste: een IN operator kan nog een SELECT bevatten (Subqueries - H11)

Selecteer uit Producten de productnaam en prijs waarbij het vend_id 'DLL01' is of 'BRS01' en sorteer de uitkomst

-- Oracle / MySQL / SQL Server
SELECT   prod_name,
         prod_price
FROM     Products
WHERE    vend_id IN ('DLL01', 'BRS01')
ORDER BY prod_name;
prod_nameprod_price
12 inch teddy bear8.99
18 inch teddy bear11.99
8 inch teddy bear5.99
Bird bean bag toy3.49
Fish bean bag toy3.49
Rabbit bean bag toy3.49
Raggedy Ann4.99
  • De ontkenning van NOT in de WHERE clausule kan gebruikt worden voor de kolomnaam waarop gefilterd wordt
  • De NOT operator wordt nooit alleen gebruikt maar altijd in combinatie met een andere operator
SELECT    <kolom1>
FROM      <tabel>
WHERE NOT <kolom1> = 'waarde'
ORDER BY  <kolom1>;	
  • De NOT hierboven maakt de conditie die volgt negatief
  • Dit kan ook bereikt worden met de != operator
SELECT   <kolom1>
FROM     <tabel>
WHERE    <kolom1> != 'waarde'
ORDER BY <kolom1>;	

  • In bovenstaande eenvoudige code is er geen voordeel om NOT te gebruiken
  • De NOT kan beter gebruikt worden in combinatie met de IN operator
SELECT   kolom1
FROM     <tabel>
WHERE    <kolom1> NOT IN ('waarde1', 'waarde2', 'waarde3')
ORDER BY <kolom1>;	


Selecteer alles uit Producten waarbij het product id niet 'BR01', 'BR02', 'RGAN01' is en sorteer aflopend op productprijs

-- Oracle / MySQL / SQL Server	
SELECT   *
FROM     Products
WHERE    prod_id NOT IN ('BR01','BR02', 'RGAN01')
ORDER BY prod_price DESC;
prod_idvend_idprod_nameprod_priceprod_desc
BR03BRS0118 inch teddy bear11.9918 inch teddy bear comes with cap and jacket
RYL01FNG01King doll9.4912 inch king doll with royal garments and crown
RYL02FNG01Queen doll9.4912 inch queen doll with royal garments and crown
BNBG01DLL01Fish bean bag toy3.49Fish bean bag toy complete with bean bag worms with which to feed it
BNBG02DLL01Bird bean bag toy3.49Bird bean bag toy eggs are not included
BNBG03DLL01Rabbit bean bag toy3.49Rabbit bean bag toy comes with bean bag carrots
  1. Selecteer alle rijen uit Vendors waarvan de vend_country gelijk is aan USA en de vend_state gelijk aan CA (1)


  1. Selecteer alle rijen uit Vendors waarvan de vend_country gelijk is aan England of France (2)


  1. Selecteer alles uit OrderItems van de artikelen duurder dan 10 of waarvan er minimaal 100 besteld zijn (11)


  1. Selecteer alles uit OrderItems met een prod_id van BR01, BR02, BR03 en sorteer op bestelde aantallen (7)


  1. Selecteer alles uit Products behalve die van de leveranciers BRS01, FNG01 en waarvan de prijs minder is dan 4.00 (3)