TRAINING & CONSULTING Basisopleiding informatica - module 4 ABIS Training & Consulting www.abis.be training@abis.be ABIS 2013, 2014 Document nummer: 1660_02n.fm 19 augustus 2014 Commentaren over deze publicatie kan u sturen naar: ABIS Training & Consulting, Postbus 220, B-3000 Leuven, België Tel.: (+32)-16-245610, Fax: (+32)-16-245639 Copyright ABIS N.V.
INHOUDSTAFEL VOORWOORD V NORMALISATIE 27 VAN BESTAND NAAR TABEL 1 1 Van bestand naar tabel 2 2 Definitie Database 3 3 Hoe data structureren 4 3.1 Hiërarchische structuur 5 3.2 Netwerk-structuur 7 3.3 Relationele structuur 9 3.4 NoSQL 12 RELATIONAL DATABASE MANAGEMENT SYSTEMS 15 1 Wat is een Database Management System (DBMS) 16 2 Taken van het RDBMS (relationele DBMS) 17 3 Overzicht van RDBMS produkten 18 3.1 DB2 19 3.2 Oracle 20 3.3 MySQL 21 3.4 SQL Server / MS SQL 22 3.5 Access 23 4 SQL - Structured Query Language 24 1 Ontwerpen van een relationele data structuur 28 1.1 Analyse 29 1.2 Basisontwerp 30 1.3 Normalisatie 31 2 Relaties tussen tabellen: sleutels 35 3 ERD diagram 38 TABELLEN 41 1 Tabeldefinitie: Overzicht 42 2 Kolomdefinitie 43 2.1 Naam 43 2.2 Datatype 43 2.3 NULL waarden 44 2.4 Standaardwaarden 45 2.5 Beperkingen opleggen 46 3 Integriteit 47 SQL 49 1 Wat is een query? 50 2 Tabellen selecteren: FROM 51 3 Resultaat weergeven: SELECT 52 3.1 Welke kolommen tonen in het resultaat? 52 Basisopleiding informatica - module 4 iii
3.2 Berekende waarden weergeven 53 3.3 Aliassen 54 3.4 DISTINCT 55 4 Gegevens Filteren: WHERE 56 4.1 Basiscondities 57 4.2 Logische operatoren 60 4.3 IN 64 4.4 BETWEEN 66 4.5 LIKE 68 4.6 IS NULL 71 5 Sorteren: ORDER BY 74 6 Tabellen koppelen: JOIN 78 6.1 INNER JOIN 79 6.2 LEFT en RIGHT OUTER JOIN 81 6.3 FULL OUTER JOIN 83 3 Normalisatie 102 4 Tabellen 104 5 SQL 105 5.1 SELECT - FROM 106 5.2 WHERE - Basiscondities 107 5.3 WHERE - Logische operatoren 108 5.4 WHERE - IN en BETWEEN 109 5.5 WHERE - LIKE 110 5.6 WHERE - IS NULL 111 5.7 ORDER BY 112 5.8 Gemengde opdrachten 113 5.9 Joins 114 7 Samenvatting 84 APPENDIX A: TRAINING DATABASE 85 1 ERD - Diagram 86 2 Tabeldefinities 87 2.1 Companies 88 2.2 Persons 89 2.3 Courses 90 2.4 Sessions 91 2.5 Enrolments 92 3 Inhoud van de tabellen 93 OPDRACHTEN 99 1 Van bestand naar tabel 100 2 Database Management Systemen 101 Basisopleiding informatica - module 4 iv
VOORWOORD In deze module bespreken we hoe data opgeslagen en beheerd kan worden in databases. We overlopen enkele manieren waarop data gestructureerd kan worden, waarbij de focus vooral zal liggen op relationele databases. In een 2de deel van de cursus maken we kennis met SQL om gegevens uit de database op te halen. Dmv een massa oefeningen maken we ons deze taal eigen. Qua oefenomgeving zal er vooral met MS-ACCESS gewerkt worden. Database Management Systemen hebben niet enkel als taak om gegevens op te slaan zodat we ze gemakkelijk kunnen opzoeken of manipuleren. Ook beheerstaken worden uitgevoerd. In deze module introduceren we enkele concepten, zoals performantie, locking, versioning, database herstel, auditing en monitoring. In de volgende module zullen enkele van deze zaker dieper worden bekeken in het kader van Oracle en SQL Server. Basisopleiding informatica - module 4 v
Basisopleiding informatica - module 4 vi
Van bestand naar tabel Objectieven : Waarom een database? Definitie database Hoe data structureren ABIS Training & Consulting 1
Van bestand naar tabel 1 Gegevens kunnen op verscheidene manieren bewaard worden: Bestand Spreadsheet Database Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Voor- en nadelen (zoeken, filteren, beheer, beveiliging, consistentie, redundantie, formattering, gebruik door applicaties,...)? Basisopleiding informatica - module 4 ABIS 2
Definitie Database 2 Een database is een georganiseerde collectie van onderling gerelateerde data elementen die gemakkelijk te verwerken is door één of meerdere applicaties voor het terugvinden en beheren van informatie Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Basisopleiding informatica - module 4 ABIS 3
Hoe data structureren 3 Meerdere manieren om data in een database te structureren Hiërarchisch Netwerk Relationeel NoSQL... Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Verschil zit in de manier waarop de links tussen de data gelegd worden en deze data ondervraagd kan worden. Basisopleiding informatica - module 4 ABIS 4
Hiërarchische structuur 3.1 Oudste vorm van database Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Boomstructuur: Ouder-kind relatie Elk record in een database kan weer verwijzen naar een n-aantal andere records Implementaties: IMS, Windows Registry, bestandssysteem (b.v. FAT) Basisopleiding informatica - module 4 ABIS 5
Hiërarchische structuur: voor- en nadelen Voordelen: gemakkelijk te ontwerpen goedkoop om te onderhouden gemakkelijk te beveiligen gelijkaardig aan niet-elektronische data-opslag gemakkelijk doorzoeken, maar enkel indien gesorteerd en als de zoekactie compatibel is met de sortering Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Nadelen: kind kan maar 1 ouder hebben één boom per database, takken hebben onderling geen samenhang niet flexibel voor meer complexe verwijzingen niet alle data is intrinsiek hiërarchisch navigatie is moeilijk (niet-lineair) Basisopleiding informatica - module 4 ABIS 6
Netwerk-structuur 3.2 Geïntroduceerd midden jaren 60 Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Gelijkaardig aan de hiërarchische structuur Verschil: meerdere ouders per kind en links tussen takken mogelijk Creëert many-to-many relaties Implementaties: IDMS, WAN en LAN systemen Basisopleiding informatica - module 4 ABIS 7
Netwerk-structuur: voor- en nadelen Voordelen: meerdere relatie-types kunnen gebruikt worden gemakkelijke datatoegang data-integriteit verzekerd data onafhankelijk van het achterliggende systeem efficiënter dan het corresponderende hiërarchische model Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Nadelen: complex systeem (achter de schermen) moeilijk om structurele wijzigingen door te voeren in het model onoverzichtelijk Basisopleiding informatica - module 4 ABIS 8
Relationele structuur 3.3 Edgar Codd, begin jaren 70 Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Gebaseerd op relationele algebra ( verzamelingenleer ) Geen echte hiërarchie meer tussen de data: platte structuur Elke rij van een tabel bevat gegevens die samenhoren, gerelateerd zijn Tabellen kunnen aan mekaar gelinkt zijn via zgn. sleutels ( keys ) One-to-many relaties Implementaties: Oracle, Sql Server, Access, DB2, MySQL,... Basisopleiding informatica - module 4 ABIS 9
Relationele structuur - Voorbeeld Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren id titel duur dagprijs 1 SQL 1 375 2 JAVA 4 400 id datum locatie cursusnr 1 04-11-2013 Abis Leuven 1 2 23-09-2013 Abis Leuven 2 3 18-11-2013 Min Financiën 2 id voornaam familienaam 1 Mark Stessens 2 Jef Goris 3 An Smets 4 Mieke Schoofs 5 Jos Van Hoof Hoe personen en sessies linken? Basisopleiding informatica - module 4 ABIS 10
Relationele structuur: voor- en nadelen Voordelen: eenvoudige concepten, met theoretische basis geen redundante data niet navigationeel goede security (gebaseerd op inhoud van de data) Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Nadelen: verlies in performantie door doorgedreven normalisatie kolom kan enkel gelijkaardige data bevatten moeilijk om structuur van tabel te wijzigen achteraf (bv kolom middenin toevoegen) bewaren van complexere gegevensstructuren? gebruik van NULL waarden bij afwezigheid van een eigenschap Basisopleiding informatica - module 4 ABIS 11
NoSQL 3.4 Not only SQL Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Beweging gestart in 2009 Bedoeling: moderne web-scale database, Big Data Vrijer gestructureerd, open-source, gedistribueerd Zowel gebruikt voor het opslaan van gewone relationele data als van documenten en andere structuren (b.v. JSON) Implementaties: Hadoop/Hbase, MongoDB,... Basisopleiding informatica - module 4 ABIS 12
NoSQL: voor- en nadelen Voordelen: dynamisch bijvoegen van nieuwe attributen ook niet-atomaire data kan makkelijk opgeslagen worden eenvoudige query-interface directere vertaling tussen data en applicatie snel efficiënter gebruik van geheugen Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Nadelen: TE vrij? geen standaardisatie: heel veel verschillende types, tools,... geen garanties van data-consistentie Basisopleiding informatica - module 4 ABIS 13
Van bestand naar tabel 1. Van bestand naar tabel 2. Definitie Database 3. Hoe data structureren Basisopleiding informatica - module 4 ABIS 14
Relational Database Management Systems Objectieven : Verschil tussen database en DBMS Taken van het DBMS Overzicht van produkten Wat is SQL? ABIS Training & Consulting 15
Wat is een Database Management System (DBMS) 1 Vorig hoofdstuk: LOGISCH zicht op data-opslag Fysiek zit data nog steeds in bestanden Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Database Management System is een tool voor databeheer, en een buffer tussen data en programma s / gebruikers DBMS neemt ook andere taken op zich dan data toegankelijk maken Basisopleiding informatica - module 4 ABIS 16
Taken van het RDBMS (relationele DBMS) 2 Logische datastructuur toegankelijk maken, onafhankelijk van de fysieke opslag / toegangsmethode Integriteit (= consistentie) van de data bewaken Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Gelijktijdige toegang maximaliseren Performantie verhogen door optimalisatie Beveiliging van data (autorisaties) Dataverlies vermijden door o.a. backup / recovery Basisopleiding informatica - module 4 ABIS 17
Overzicht van RDBMS produkten 3 IBM: DB2 (z/os, LUW), Informix Oracle: Oracle, MySQL Microsoft: Access, SQL Server (MS SQL) Ingres, PostGreSQL Sybase (SAP): Adaptive Server Enterprise, IQ Teradata Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Verschillen op basis van OS waarop de database draait waar zitten de files - geheugengebruik soort / hoeveelheid data - concurrency - optimalisatie beheerstaken tools Gelijkenissen: gebruiken gelijkaardige interface (SQL) Basisopleiding informatica - module 4 ABIS 18
DB2 3.1 Eerste versie 1983, nieuwste versie (11) oktober 2013 Drie verschillende produkten op basis van het OS DB2 for z/os: Mainframe DB2 for LUW: Linux, Unix (AIX, Solaris, HP-UX), Windows DB2 for iseries: AS400 Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Maximale tabelgrootte: quasi onbeperkt (afh. v. bestandssysteem) Duur qua licenties - gratis versie voor thuis Extreem krachtig bij complexere systemen, zeer performant Vooral gebruikt door grote (financiële) bedrijven Tools: SPUFI, QMF, Data Studio,... Basisopleiding informatica - module 4 ABIS 19
Oracle 3.2 Eerste versie 1979, nieuwste versie (12c) juni 2013 OS: Windows, Linux, Solaris, AIX, HP-UX Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Maximale tabelgrootte: ongelimiteerd Duur qua licenties - gratis versie voor thuis Extreem krachtig bij complexere systemen, zeer performant Vooral populair bij grotere bedrijven Tools: SQL Developer, Apex, SQL*Plus, Oracle Reports,... Basisopleiding informatica - module 4 ABIS 20
MySQL 3.3 Eerste versie 1995, nieuwste versie (5.6) juli 2013 OS: alle (ook b.v. Symbian, BSD, MacOS,...) Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Open source - goedkoop (of zelfs gratis) Max tabelgrootte: ongelimiteerd (limiet van het bestandssysteem) Eenvoudige set-up voor kleinere databases Vooral populair bij kleinere bedrijven, startups, bedrijven die web applicaties ontwikkelen Tools: MySQL Workbench, PHPmyadmin, commandolijn,... Basisopleiding informatica - module 4 ABIS 21
SQL Server / MS SQL 3.4 Eerste versie 1984 (Sybase), 1992 (Microsoft), nieuwste versie SQL Server 2012 (april 2012) OS: Windows Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Maximale tabelgrootte: 16 TB Goedkoper dan Oracle of DB2, maar beperkter qua grootte, schaalbaarheid,... Gebruikers: Windows / Microsoft-minded bedrijven,... Tools: SQL Server Management Studio, Visual Studio, Reporting Services,... Basisopleiding informatica - module 4 ABIS 22
Access 3.5 Eerste versie 1992, nieuwste versie MS Access 2013 (januari 2013) OS: Windows Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language Tool + DBMS in één product (goede geïntegreerde grafische gebruikersinterface) Een echt DBMS? maximale bestands-grootte: 2GB geen triggers, functies, procedures,... beperkt aantal gelijktijdige gebruikers niet client-server gebaseerd, maar file-server Eerder te gebruiken voor kleine toepassingen Basisopleiding informatica - module 4 ABIS 23
SQL - Structured Query Language 4 Taal waarmee relationele data aangesproken wordt Oorspronkelijk SEQUEL: Structured English QUEry Language Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language 4GL - descriptief en declaratief -> gemakkelijk te schrijven ISO standaard voor alle RDBMS produkten Dialecten! Uniforme taal voor zowel data manipulatie als structuurdefinitie Basisopleiding informatica - module 4 ABIS 24
SQL - onderdelen DQL: Data Query Language select DML: Data Manipulation Language insert update delete merge truncate Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language DDL: Data Definition Language create alter drop rename Basisopleiding informatica - module 4 ABIS 25
SQL - onderdelen (vervolgd) DCL: Data Control Language grant revoke Relational Database Management Systems 1. Wat is een Database Management System (DBMS) 2. Taken van het RDBMS (relationele DBMS) 3. Overzicht van RDBMS produkten 4. SQL - Structured Query Language TCL: Transaction Control Language commit rollback savepoint lock CLIENT - SERVER connect call prepare Basisopleiding informatica - module 4 ABIS 26
Normalisatie Objectieven : Ontwerpen van een relationele database structuur ERD diagrammen Hoe relaties leggen tussen tabellen ABIS Training & Consulting 27
Ontwerpen van een relationele data structuur 1 Data verspreid over meerdere tabellen Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram Tabel: vast aantal kolommen variabel aantal rijen één relatie tussen de gegevens (= vaste betekenis) Tabel: alle gegevens worden voorgesteld door waarden atomaire waarden (geen lijsten) geen dubbele rijen volgorde van rijen niet belangrijk volgorde van kolommen niet belangrijk (maar hun betekenis wel!) Basisopleiding informatica - module 4 ABIS 28
Analyse 1.1 Welke gegevens moeten er allemaal in de tabellen komen? Vb.: Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram Basisopleiding informatica - module 4 ABIS 29
Basisontwerp 1.2 Zet alle gegevens in één grote tabel op basis van de betekenis Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram titel duur datum locatie persoon persoonsgegevens bedrijf bedrijfsgegevens DB2 3 02/03/2013 Abis Leuven Stessens Nieuwstraat MinFinanciën Kunstlaan DB2 3 02/03/2013 Abis Leuven Smets Bondgenotenlaan Belfius Pachecolaan DB2 3 05/05/2013 AbisWoerden Goris Lippenslaan Honda Langerbruggestraat SQL 1 15/08/2013 Min Financiën Schoofs Lippenslaan MinFinanciën Kunstlaan Oracle 3 05/11/2013 Abis Leuven Smets Bondgenotenlaan Belfius Pachecolaan Java 4 05/11/2013 Abis Leuven Van Hoof Steenstraat Honda Langerbruggestraat Wijzigingen (insert, update, delete,...) kunnen consistentie-problemen geven in deze vorm --> NORMALISEREN Basisopleiding informatica - module 4 ABIS 30
Normalisatie 1.3 Stap 1: Cursussen - Inschrijvingen (versie 1) Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram titel duur DB2 3 Oracle 3 SQL 1 Java 4 titel datum locatie persoon persoonsgegevens bedrijf bedrijfsgegevens DB2 02/03/2013 Abis Leuven Stessens Nieuwstraat MinFinanciën Kunstlaan DB2 02/03/2013 Abis Leuven Smets Bondgenotenlaan Belfius Pachecolaan DB2 05/05/2013 AbisWoerden Goris Lippenslaan Honda Langerbruggestraat SQL 15/08/2013 Min Financiën Schoofs Lippenslaan MinFinanciën Kunstlaan Oracle 05/11/2013 Abis Leuven Smets Bondgenotenlaan Belfius Pachecolaan Java 05/11/2013 Abis Leuven Van Hoof Steenstraat Honda Langerbruggestraat Basisopleiding informatica - module 4 ABIS 31
Normalisatie Stap 2: Personen (versie 1) - inschrijvingen (versie 2) Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram persoon persoonsgegevens bedrijf bedrijfsgegevens Stessens Nieuwstraat Min Financiën Kunstlaan Smets Bondgenotenlaan Belfius Pachecolaan Goris Lippenslaan Honda Langerbruggestraat Schoofs Lippenslaan Min Financiën Kunstlaan Van Hoof Steenstraat Honda Langerbruggestraat titel datum locatie persoon DB2 02/03/2013 Abis Leuven Stessens DB2 02/03/2013 Abis Leuven Smets DB2 05/05/2013 Abis Woerden Goris SQL 15/08/2013 Min Financiën Schoofs Oracle 05/11/2013 Abis Leuven Smets Java 05/11/2013 Abis Leuven Van Hoof Basisopleiding informatica - module 4 ABIS 32
Normalisatie Stap 3: Sessies - Inschrijvingen (finale versie) Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram titel datum locatie titel datum persoon DB2 02/03/2013 Abis Leuven DB2 02/03/2013 Stessens DB2 05/05/2013 Abis Woerden DB2 02/03/2013 Smets SQL 15/08/2013 Min Financiën DB2 05/05/2013 Goris Oracle 05/11/2013 Abis Leuven SQL 15/08/2013 Schoofs Java 05/11/2013 Abis Leuven Oracle 05/11/2013 Smets Java 05/11/2013 Van Hoof Basisopleiding informatica - module 4 ABIS 33
Normalisatie Stap 4: Personen (finale versie) - Bedrijven Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram persoon persoonsgegevens bedrijf bedrijf bedrijfsgegevens Stessens Nieuwstraat Min Financiën Min Financiën Kunstlaan Smets Bondgenotenlaan Belfius Belfius Pachecolaan Goris Lippenslaan Honda Honda Langerbruggestraat Schoofs Lippenslaan Min Financiën KBC Brusselsesteenweg Van Hoof Steenstraat Honda Basisopleiding informatica - module 4 ABIS 34
Relaties tussen tabellen: sleutels 2 Primaire sleutel (primary key, PK) = kolom die elke rij in de tabel op een unieke wijze identificeert elke waarde is verschillend waarde mag niet leeg (NULL) zijn (max) 1 PK per tabel gedefinieerd op 1 of meerdere kolommen vaak een artificieel identificatienummer, dat eventueel zelfs automatisch verhoogd wordt Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram Refererende sleutel (foreign key, FK) = kolom in een tabel die verwijst naar een primaire sleutel in een andere (of dezelfde) tabel moet dezelfde definitie (behalve de naam) hebben als de PK waarnaar hij verwijst tabel kan meerdere FKs bevatten Als deze sleutels gedefinieerd zijn, houdt het DBMS de integriteit van de gegevens en hun samenhang in de gaten! Basisopleiding informatica - module 4 ABIS 35
Relaties tussen tabellen persoon persoonsgegevens bedrijf bedrijf bedrijfsgegevens Stessens Nieuwstraat Min Financiën Min Financiën Kunstlaan Smets Bondgenotenlaan Belfius Belfius Pachecolaan Goris Lippenslaan Honda Honda Langerbruggestraat Schoofs Lippenslaan Min Financiën KBC Brusselsesteenweg Van Hoof Steenstraat Honda PK FK Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram Met een artificiële sleutel: persoon persoonsgegevens bedrijfsnr bedrijfsnr bedrijf bedrijfsgegevens Stessens Nieuwstraat 1 1 Min Financiën Kunstlaan Smets Bondgenotenlaan 2 2 Belfius Pachecolaan Goris Lippenslaan 3 3 Honda Langerbruggestraat Schoofs Lippenslaan 1 4 KBC Brusselsesteenweg Van Hoof Steenstraat 3 PK Janssens Kerskstraat NULL FK Basisopleiding informatica - module 4 ABIS 36
Relaties - JOINS JOIN = samenvoegen van 2 of meerdere tabellen op basis van hun refererende en primaire sleutels Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram persoon persoonsgegevens bedrijfnr bedrijf bedrijfsgegevens Stessens Nieuwstraat 1 Min Financiën Kunstlaan Smets Bondgenotenlaan 2 Belfius Pachecolaan Goris Lippenslaan 3 Honda Langerbruggestraat Schoofs Lippenslaan 1 Min Financien Kunstlaan Van Hoof Steenstraat 3 Honda Langerbruggestraat Meerdere types JOINs, in verband met NULL waarden in de FK en/of niet voorkomende waarden van de PK in de FK Basisopleiding informatica - module 4 ABIS 37
ERD diagram 3 ERD = Entiteit - Relatie Diagram Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram Documenteert de relatie tussen de tabellen op een grafische manier Ook gebruikt tijdens de ontwerpfase van de database Tools bestaan om ERDs te vertalen naar tabellen en omgekeerd Verschillende tekenmanieren: UML, Chen, Bachmann,... Basisopleiding informatica - module 4 ABIS 38
ERD - UML UML = Unified Modeling Language Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram Kent verschillende diagrammen, waaronder het klasse diagram MS-Access gebruikt een soortgelijk type diagram Basisopleiding informatica - module 4 ABIS 39
Normalisatie 1. Ontwerpen van een relationele data structuur 2. Relaties tussen tabellen: sleutels 3. ERD diagram Basisopleiding informatica - module 4 ABIS 40
Tabellen Objectieven : Tabellen definiëren Wat zijn NULL-waarden Data-integriteit - sleutels Beperkingen opleggen op kolommen ABIS Training & Consulting 41
Tabeldefinitie: Overzicht 1 Tabel bestaat uit meerdere kolommen Tabellen 1. Tabeldefinitie: Overzicht 2. Kolomdefinitie 3. Integriteit Elke kolom gedefinieerd door: naam datatype NULLs toegelaten? standaardwaarde (optioneel) beperkingen (optioneel) Sleutels (PK en FK) zijn een speciale vorm van beperking Hoe integriteit bewaren -> wat te doen bij insert/update/delete Basisopleiding informatica - module 4 ABIS 42
Kolomdefinitie 2 Naam 2.1 1 woord beginnend met een letter maximum lengte hangt af van het DBMS kies een kolomnaam die duidelijk zegt wat de inhoud is! Tabellen 1. Tabeldefinitie: Overzicht 2. Kolomdefinitie 3. Integriteit Datatype 2.2 elke kolom gekarakteriseerd door datatype en lengte 3 basistypes: - tekst: vaste lengte (char), variabele lengte (varchar) - numeriek: geheel, decimaal,... - chronologisch: datum, tijd, tijdsduur,... binair, LOB, XML,... exacte benaming + implementatie kan DBMS afhankelijk zijn! Basisopleiding informatica - module 4 ABIS 43
NULL waarden 2.3 Is het invullen van een waarde in de kolom verplicht? ja nee -> NULL toegestaan (default) Tabellen 1. Tabeldefinitie: Overzicht 2. Kolomdefinitie 3. Integriteit NULL betekent: onbekende / ontbrekende / zinloze waarde NULL is niet hetzelfde als blanco (lege waarde)! Controverse rond het gebruik van NULLs: logica gebaseerd op 3 waarden (waar / fout / onbekend) meerdere types joins nodig worden genegeerd bij kolomfuncties fysiek geheugen? vertaling nodig indien gelinkt aan applicaties die het begrip NULL niet of slechts beperkt kennen Basisopleiding informatica - module 4 ABIS 44
Standaardwaarden 2.4 Als een veld verplicht is, kan een standaardwaarde (default) worden gedefinieerd Tabellen 1. Tabeldefinitie: Overzicht 2. Kolomdefinitie 3. Integriteit Deze wordt automatisch ingevuld als het veld niet opgegeven werd Kan expliciet opgegeven worden Soms ook een standaard standaardwaarde gekoppeld aan het datatype: blanco s voor tekst 0 voor numeriek nu voor datum/tijd Basisopleiding informatica - module 4 ABIS 45
Beperkingen opleggen 2.5 Mogelijk om validatieregels toe te voegen Tabellen 1. Tabeldefinitie: Overzicht 2. Kolomdefinitie 3. Integriteit Gekoppeld aan een kolom of aan de tabeldefinitie Waarden worden bepaald door een logische expressie Voorbeelden: geslacht in ( V, M ) cursusprijs > 0 accessoireprijs < totale_prijs Geen echte businessregels! Validatieregels moeten beperkt zijn tot een tabelrij ==> kunnen b.v. niet de grootte van een tabel beperken ==> kunnen meerdere tabellen niet koppelen (wel mogelijk m.b.v. triggers, en m.b.v. FKs) Basisopleiding informatica - module 4 ABIS 46
Integriteit 3 DBMS checkt integriteit van de data wanneer sleutels gedefinieerd zijn Tabellen 1. Tabeldefinitie: Overzicht 2. Kolomdefinitie 3. Integriteit Entity integriteit: primaire sleutel moet uniek zijn en mag geen NULLs bevatten Referentiële integriteit: refererende sleutel moet verwijzen naar een correcte waarde uit een primaire sleutel, of gelijk zijn aan NULL Wat bij insert/update/delete? -> ook hiervoor regels gedefinieerd: restrict: foutmelding indien rij weggehaald/gewijzigd waarnaar nog verwijzingen zijn cascade (trapsgewijs bijwerken/verwijderen) -> als rij weggehaald / gewijzigd wordt, worden ook verwijzende rijen verwijderd/gewijzigd set null: verwijzende velden worden op NULL gezet Default gedrag hangt af van DBMS, juiste keuze hangt af van betekenis van de relatie Basisopleiding informatica - module 4 ABIS 47
Tabellen 1. Tabeldefinitie: Overzicht 2. Kolomdefinitie 3. Integriteit Basisopleiding informatica - module 4 ABIS 48
SQL Objectieven : Gegevens zoeken in een tabel Filteren Eenvoudige berekeningen maken Sorteren Tabellen koppelen ABIS Training & Consulting 49
Wat is een query? 1 SELECT haalt data op van 1 of meer tabellen Resultaat is tabel SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Mogelijkheid om gegevens te filteren, groeperen, sorteren, (eenvoudige) berekeningen te maken 6 statements: 5 SELECT -> welke kolommen tonen 1 FROM -> uit welke tabel(len) komen de gegevens 2 WHERE -> filteren (condities) 3 GROUP BY -> groeperen 4 HAVING -> condities op kolomfuncties 6 ORDER BY -> sorteren In deze cursus: SELECT, FROM, WHERE, ORDER BY Basisopleiding informatica - module 4 ABIS 50
Tabellen selecteren: FROM 2 tabel/view specificeren waaruit de data komt select * from persons SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting kan ook vooraf gegaan worden door een schema naam, gescheiden van de tabelnaam d.m.v. een punt select * from tbaccad.tutpersons schema naam is vaak naam van de eigenaar/creator van de tabel Basisopleiding informatica - module 4 ABIS 51
Resultaat weergeven: SELECT 3 Welke kolommen tonen in het resultaat? 3.1 Courses cid cstitle cdur caprice 1000 DB2, An overview 5 550.00 2000 IMS/DB 5 600.00 3000 SAS_ADV 3 550.00 SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting * toont ALLE kolommen select * -> geeft de volledige tabel weer from courses kolommen kiezen, gescheiden door een komma select cstitle, cdur from courses cstitle cdur DB2, An overview 5 IMS/DB 5 SAS_ADV 3 Basisopleiding informatica - module 4 ABIS 52
Berekende waarden weergeven 3.2 Nieuwe kolommen bijvoegen in het resultaat, gebaseerd op berekeningen op bestaande kolommen Operatoren: +, -, *, / SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Gebruik decimale punten, geen komma s Ook scalaire functies kunnen gebruikt worden (zie Module 5) b.v. LOWER(cstitle), SUBSTR(pfname, 1, 1), MONTH(sdate),... Voorbeeld: select cstitle, caprice * cdur * 1.15 from courses cstitle DB2, An overview 3162.5 IMS/DB 2070 SAS_ADV 3162.5 Basisopleiding informatica - module 4 ABIS 53
Aliassen 3.3 (Andere) naam geven aan een kolom uit de resultaat-tabel Keyword: AS SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting AS kan meestal weggelaten worden (niet in MS-ACCESS) Indien meerdere woorden -> dubbele aanhalingstekens toevoegen select cstitle AS titel, caprice*cdur*1.15 AS "totale prijs" from courses titel totale prijs DB2, An overview 3162.5 IMS/DB 2070 SAS_ADV 3162.5 Berekeningen en aliassen in SELECT veranderen de inhoud van de originele tabel NIET Alias ENKEL te gebruiken in SELECT (definitie) en ORDER BY Basisopleiding informatica - module 4 ABIS 54
DISTINCT 3.4 Unieke rijen selecteren op basis van (combinatie) van kolommen DISTINCT = verschillend SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select distinct cdur from courses cdur 5 3 select distinct cdur, caprice from courses cdur caprice 5 550.00 5 600.00 3 550.00 Basisopleiding informatica - module 4 ABIS 55
Gegevens Filteren: WHERE 4 Limiteren van het aantal rijen in het resultaat Specificeert een conditie die waar, vals of onbekend (NULL) is SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Syntax: kolomnaam - OPERATOR - expressie Condities kunnen gecombineerd worden d.m.v. AND, OR en NOT Basisopleiding informatica - module 4 ABIS 56
Basiscondities 4.1 Vergelijkingsoperatoren: = : gelijk aan <> : verschillend van (in sommige DBMS ook!= of ^=) < : strikt kleiner dan <= : kleiner of gelijk aan > : strikt groter dan >= : groter of gelijk aan SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Indien vergeleken wordt met een tekstwaarde -> deze tussen enkele aanhalingstekens zetten! Tekstwaarden zijn in principe hoofdlettergevoelig tenzij datatype dit anders specifeert (standaard bij MS) Numerieke waarden: nooit tussen aanhalingstekens Basisopleiding informatica - module 4 ABIS 57
Basiscondities - Voorbeelden companies cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 2 ASCO OXFORD RG211RY GB 3 COVERDAT NAARDEN 1411 AR NL 4 EDUCA Ltd. LONDON EC2A 2EN GB SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from companies where cono = 2 cono coname cotown cotownno cocountr 2 ASCO OXFORD RG211RY GB select coname, cotown, cocountr from companies where cocountr <> 'GB' coname cotown cocountr ABIS N.V. LEUVEN B COVERDAT NAARDEN NL Basisopleiding informatica - module 4 ABIS 58
Basiscondities - Voorbeelden (vervolg) select * from companies where cono <= 3 cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 2 ASCO OXFORD RG211RY GB 3 COVERDAT NAARDEN 1411 AR NL SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from companies where cotown > 'N' cono coname cotown cotownno cocountr 2 ASCO OXFORD RG211RY GB 3 COVERDAT NAARDEN 1411 AR NL Basisopleiding informatica - module 4 ABIS 59
Logische operatoren 4.2 3 operatoren voor het samenvoegen van condities AND: beide condities moeten voldaan zijn OR: minstens 1 van de condities moet voldaan zijn NOT: negatie (meestal pas gebruikt bij IN, BETWEEN,...) SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Elk deel is een volledige conditie zoals hiervoor (kolomnaam!) Prioriteitsregels: eerst NOT, dan AND, dan OR indien andere volgorde gewenst -> HAAKJES gebruiken! zelfde prioriteit -> van links naar rechts uitgevoerd Basisopleiding informatica - module 4 ABIS 60
Logische operatoren - Voorbeelden companies cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 2 ASCO OXFORD RG211RY GB 3 COVERDAT NAARDEN 1411 AR NL 4 EDUCA Ltd. LONDON EC2A 2EN GB SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from companies where cocountr='gb' AND cono>2 cono coname cotown cotownno cocountr 4 EDUCA Ltd. LONDON EC2A 2EN GB select * from companies where cocountr='gb' OR cono>2 cono coname cotown cotownno cocountr 2 ASCO OXFORD RG211RY GB 3 COVERDAT NAARDEN 1411 AR NL 4 EDUCA Ltd. LONDON EC2A 2EN GB Basisopleiding informatica - module 4 ABIS 61
Logische operatoren - Voorbeelden (vervolg) select coname, cocountr from companies where cocountr='nl' OR cocountr='b' coname cocountr ABIS N.V. B COVERDAT NL SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select coname, cocountr from companies where cocountr='nl' AND cocountr='b' coname cocountr Basisopleiding informatica - module 4 ABIS 62
Logische operatoren - Voorbeelden (vervolg) select * from companies where cocountr='nl' OR cocountr='b' AND cono < 3 cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 3 COVERDAT NAARDEN 1411 AR NL SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from companies where (cocountr='nl' OR cocountr='b') AND cono < 3 cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B Basisopleiding informatica - module 4 ABIS 63
IN 4.3 Verzameling van waarden opsommen Waarden tussen haakjes, gescheiden door komma s SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Vervangt een gecombineerde OR op dezelfde kolom Syntax: kolomnaam IN (waarde1, waarde2, waarde3) Negatie: NOT IN Basisopleiding informatica - module 4 ABIS 64
IN - Voorbeelden companies cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 2 ASCO OXFORD RG211RY GB 3 COVERDAT NAARDEN 1411 AR NL 4 EDUCA Ltd. LONDON EC2A 2EN GB SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from companies where cotown IN ('LEUVEN','LONDON') cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 4 EDUCA Ltd. LONDON EC2A 2EN GB select * from companies where cono NOT IN (1,3,4) cono coname cotown cotownno cocountr 2 ASCO OXFORD RG211RY GB Basisopleiding informatica - module 4 ABIS 65
BETWEEN 4.4 Tussen Syntax: kolomnaam BETWEEN waarde1 AND waarde2 SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Grenswaarden inbegrepen Negatie: NOT BETWEEN Vooral gebruikt voor numerieke waarden en datums (maar kan ook voor tekst) Basisopleiding informatica - module 4 ABIS 66
BETWEEN - Voorbeelden Courses cid cstitle cdur caprice 1000 DB2, An overview 5 550.00 2000 IMS/DB 5 300.00 3000 SAS_ADV 3 600.00 4000 ORACLE, An overview 5 550.00 SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select cstitle, caprice from courses where caprice BETWEEN 300 AND 550 cstitle caprice DB2, An overview 550.00 IMS/DB 300.00 ORACLE, An overview 550.00 select * from courses where cdur NOT BETWEEN 4 AND 5 cid cstitle cdur caprice 3000 SAS_ADV 3 600.00 Basisopleiding informatica - module 4 ABIS 67
LIKE 4.5 Zoeken op tekstwaarden met een bepaald patroon begint met bevat eindigt op SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Wildcards (jokers) gebruikt % : 0 of meer karakters (LET OP: MS-ACCESS gebruikt * ) _ : exact 1 karakter (LET OP: MS-ACCESS gebruikt? ) Syntax: kolomnaam LIKE '%waarde' Negatie: NOT LIKE Let op bij het gebruik van like '%n' (eindigt op n) in sommige DBMSen indien de kolom als vaste breedte (char) gedefinieerd is Gebruik STEEDS een wildcard bij LIKE, NOOIT bij IN!!! Basisopleiding informatica - module 4 ABIS 68
LIKE - Voorbeelden (MS-ACCESS syntax) companies cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 2 ASCO OXFORD RG211RY GB 3 COVERDAT NAARDEN 1411 AR NL 4 EDUCA Ltd. LONDON EC2A 2EN GB SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from companies where cotown LIKE 'N*' cono coname cotown cotownno cocountr 3 COVERDAT NAARDEN 1411 AR NL select * from companies where cotown LIKE '*N*' cono coname cotown cotownno cocountr 1 ABIS N.V. LEUVEN 3000 B 3 COVERDAT NAARDEN 1411 AR NL 4 EDUCA Ltd. LONDON EC2A 2EN GB Basisopleiding informatica - module 4 ABIS 69
LIKE - Voorbeelden (vervolg) select * from companies where coname LIKE '?O*' cono coname cotown cotownno cocountr 3 COVERDAT NAARDEN 1411 AR NL SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from companies where coname NOT LIKE 'A*' cono coname cotown cotownno cocountr 3 COVERDAT NAARDEN 1411 AR NL 4 EDUCA Ltd. LONDON EC2A 2EN GB select * from companies where coname NOT LIKE '*A*' cono coname cotown cotownno cocountr Basisopleiding informatica - module 4 ABIS 70
IS NULL 4.6 Test of een waarde NULL is ( onbekend ) Niet hetzelfde als blanco! Kan b.v. ook voor numeriek of datum SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Syntax: kolomnaam IS NULL Negatie: IS NOT NULL -> waarde is gekend Opgelet: gebruik nooit kolomnaam = NULL!!! Keywoord IS enkel gebruiken in combinatie met NULL NULL kan op verschillende manieren voorgesteld worden (afhankelijk van het DBMS en zelfs van de gebruikte tool) NULL of null of (null) of \N --- Basisopleiding informatica - module 4 ABIS 71
IS NULL - Voorbeelden persons pno plname pfname pfunc 1 Smith John programmer 2 Johnson Paul analyst 3 Jones Mary NULL SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from persons where pfunc IS NULL pno plname pfname pfunc 3 Jones Mary NULL select * from persons where pfunc IS NOT NULL pno plname pfname pfunc 1 Smith John programmer 2 Johnson Paul analyst Basisopleiding informatica - module 4 ABIS 72
IS NULL - Voorbeelden (vervolg) Let op: <> geeft geen rijen terug waarvoor die kolom NULL is!!! select * from persons where pfunc <> PROGRAMMER SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting pno plname pfname pfunc 2 Johnson Paul analyst select * from persons where pfunc <> PROGRAMMER OR pfunc IS NULL pno plname pfname pfunc 2 Johnson Paul analyst 3 Jones Mary NULL Basisopleiding informatica - module 4 ABIS 73
Sorteren: ORDER BY 5 Sorteren op basis van 1 of meerdere kolommen Indien meerdere kolommen: volgorde maakt uit SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Oplopend (ASC: default) of aflopend (DESC) Syntax : ORDER BY kolomnaam1 DESC, kolomnaam2 Aliassen of kolomnummers kunnen gebruikt worden Basisopleiding informatica - module 4 ABIS 74
ORDER BY - Voorbeelden cid cstitle cdur caprice 1000 DB2, An overview 5 550.00 2000 IMS/DB 3 550.00 3000 SAS_ADV 3 600.00 SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from courses order by cdur cid cstitle cdur caprice 2000 IMS/DB 3 550.00 3000 SAS_ADV 3 600.00 1000 DB2, An overview 5 550.00 select * from courses order by cstitle DESC cid cstitle cdur caprice 3000 SAS_ADV 3 600.00 2000 IMS/DB 3 550.00 1000 DB2, An overview 5 550.00 Basisopleiding informatica - module 4 ABIS 75
ORDER BY - Voorbeelden (vervolg) select from * courses order by cdur, caprice cid cstitle cdur caprice 2000 IMS/DB 3 550.00 3000 SAS_ADV 3 600.00 1000 DB2, An overview 5 550.00 SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select * from courses order by caprice, cdur cid cstitle cdur caprice 2000 IMS/DB 3 550.00 1000 DB2, An overview 5 550.00 3000 SAS_ADV 3 600.00 Basisopleiding informatica - module 4 ABIS 76
ORDER BY - Voorbeelden (vervolg) select from * courses order by cdur DESC,caprice cid cstitle cdur caprice 1000 DB2, An overview 5 550.00 2000 IMS/DB 3 550.00 3000 SAS_ADV 3 600.00 SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting select cstitle, cdur, caprice from courses order by 3 cstitle cdur caprice IMS/DB 3 550.00 DB2, An overview 5 550.00 SAS_ADV 3 600.00 Basisopleiding informatica - module 4 ABIS 77
Tabellen koppelen: JOIN 6 Combineren van meerdere tabellen op basis van PK en FK (JOIN-conditie) In het FROM statement SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Meerdere types JOINs ( ivm NULL waarden) INNER JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN Alle kolommen uit de gejoinde tabellen kunnen gebruikt worden in de select Tabellen kunnen een aliasnaam krijgen (ivm leesbaarheid en naamconflicten) Alias verplicht in Access Basisopleiding informatica - module 4 ABIS 78
INNER JOIN 6.1 Bevat enkel die rijen die in beide tabellen een matchende PK - FK combinatie hebben JOIN-conditie in FROM SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Syntax: SELECT * FROM tabel1 t1 INNER JOIN tabel2 t2 ON t1.pk=t2.fk Basisopleiding informatica - module 4 ABIS 79
INNER JOIN - Voorbeeld Companies cono coname cotownno cotown cocountr 1 ABIS 3000 LEUVEN B 2 ESCON 8200 GENT B 3 FLYGT 1200 TERNAT B SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Persons pno pfname pa_cono 1 MARGOT 2 2 CHARLES 3 4 JOHN 2 5 PAUL (null) Geef voornaam en bedrijfsnaam van elke persoon select pfname, coname from persons p inner join companies c on p.pa_cono=c.cono Resultaat: pfname MARGOT CHARLES JOHN coname ESCON FLYGT ESCON Basisopleiding informatica - module 4 ABIS 80
LEFT en RIGHT OUTER JOIN 6.2 LEFT OUTER JOIN: ook rijen uit LINKSE tabel die geen match hebben in rechtse tabel worden meegenomen RIGHT OUTER JOIN: ook rijen uit RECHTSE tabel die geen match hebben in linkse tabel worden meegenomen SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting PAUL,---- MARGOT,ABIS CHARLES,XEROX JOHN,IBM ----,APPLE LEFT INNER RIGHT Persons Companies pno pfname pa_cono cono coname cocountr 1 MARGOT 1 1 ABIS B 2 CHARLES 2 2 XEROX (null) 4 JOHN 5 5 IBM NL 5 PAUL (null) 6 APPLE B Basisopleiding informatica - module 4 ABIS 81
LEFT en RIGHT OUTER JOIN - Voorbeelden select pfname, coname from persons left outer join companies on pa_cono=cono Resultaat SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting pfname MARGOT CHARLES JOHN PAUL coname ABIS XEROX IBM (null) select pfname, coname from persons right outer join companies on pa_cono=cono Resultaat pfname MARGOT CHARLES JOHN (null) coname ABIS XEROX IBM APPLE Basisopleiding informatica - module 4 ABIS 82
FULL OUTER JOIN 6.3 Ook alle niet matchende rijen worden meegenomen Combinatie van LEFT en RIGHT outer join Voorbeeld select pfname, coname from persons full outer join companies on pa_cono=cono SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting Resultaat pfname MARGOT CHARLES JOHN PAUL (null) coname ABIS XEROX IBM (null) APPLE FULL OUTER JOIN wordt niet ondersteund in Access Basisopleiding informatica - module 4 ABIS 83
Samenvatting 7 SELECT -> welke kolommen tonen in resultaat * -> alles col1, col2 -> kolomnamen met komma s col1, col1*col2 AS hoofding -> berekende waarde, aliassen DISTINCT col1,col2 -> unieke waarden SQL 1. Wat is een query? 2. Tabellen selecteren: FROM 3. Resultaat weergeven: SE- LECT 4. Gegevens Filteren: WHERE 5. Sorteren: ORDER BY 6. Tabellen koppelen: JOIN 7. Samenvatting FROM -> tabel(len) waaruit de data komt tabelnaam1 inner join tabelnaam2 on fk_col=pk_col WHERE -> condities op rijniveau =, <>, <, >, <=, >= -> basisoperatoren AND, OR, NOT -> logische operatoren col1 (NOT) IN ( val1, val2, val3 ) -> lijst col1 (NOT) BETWEEN val1 AND val2 -> tussen col1 (NOT) LIKE %val% -> begint met / bevat col1 IS (NOT) NULL -> nulls ORDER BY -> sorteren op kolom uit resultaat (select) col1 DESC, col 2 -> kolommen, DESC = aflopend 3, hoofding (niet in ACCESS) -> kolomnummer uit select, alias Basisopleiding informatica - module 4 ABIS 84
Appendix A: Training Database Objectieven : Documentatie van de database gebruikt in de oefeningen ABIS Training & Consulting 85
ERD - Diagram 1 Appendix A: Training Database 1. ERD - Diagram 2. Tabeldefinities 3. Inhoud van de tabellen Basisopleiding informatica - module 4 ABIS 86
Tabeldefinities 2 De training database bestaat uit 5 tabellen: 1. COURSES 2. PERSONS 3. COMPANIES 4. SESSIONS 5. ENROLMENTS Appendix A: Training Database 1. ERD - Diagram 2. Tabeldefinities 3. Inhoud van de tabellen Deze database is een voorbeeld van de administratie van het departement TRAINING. Basisopleiding informatica - module 4 ABIS 87
Companies 2.1 KEY COLNO NAME COLTYPE LENGTH SCALE NULLS DEFAULT ------------------------------------------------------------------ PK 1 CONO SMALLINT - - N - 2 CONAME CHAR 45 - N - 5 COTOWN CHAR 45 - N - 6 COTOWNNO CHAR 10 - Y NULL 7 COCOUNTR CHAR 4 - Y NULL 8 COTEL CHAR 16 - Y NULL 9 COVAT CHAR 11 - Y NULL 10 COBANKNO CHAR 14 - Y NULL Appendix A: Training Database 1. ERD - Diagram 2. Tabeldefinities 3. Inhoud van de tabellen Semantiek: CONO: (artificiële PK), bevat het bedrijfsnummer CONAME: naam van het bedrijf COTOWN: plaats waar het bedrijf gevestigd is COTOWNNO: postcode COCOUNTR: landcode (B,NL,D of GB) COTEL: telefoonnummer van het bedrijf COVAT: BTW nummer COBANKNO: bankrekeningnummer Basisopleiding informatica - module 4 ABIS 88
Persons 2.2 KEY COLNO NAME COLTYPE LENGTH SCALE NULLS DEFAULT ------------------------------------------------------------------ PK 1 PNO SMALLINT - - N - 2 PLNAME CHAR 40 - N - 3 PFNAME VARCHAR 15 - Y NULL 4 PFUNC CHAR 20 - Y NULL FK(N) 5 PA_CONO SMALLINT - - Y NULL 6 PADEPT CHAR 30 - Y NULL 8 PSEX CHAR 1 - Y NULL Appendix A: Training Database 1. ERD - Diagram 2. Tabeldefinities 3. Inhoud van de tabellen Semantiek: PNO: (artificiële PK), bevat het persoonsnummer PLNAME: familienaam PFNAME: voornaam PFUNC: functie van de persoon PA_CONO: FK naar COMPANIES, bedrijf waar de persoon werkt PADEPT: departement in het bedrijf waar de persoon werkt PSEX: geslacht van de persoon, man ( M ) of vrouw ( F ) Basisopleiding informatica - module 4 ABIS 89