ISO SQL: Structured Query Language

Vergelijkbare documenten
SQL: query taal met. woorden. ISO SQL: Structured Query Language. de SQL basis query structuur. voorbeeld: doel: intuitieve query taal

de praktijk: tabellen

ISO Query By Example

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Data Manipulatie. Query Talen. / Informatica

ISO Datamodelleren. Prof. dr. Paul De Bra. Gebaseerd op: Database System Concepts, 5th Ed. Silberschatz, Korth and Sudarshan

het bank voorbeeld ISO Datamodelleren modelleren met het E-R R model een database ontwerpen verzamelingen van relaties (verbanden)

Structured Query Language (SQL)

Introductie (relationele) databases

TECHNISCHE UNIVERSITEIT EINDHOVEN. Faculteit Wiskunde en Informatica

SQL opgaven. Relationele model: Opgaven:

Relationele Databases 2002/2003

Relationele Databases 2002/2003

Les S-02: Meer geavanceerde SQL-instructies

11. Het selecteren van gegevens deel II

Structured Query Language

12. Meer dan één tabel gebruiken en sub-queries

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica. Proeftentamen ISO (2R290), query-gedeelte, Oktober 2006

SQL is opgebouwd rond een basisinstructie waaraan één of meerdere componenten worden toegevoegd.

Informatie Systeem Ontwikkeling ISO 2R290

Query SQL Boekje. Fredrik Hamer

Databank - Basis 1. Inhoud. Computervaardigheden en Programmatie. Hoofdstuk 4 Databank - Basis. Terminologie. Navigeren door een Venster

DBMS. DataBase Management System. Op dit moment gebruiken bijna alle DBMS'en het relationele model. Deze worden RDBMS'en genoemd.

Tentamen Informatica 6, 2IJ60,

Zelftest SQL Workshop

1. Inleiding Inleiding SQL Inleiding Database, databaseserver en databasetaal Het relationele model...

Zelftest SQL Workshop

Les 2 Eenvoudige queries

SQL: oefenen queries

Hoofdstuk: 1 Principes van databases

Les S-01: De basisbeginselen van SQL

Inleiding Databases en Data Base Management Systems Tabellen Wat is SQL?... 5

Miniles gegevensbanken bevragen met SQL

databases & SQL - antwoorden

= > >= < <= BETWEEN IS NULL IS NOT NULL

Data Manipulation Language

Databases en SQL Foundation (DBSQLF.NL)

Het omzetten van een ER-diagram naar SQL

Computerclub Volwassenen, Jeugd en Informatica vzw

DBMS SQL. Relationele databases. Sleutels. DataBase Management System. Inleiding relationele databases. bestaan uit tabellen.

Databases - Inleiding

Gekoppelde tabellen: de JOIN

Relationele databases

EXIN Databases en SQL Foundation

[TOETS SQL INLEIDING]

Microsoft SQL. opdracht. Regio College Zaanstreek Waterland Afdeling ICT Opleidingen

voorbeeldexamen I-Tracks Databases and SQL Foundation Voorbeeldexamen DBSQLF Uitgave juni 2006

Relationele Databases 2002/2003

Computervaardigheden. Universiteit Antwerpen. Computervaardigheden en Programmatie. Grafieken en Rapporten 1. Inhoud. Anatomie van een databank

1. Databanken. Wat is een databank? Verschillende opslagmethodes

Les S-01: De basisbeginselen van SQL

TECHNISCHE UNIVERSITEIT EINDHOVEN. Faculteit Wiskunde en Informatica

oefeningen TOP2000 antwoorden

1. * Database worden vaak gebruikt in Client-Server architectuur.

SQL STATEMENTS. Deze kolom kan grote stukken tekst aan en is bedoeld om tekst erin de plaatsen. Geheel getal, bijvoorbeeld 8, 63, 835 NUMERIC

Antwoorden Informatica Hoofdstuk 7

Inhoud. Voorwoord Belangrijkste kenmerken van dit boek De opzet van dit boek Over de auteur Woord van dank

SQL / Systeemanalyse

Datamodelleren en databases 2011

Tentamen Databases voor iku

SQL & Relationele datamodellen in interactieve media

Correctievoorschrift HAVO Informatica. Tijdvak 1 Woensdag 24 mei uur. College-examen schriftelijk.

7. Het selecteren van gegevens

oefeningen eredivisie antwoorden

Data Warehouse Script Generator Doel

Tentamen Databases. 18 december :00-12:00, Educatorium Gamma

SQL en XML. XML schema s & DMO. Entiteitsklasse en attribuut. SQL en XML. Datamodellering Schema een ruim begrip (zie Møller, p.

Databases (INFODB) 20 april 2010

SQL datadefinitietaal

TECHNISCHE UNIVERSITEIT EINDHOVEN Faculteit Wiskunde en Informatica. Proeftentamen ISO (2R290), November 2005

Koppeling met een database

Informatica toets vwo 6 Databases

EXAMEN juni 2016 Gegevensbanken

Een introductie tot gegevensbanken

Hoofdstuk 9: Object Constraint language (OCL) Prof. Dr. Olga De Troyer. Constraints

Toon TITEL, JAAR en PLATVORM van GAMES die voor het jaar 2000 uitkwamen op Nintendo 64

Excel Controller. Handleiding Excel Controller Wizard

Les 11 : Basis SQL (deel2).

Van een ER-diagram naar een database specificatie in SQL

Functioneel programmeren

Data Handling Ron van Lammeren - Wageningen UR

Informatie & Databases

Antwoorden door een scholier 1990 woorden 3 maart keer beoordeeld. Informatica INFORMATICA HOOFDSTUK 4

EXIN Databases en SQL Foundation

SQL. Datamodellering 2008

SQL. Wat is SQL? Geschiedenis SQL SQL DMO Datamodellering 2008

Tentamen Databases voor ica

Info-books. Toegepaste Informatica. Handleiding. Deel 40c : Gegevensbeheer en algoritmen in Access. HA40c. Jos Gils Erik Goossens

SQL.

Databases (INFODB) 24 januari 2007

Van CaseTalk naar een database in SQLite studio

Workshop 3x. Normaliseren. Normaliseren. Hiëarchische database ODBMS. Relationele database. Workshop 14 oktober A. Snippe ICT Lyceum 1

Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester.

1. CTRL- en SHIFT-knop gebruiken om meerdere variabelen te selecteren

We moeten de accommodaties selecteren die 3 sterren hebben, en in land met ID 10 zitten.

Gebruikers Handleiding

Rapportage voor Unit4 Multivers. Eindhoven, 22 juni 2017

Relationele database. Het relationele model

Zelftest SQL. Document: n0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

SQL & Datamodelleren

Transcriptie:

ISO SQL: Structured Query Language Prof. dr. Paul De Bra Gebaseerd op: Database System Concepts, 5th Ed. SQL: query taal met woorden doel: intuitieve query taal gebruikt Engelse woorden: select, from, where is meer declaratief: je beschrijft de vraag en niet de berekening van het antwoord beschikbaar in (bijna) alle database systemen veel toeters en bellen die we in ISO niet bestuderen het data definitie deel slaan we in ISO ook over leunt aan bij wat computers goed kunnen (geen verzamelingen, beperkte data types zoals verschillende soorten getallen en strings) 3.3

voor andere datatypes: BLOBs wat we niet in SQL kunnen weergeven moeten we BLOBs gebruiken: binary large objects ze hebben verder geen betekenis 3.4 de SQL basis query structuur een typische SQL query ziet er als volgt uit: select A 1, A 2,..., A n from r 1, r 2,..., r m where P A i is een attribuut R i is een relatie (tabel) P is een logisch predicaat. het resultaat betekent: ( σ ( r r K r n P 1 2 A1, A2, K, A m de query werkt op een instantie en produceert een nieuwe (virtuele) tabel-instantie )) 3.5

voorbeeld: geef het rekeningnummer en saldo van alle rekeningen bij het filiaal Perryridge in de algebra was dit: Π account_number, balance (σ branch_name= Perryridge (account) ) in SQL wordt dit: select account_number, balance from account where branch_name = Perryridge merk op dat dit bijna leest als Engels: select the account number and balance of the accounts where the branch name is Perryridge 3.6 SQL: variaties op de select clausule een sterretje geeft aan dat er geen projectie is (dat alle attributen behouden blijven): select * from loan in de select clausule mag gerekend worden (+,,, /) met attributen en constanten de vraag: select loan_number, branch_name, amount 100 from loan geeft een tabel die lijkt op loan maar met alle bedragen maal 100. 3.7

de where clausule de where clause geeft een voorwaarde aan per rij uit de tabel (of cartesisch product) komt helemaal overeen met het selectie-predicaat uit de relationele algebra. we gebruiken and, or, not en haakjes, en we schrijven <>, <= en >= in plaats van, en. we mogen ook in de where clausule rekenen: select loan_number from loan where amount / 100 > 10 3.8 de where clausule: bijzondere gevallen SQL kent een between vergelijking: select loan_number from loan where amount between 90000 and 100000 SQL kent string operaties: %: stelt eender welke string voor vb: where branch like %idge% _: stelt eender welk (enkel) teken voor vb: where customer_name like _. De Bra selecteert De Bra met eender welke voorletter. alleen exacte string vergelijking kan met =. 3.9

de from clausule de from clausule bevat de relaties waarvan het cartesisch product genomen wordt. vb: geef klant-naam, leningnummer en leningbedrag van alle klanten met leningen bij het filiaal Perryridge: select customer_name, borrower.loan_number, amount from borrower, loan where borrower.loan_number = loan.loan_number and branch_name = Perryridge merk op dat we dezelfde impliciete hernoeming gebruiken als bij de relationele algebra 3.10 expliciete hernoeming naast impliciete hernoeming kent SQL ook expliciete hernoeming van tabellen en van attributen: de as clausule: old-name as new-name geef klant-naam, leningnummer en leningbedrag van alle klanten met leningen bij het filiaal Perryridge en noem het loan_number om tot loan_id: select customer_name, b.loan_number as loan_id, amount from borrower as b, loan as l where b.loan_number = l.loan_number we noemen een hernoemde tabel ook tupel variabele 3.11

hernoeming (vervolg) voorbeeld met nodige hernoeming: geef de namen van alle filialen met grotere assets dan een filiaal in Brooklyn: select T.branch_name from branch as T, branch as S where T.assets > S.assets and S.branch_city = Brooklyn groter dan een filiaal in Brooklyn betekent niet hetzelfde als groter dan elk filiaal in Brooklyn. 3.12 verzamelings-operaties de operaties,, uit de relationele algebra heten in SQL union, intersect, en except. de queries die moeten gecombineerd worden moeten tussen haakjes staan hoewel SQL in het algemeen een probleem heeft met het elimineren van dubbele tupels gebeurt dat elimineren bij union, intersect en except altijd automatisch (zodat er geen vergissingen ontstaan) 3.13

verzamelings-operaties geef alle klanten met een rekening of een lening (of allebei): (select customer_name from depositor) union (select customer_name from borrower) geef alle klanten met een rekening en een lening: (select customer_name from depositor) intersect (select customer_name from borrower) geef alle klanten met een rekening maar geen lening: (select customer_name from depositor) except (select customer_name from borrower) 3.14 opgaven we stellen dezelfde queries als bij de relationele algebra, op de database van opgave 2.1: employee (person_name, street, city) works (person_name, company_name, salary) company (company_name, city) manages (person_name, manager_name) de sleutels hebben hierbij belang! 3.15

opgaven Stel volgende vragen in SQL: 1. geef de namen van alle bedienden die wonen in Eindhoven 2. geef de namen van alle bedienden die niet in Eindhoven wonen 3. geef de namen van alle bedienden die zichzelf als manager hebben 4. geef de naam van de managers met een salaris van meer dan 100.000 5. geef de naam van de bedienden met een manager met een salaris van meer dan 100.000 3.16 opgaven Stel volgende vragen in SQL: 6. geef de namen van de bedienden die meer verdienen dan hun manager 7. geef de naam van de bedrijven die gevestigd zijn in een stad waar nog een ander bedrijf gevestigd is 8. geef de namen van alle bedienden die wonen in de stad waar ze werken 9. geef de namen van alle bedienden die wonen in een andere stad dan hun manager 10. geef de naam van de bedrijven die gevestigd zijn in een stad waar geen enkele bediende van dat bedrijf woont 3.17

opgaven Stel volgende vragen in SQL: 11. geef de naam van bedienden wiens manager voor een ander bedrijf werkt dan zij zelf 12. geef de namen van de bedrijven die werknemers hebben die in Eindhoven wonen 13. geef de namen van de bedrijven die geen werknemers hebben die in Eindhoven wonen 14. geef de naam van de bediende met het hoogste salaris 15. geef de naam van de manager met het hoogste salaris 3.18 terugvertaling naar het Nederlands select e.person_name from employee as e, manages as m employee as me where e.person_name = m.person_name and m.manager_name = me.person_name and e.city = me.city ( select c.company_name from company as c ) except ( select c.company_name from company as c, works as w, employee as e where e.person_name = w.person_name and e.city = c.city ) 3.19

geneste of ingenestelde queries in SQL kunnen queries binnen andere queries worden gebruikt subqueries worden o.a. gebruikt om en uit te drukken (met in en not in): geef de klanten met een rekening maar geen lening: select customer_name from depositor where customer_name not in (select customer_name from borrower ) ( select customer_name from depositor ) except (select customer_name from borrower ) 3.20 waarom geneste queries? bij een geneste query kunnen in de subquery attributen uit hoofd- en subquery worden gebruikt: geef de klanten met een rekening waarop het saldo hoger is dan het bedrag van elk van hun leningen: select customer_name from depositor as d, account as a where d.account_number = a.account_number and customer_name not in ( select customer_name from borrower as b, loan as l where b.loan_number = l.loan_number and l.amount >= a.balance ) 3.21

meer mogelijkheden dit lijkt op dezelfde vraag maar is dit echt dezelfde query? select customer_name from depositor as d where customer_name not in ( select b.customer_name from borrower as b, loan as l, account as a where d.account_number = a.account_number and b.loan_number = l.loan_number and l.amount >= a.balance ) 3.22 meer mogelijkheden, meer fouten dit lijkt opnieuw op dezelfde vraag maar wat betekent deze query? select customer_name from depositor as d where customer_name not in ( select b.customer_name from borrower as b, loan as l, depositor as dd, account as a where d.customer_name = dd.customer_name and dd.account_number = a.account_number and b.loan_number = l.loan_number and l.amount >= a.balance ) 3.23

scoping regels in de subquery mag worden verwezen naar de hoofdquery, maar niet omgekeerd wat is er fout in de volgende query? select customer_name from depositor as d, account as a where d.account_number = a.account_number and d.customer_name = b.customer_name and customer_name not in ( select customer_name from borrower as b, loan as l where b.loan_number = l.loan_number and l.amount >= a.balance ) 3.24 verzamelingen vergelijken: some we kunnen =, <>, >, >=, <, <= met some gebruiken (in is hetzelfde als = some): geef de (namen van) klanten met een rekening waarvan het saldo groter is dan het bedrag van een van hun leningen: select customer_name from depositor as d, account as a where d.account_number = a.account_number and balance > some ( select amount from borrower as b, loan as l where b.customer_name = d.customer_name and b.loan_number = l.loan_number ) verschil (in Engels) tussen some en any!! 3.25

some : beperkt gebruik je mag alleen een attribuutwaarde met een subquery vergelijken. dit is OK: select account_number from account where balance > some ( select amount from loan ) dit is niet OK: select customer_name from depositor as d, account as a where d.account_number = a.account_number and some balance > ( select amount from loan ) 3.26 exacte betekenis van some F <comp> some r t r zodat (F <comp> t ) waarbij <comp> <,, >,, =, of is 0 (5 < some 5 6 ) = waar (5 < some (5 = some 0 5 0 5 ) = onwaar ) = waar 0 (5 some 5 ) = waar (want 0 5) (= some) in maar, ( some) not in (lees: 5 < sommige waarden in de tabel) 3.27

verzamelingen vergelijken: all we kunnen =, <>, >, >=, <, <= met all gebruiken (not in is hetzelfde als <> all): geef de (namen van) klanten met een rekening waarvan het saldo groter is dan de bedragen van al hun leningen: select customer_name from depositor as d, account as a where d.account_number = a.account_number and balance > all ( select amount from borrower as b, loan as l where b.customer_name = d.customer_name and b.loan_number = l.loan_number ) vergelijk (in Engels) all en any!! 3.28 exacte betekenis van all F <comp> all r t r (F <comp> t) 0 5 6 (5 < all ) = onwaar (5 < all (5 = all 6 10 4 5 ) = waar 4 (5 all 6 ) = waar (want 5 4 en 5 6) ( all) not in maar, (= all) in ) = onwaar 3.29

test of een subquery-resultaat resultaat leeg is een exists clausule geeft de waarde waar terug als de subquery een niet-leeg resultaat oplevert. exists r r Ø not exists r r = Ø select customer_name from borrower as b where not exists ( select * from depositor as d where d.customer_name = b.customer_name ) 3.30 Opgaven Stel volgende vragen in SQL: 1. geef de namen van klanten die een rekening hebben die ze niet gemeenschappelijk hebben met iemand anders 2. geef de namen van klanten die geen rekening gemeenschappelijk hebben met iemand anders Wat betekent de volgende query: 3. select balance from account where balance > all ( select amount from loan, borrower, customer where loan.loan_number = borrower.loan_number and borrower.customer_name = customer.customer_name and customer_city = Eindhoven ) 3.31

aggregatie-functies in SQL je kunt een berekening uitvoeren over de waarden van een attribuut uit verschillende tupels avg berekent het gemiddelde (van getallen) sum berekent de som (van getallen) min neemt het minimum (van getallen, of alfabetisch eerste bij strings) max neemt het maximum (van getallen, of alfabetisch laatste bij strings) count telt het aantal elementen in de tabel of het groepje de berekening werkt op een lijst, niet een verzameling (dus dubbels blijven behouden) 3.32 voorbeeld van aggregatie geef de som van de saldi van alle rekeningen bij filialen uit Eindhoven: select sum(balance) from account as a, branch as b where a.branch_name = b.branch_name and b.branch_city = Eindhoven geef de naam van de klant(en) met de hoogste lening: select customer_name from borrower as b, loan as l where b.loan_number = l.loan_number and l.amount in ( select max(amount) from loan ) 3.33

aggregatie kan ook in een subquery geef de klanten die meer dan 10000 aan saldo hebben op al hun rekeningen samen select d.customer_name from depositor as d where 10000 < some ( select sum(a.balance) from depositor as dd, account as a where dd.account_number = a.account_number and dd.customer_name = d.customer_name ) 3.34 opletten met scoping regels! geef de klanten, samen met het totaal van de saldi op hun rekeningen select d.customer_name, sum(a.balance) from depositor as d where a.account_number in ( select a.account_number from depositor as dd, account as a where dd.account_number = a.account_number and dd.customer_name = d.customer_name ) dit is dus fout: a wordt gebruikt buiten de scope van de subquery! 3.35

groepjes vormen met group by geef de klanten, samen met het totaal van de saldi op hun rekeningen select d.customer_name, sum(a.balance) from depositor as d, account as a where d.account_number = a.account_number group by d.customer_name we zetten (zie from en where) klanten en hun rekeningen eerst naast elkaar we maken dan groepjes van rijen die bij eenzelfde klant horen we tonen dan de klant en de som van de saldi, berekend per groepje 3.36 groepjes selecteren met having geef de klanten, samen met het totaal van de saldi op hun rekeningen, als dat totaal groter is dan 10000. select d.customer_name, sum(a.balance) from depositor as d, account as a where d.account_number = a.account_number group by d.customer_name having sum(a.balance) > 10000 where werkt op afzonderlijke tupels having werkt op groepjes van tupels 3.37

opgaven Stel de volgende vragen in SQL: 1. geef de klanten met twee of meer rekeningen (doe dit met en zonder group by) 2. geef klanten met meer leningen dan rekeningen Wat betekent volgende query: 3. select sum(a.balance) from account as a, depositor as d, customer as c where a.account_number = d.account_number and d.customer_name = c.customer_name and c.customer_city = Eindhoven 3.38 opgaven (employee database, opg.. 2.1) 16. geef (de namen van) de bedrijven waar geen enkele manager werkt. 17. geef de steden waar geen enkele manager woont. 18. geef (de namen van) de bedienden die meer verdienen dan elke manager. 19. geef (de namen van) de bedienden die meer verdienen dan elke manager die bij het bedrijf van die bediende werkt. 20. geef (de namen van) de bedrijven die alleen maar bedienden uit de vestigingsplaats van het bedrijf hebben. 3.39

opgaven (employee database, opg.. 2.1) 21. geef (de naam van) de manager met het hoogste salaris. 22. geef (de naam van) de bedrijven waar bedienden werken met een manager met het hoogste salaris. 23. geef (de naam van) de bedrijven waar de managers met het hoogste salaris werken. 24. maak een lijst van bedrijfsnamen met per bedrijf het gemiddelde salaris bij dat bedrijf. 25. maak een lijst van (de namen van) de bedrijven waar het gemiddelde salaris hoger is dan 20.000, en geef per bedrijf dat gemiddelde salaris. 3.40 opgaven (employee database, opg.. 2.1) 26. maak een lijst van (de namen van) de bedrijven waar het gemiddelde salaris hoger is dan 20.000. 27. maak een lijst van bedrijfsnamen met per bedrijf de totale salarislast van dat bedrijf. 28. maak een lijst van bedrijven met per bedrijf het aantal personeelsleden. 29. geef de stad waar de meeste managers wonen. 30. maak een lijst van steden met per stad het aantal personeelsleden bij bedrijven die in die stad gevestigd zijn. 31. maak een lijst van steden met per stad het aantal personeelsleden (van bedrijven uit de database) dat in die stad woont. 3.41