13 (Geavanceerde) Select instructie : Varia.........................Fout! Bladwijzer niet gedefinieerd.
13.1 Order by............................................................................ Fout! Bladwijzer niet gedefinieerd.
13.2 Union ................................................................................ Fout! Bladwijzer niet gedefinieerd.
13.3 Intersect............................................................................ Fout! Bladwijzer niet gedefinieerd.
13.4 Except ............................................................................... Fout! Bladwijzer niet gedefinieerd.
13.5 Select top Fout! Bladwijzer niet gedefinieerd.
14 Insert, Update, Delete ...................................................Fout! Bladwijzer niet gedefinieerd.
14.1 Insert into Fout! Bladwijzer niet gedefinieerd.
14.1.1 Versie 1 Fout! Bladwijzer niet gedefinieerd.
14.1.2 Versie 2 Fout! Bladwijzer niet gedefinieerd.
14.2 Select into Fout! Bladwijzer niet gedefinieerd.
14.3 Update Fout! Bladwijzer niet gedefinieerd.
14.4 Delete from Fout! Bladwijzer niet gedefinieerd.
1 Inleiding
SQL (Structured Query Language) is een databasetaal waarin opdrachten geformuleerd kunnen worden. Deze opdrachten kunnen door een databasemanagement system (DBMS) verwerkt worden.
1.1 Database, datamodel, DBMS en databasetaal
Het woord database wordt voor verschillende begrippen gebruikt:
• De opgeslagen gegevens als zodanig (database).
• De wijze waarop de gegevens zijn opgeslagen (datamodel).
• De software waarmee databases kunnen worden aangemaakt en benaderd (Database management systeem of DBMS).
Een database, gegevensbank of databank is een digitaal opgeslagen archief, ingericht met het oog op flexibele raadpleging en gebruik. Databases spelen een belangrijke rol voor het archiveren en actueel houden van gegevens bij onder meer de overheid, financiële instellingen en bedrijven, in de wetenschap, en worden op kleinere schaal ook privé gebruikt.
Een database moet aan de volgende minimale voorwaarden voldoen om als database gezien te worden:
• Gegevens moeten eenvoudig kunnen worden opgeslagen.
• Gegevens moeten eenvoudig kunnen worden opgezocht en doorzocht.
• Gegevens moeten gewijzigd kunnen worden.
• Gegevens moeten verwijderd kunnen worden zonder dat dat de werking van dat systeem nadelig beïnvloedt.
Met een datamodel (of datamodel of gegevensmodel) wordt beschreven hoe de gegevens in een informatiesysteem gestructureerd zijn. We onderscheiden een conceptueel datamodel en het fysieke datamodel.
Een conceptueel datamodel (of conceptueel schema of conceptueel gegevensmodel) definieert welke gegevens in een informatiesysteem vastgelegd kunnen worden, hoe deze gegevens gestructureerd zijn en wat de verbanden zijn tussen die gegevens. Een conceptueel datamodel ligt steeds aan de basis van een in de werkelijkheid gerealiseerde implementatie en is in feite het hoog-niveauontwerp van een (doorgaans relationele) databank (of database).
Het fysieke datamodel beschrijft de manier waarop gegevens in een database zijn opgeslagen. Elke database heeft zijn eigen datamodel.
Een DBMS zal nooit uit zichzelf de gegevens in een database wijzigen of verwijderen. Iemand of iets zal het DBMS daartoe de opdracht moeten geven. Dit kan u zijn, als gebruiker, maar het kan ook een programma zijn. In het 2° geval is het programma de gebruiker. Het DBMS (systeem) waar we dit jaar kennis mee zullen maken is MS SQL Server.
Met behulp van speciale talen worden opdrachten aan een DBMS gegeven. Dit soort talen wordt databasetalen genoemd. Opdrachten worden door gebruikers ingevoerd en door het DBMS verwerkt. Elk DBMS, van welke fabrikant dan ook, bezit een databasetaal. Sommige systemen hebben zelfs meer dan 1 databasetaal. Tussen al die talen bestaan verschillen. Deze verschillende talen zijn te verdelen in groepen. Eén van deze groepen wordt gevormd door de relationele databasetalen.
De belangrijkste relationele databasetaal is SQL (Structured Query Language): deze wordt door nagenoeg alle DBMS (systemen) ondersteund. Naast de standaard SQL breiden DBMS-fabrikanten doorgaans de taal nog uit met eigen specifieke opdrachten (die dan doorgaans niet uitwisselbaar zijn tussen de verschillende DBMS systemen).
Een andere belangrijke taak van een DBMS is het handhaven van de integriteit van de databasegegevens. Hiermee wordt ten eerste bedoeld dat het DBMS moet zorgen dat databasegegevens altijd voldoen aan regels die in de werkelijkheid gelden. Als bv een werknemer maar voor 1 afdeling tegelijkertijd mag werken, mag nergens in de database geregistreerd kunnen worden dat een bepaalde werknemer voor 2 of meer afdelingen werkt. Ten tweede wordt met integriteit bedoeld dat 2 verschillende databasegegevens elkaar niet tegenspreken (dit wordt ook wel consistentie van gegevens genoemd). Elk DBMS kent instructies waarmee integriteitregels gespecificeerd kunnen worden.
1.2 Het Relationele Model
1.2.1
Tabel, kolom en rij
Gegevens in een relationele database kunnen we maar op 1 manier opslaan: in tabellen. De officiële naam voor tabel is eigenlijk relatie. Van deze naam stamt ook de term relationeel model af. We hebben echter voor de term tabel gekozen, omdat deze binnen SQL gebruikt wordt. Hieronder staat een voorbeeld van een tabel: de KLANT-tabel. Deze tabel bevat gegevens over 4 klanten, leden van een bibliotheek.
KLANT_ID, KLANTNAAM en PLAATS zijn de namen van de kolommen in de tabel. De klant_id-kolom bevat de waarden 1, 2 , 3 en 4. Deze verzameling waarden wordt ook wel de populatie van de
klant_id kolom genoemd. De klant-tabel bevat 4 rijen, 1 voor elke klant.
Een tabel heeft 2 speciale eigenschappen:
• De kruising van een rij en een kolom kan maar 1 waarde bevatten.
• De rijen in een tabel hebben geen specifieke volgorde. Men kan dus niet spreken van de 1° rij, de laatste drie of de volgende rij. De inhoud van een tabel dient werkelijk beschouwd te worden als een verzameling rijen in de ware zin van het woord.
1.2.2 Integriteitsregel
De inhoud van een tabel behoort meestal aan bepaalde regels te voldoen, de zogenaamde integriteitregels. 2 voorbeelden van integriteitregels zijn: het spelersnummer van een speler mag niet negatief zijn, en twee spelers mogen niet hetzelfde spelersnummer hebben.
Integriteitregels behoren door een relationeel database management systeem (RDBMS) gecontroleerd te worden. Elke keer nadat de inhoud van een tabel gemuteerd is, behoort het RDBMS te controleren of de nieuwe gegevens aan de geldende integriteitregels voldoen. Dit is duidelijk een taak van RDBMS. De integriteitregels moeten dan wel eerst gespecificeerd worden, zodat ze bekend zijn.
Integriteitregels kunnen allerlei vormen hebben. Een aantal komt in de praktijk zo vaak voor dat ze speciale namen hebben gekregen: primaire-sleutel, kandidaat sleutel, alternatieve-sleutel en refererende-sleutel.
1.2.3 Primaire-sleutel
De primaire-sleutel van een tabel is een kolom uit die tabel (of een combinatie van een aantal kolommen) die gebruikt kan worden als unieke identificatie voor de rijen in die tabel. M.a.w.: 2 verschillende rijen in een tabel mogen nooit in de primaire sleutel dezelfde waarde hebben en in elke rij moet de primaire sleutel altijd 1 waarde hebben. De KLANT_ID-kolom in de bovenstaande KLANTtabel kunnen we beschouwen als de primaire sleutel van die tabel. 2 klanten mogen dus nooit hetzelfde nummer hebben en er zal nooit een klant mogen zijn zonder klant_id.
1.2.4 Kandidaat-sleutel
Sommige tabellen bezitten meer dan 1 kolom (of combinatie van kolommen) die aangewezen zou kunnen worden als primaire sleutel. Zij bezitten allemaal de eigenschappen van een primaire sleutel. Deze kolommen (of combinatie van kolommen) worden kandidaat-sleutels genoemd. Slechts 1 daarvan wordt echter aangewezen als de primaire-sleutel. Een tabel heeft dus altijd minimaal een kandidaat-sleutel.
Als we ervan uitgaan dat in de KLANT-tabel de KLANTNAAM met PLAATS van elke klant uniek is, dan is deze combinatie ook een kandidaat-sleutel. Deze combinatie van 2 kolommen hadden we dus ook kunnen aanwijzen als primaire-sleutel.
1.2.5 Alternatieve-sleutel
Een kandidaat-sleutel die niet de primaire-sleutel van een tabel vormt, wordt een alternatievesleutel genoemd. Men kan dus stellen dat voor een tabel 0 of meer alternatieve-sleutels gedefinieerd kunnen zijn. Het begrip kandidaat-sleutel is dus een verzamelnaam voor alle primaire- en alternatieve-sleutels. De kolommen KLANTNAAM met PLAATS uit het vorige voorbeeld zouden bv een alternatieve-sleutel kunnen zijn.
1.2.6
Refererende-sleutel
Een refererende sleutel is een kolom (of combinatie van kolommen) in een tabel waarvan de populatie een deelverzameling is van de populatie van de primaire sleutel van een tabel. Andere benamingen voor refererende sleutel zijn: verwijzende-sleutel, vreemde-sleutel, foreign key of referential key.
Veronderstel dat er naast de KLANT-tabel ook een UITLEEN-tabel bestaat. Als de primaire sleutel van deze tabel nemen we de UITLNR-kolom. De KLANT_ID-kolom in deze tabel stelt de klant voor die een boek komt uitlenen. De populatie van deze kolom is een deelverzameling van de populatie van de KLANT_ID-kolom in de KLANT-tabel. KLANT_ID in UITLEEN wordt een refererende sleutel genoemd.
U ziet gelijk hoe we 'koppelingen' realiseren tussen 2 tabellen. We doen dit door ook in de UITLEENtabel de KLANT_ID-kolom op te nemen. Hiermee hebben we een koppeling met de KLANT_ID-kolom van de KLANT-tabel gelegd.
1.3 Wat is SQL?
SQL is een relationele databasetaal. De taal bevat onder andere instructies voor het invoeren, wijzigen, verwijderen, raadplegen en beveiligen van gegevens. We noemen SQL een relationele databasetaal, omdat het met gegevens omgaat volgens de regels gedefinieerd in het relationele model. Al is SQL geen DBMS, toch zullen we voor de eenvoud in deze cursus onder SQL zowel de taal als het DBMS verstaan. Alleen op die plaatsen waar dat nodig is zal een onderscheid gemaakt worden.
Omdat SQL een relationele databasetaal is, wordt zij geschaard onder de niet-procedurele databasetalen. Met niet-procedureel wordt bedoeld dat gebruikers met behulp van instructies slechts hoeven op te geven met welke gegevens zij willen werken. Zij hoeven niet aan te geven hoe die gegevens één voor één moeten worden benaderd. Talen als C#, COBOL en Java zijn voorbeelden van procedurele talen.
SQL is op 2 manieren te gebruiken. Ten eerste kan het interactief worden gebruikt: een SQL instructie wordt (in het correcte programma) ingetypt en direct verwerkt. Het resultaat is ook onmiddellijk zichtbaar. Wij zullen deze manier gebruiken om u de basisprincipes van SQL aan te leren. Interactieve SQL is bedoeld voor de ontwikkelaars van applicaties en voor die eindgebruikers die zelf databases willen benaderen.
De tweede gebruikswijze wordt embedded SQL genoemd. SQL-instructies zijn dan opgenomen (embedded) in een programma die in een andere programmeertaal geschreven is. Resultaten van SQL-instructies zijn in dit geval niet direct zichtbaar voor de gebruiker, maar worden door het omhullende programma bewerkt. Embedded SQL wordt voornamelijk gebruikt in programma's die voor eindgebruikers ontwikkeld zijn. Deze eindgebruikers hoeven dan geen SQL-instructies te leren, maar krijgen bv eenvoudige menu's en schermen te zien.
We zullen in de cursussen programmeren en web development van deze interactieve mogelijkheden volop gebruik maken.
1.4 De markt van SQL-producten
De taal SQL is al in zeer vele producten op één of andere wijze geïmplementeerd. SQL-producten zijn verkrijgbaar voor alle besturingssystemen en op alle soorten machines, van de kleinste PC tot het grootste mainframe. We beperken ons tot een kort overzicht van de meest gebruikte SQL-producten:
• SQL Server (Microsoft) http://www.microsoft.com/sqlserver/en/us/default.aspx
Bij zowat alle moderne programmeertalen wordt de mogelijkheid geboden SQL-instructies op te nemen in de programma’s. De systemen werken transparant: d.w.z. onafhankelijk van de database die gebruikt wordt. Als u bv een C#-programma maakt, dan kan u SQL-instructies lanceren van uit dit programma op databases van om het even welk type (MDB, DBF, ODBC, …). Een interessante trend bij deze programmeertalen is de mogelijkheid alle databasesystemen te gaan beschouwen als ODBC: dit heeft als voornaamste voordeel dat, wanneer het databasesysteem vervangen wordt, er aan de code van de programma’s niets meer hoeft gewijzigd te worden.
Ter info: De SQL Standaard
Bron : wikipedia http://en.wikipedia.org/wiki/SQL
Year Name Alias
1986 SQL-86 SQL-87 First formalized by ANSI.
Comments
1989 SQL-89
1992 SQL-92
FIPS1271
Minor revision that added integrity constraints, adopted as FIPS 127-1.
SQL2, FIPS 1272
1999 SQL:1999 SQL3
Major revision (ISO 9075), Entry Level SQL-92 adopted as FIPS 127-2.
2003 SQL:2003
Added regular expression matching, recursive queries (e.g. transitive closure), triggers, support for procedural and control-of-flow statements, non-scalar types (arrays), and some object-oriented features (e.g. structured types). Support for embedding SQL in Java (SQL/OLB) and vice versa (SQL/JRT).
Introduced XML-related features (SQL/XML), window functions, standardized sequences, and columns with autogenerated values (including identity-columns).
Databanken 1 11
2006 SQL:2006
2008 SQL:2008
2011 SQL:2011
2016 SQL:2016
2019 SQL:2019
2023 SQL:2023
ISO/IEC 9075-14:2006 defines ways that SQL can be used with XML. It defines ways of importing and storing XML data in an SQL database, manipulating it within the database, and publishing both XML and conventional SQL-data in XML form. In addition, it lets applications integrate queries into their SQL code with XQuery, the XML Query Language published by the World Wide Web Consortium (W3C), to concurrently access ordinary SQL-data and XML documents.[35]
Legalizes ORDER BY outside cursor definitions. Adds INSTEAD OF triggers, TRUNCATE statement,[36] FETCH clause.
Adds temporal data (PERIOD FOR)[37] (more information at: Temporal database#History). Enhancements for window functions and FETCH clause.[38]
Adds Part 15, multidimensional arrays (MDarray type and operators).
Adds data type JSON (SQL/Foundation); Adds Part 16, Property Graph Queries (SQL/PGQ)
2 MS SQL Server 2022
2.1 Installatie
Voor de installatie van SQL Server 2022 verwijzen we naar het filmpje die te vinden is op Toledo.
2.2 Configuratie
2.2.1
SQL server configuration manager
Sql server draait als een service op je computer. Je kan deze beheren via Microsoft SQL server 2022 configuration manager. Dit start je op met SQL Server 2022 Configuration Manager
Daar zien we onder de server services dat deze draait.
Na onze installatie zie je onder meer volgende services:
• SQL Server (VIVES), de benoemde instantie van de SQL Server, deze is standaard actief;
• SQL Server Agent (nutteloos want je kunt de service niet starten);
• SQL Server Browser levert de interface met het netwerk.
Op één computer kunnen tot 16 instanties van SQL Server Express draaien. Zij bevatten dan elk hun eigen databanken, met hun eigen logins en gebruikers en hun eigen beveiligingscontext.
De SQL-browser start je enkel als de SQL Server(s) van de computer bereikbaar moeten zijn over het netwerk.
2.2.2
SQL-server management studio
Je databanken zelf beheer je via deze tool. Je kan deze beheren via SQL server management studio. Je start deze op met het commando SSMS.
Met SQL Server Management Studio Express kun je onder meer:
Eerst wordt gevraagd om je aan te melden. Je kiest voor SQL-server authentication, met de gebruikersnaam en paswoord die ingegeven zijn tijdens de installatie.
Zo krijg je het eigenlijke beginscherm.
2.2.3
Koppelen van een bestaande databank
We gaan nu de databanken die we nodig hebben koppelen aan de server instantie. Voor deze cursus hebben we 3 databanken nodig (Deze zijn beschikbaar op de leeromgeving):
• Northwind
• Bibliotheek
• Bier
Voor we dit kunnen doen, moeten we eerst de bestanden kopiëren naar de juiste map: