In de huidige wereld van toenemende digitalisering, big data en cloud computing, is databeheer een van de belangrijkste vaardigheden die een software-engineer kan hebben. Daartoe is SQL een van de krachtigste databasetools.
SQL (Structured Query Language) is de standaard programmeertaal die wordt gebruikt om gegevensstructuurobjecten te manipuleren. Ze werken op gegevens die zijn opgenomen in een relationeel databasebeheersysteem (RDBMS). Enkele bekende RDBMS zijn MySQL en PostgreSQL.
In deze handleiding leer je over de subsets van de SQL-taal en hoe je enkele fundamentele SQL-commando's gebruikt, zoals SELECT
, INSERT
, UPDATE
, en DELETE
.
Subsets van SQL
De onderstaande lijst bevat de verschillende taalsubsets van verschillende SQL-opdrachten. Elke subset heeft zijn eigen functie en doel.
- Taal voor gegevensdefinitie (DDL):Hiermee kunt u definities van databaseschema's maken, verwijderen en bijwerken (namelijk tabellen en indexen), zonder de gegevens in de databasetabellen daadwerkelijk te manipuleren.
- Taal voor gegevensquery (DQL):DQL wordt gebruikt om gegevens uit de database op te halen met behulp van de
SELECT
verklaring. - Taal voor gegevensmanipulatie (DML):Deze subtaal maakt gegevensmanipulatie in de database mogelijk met behulp van de
INSERT
,UPDATE
, enDELETE
verklaringen.
Deze handleiding gebruikt een voorbeelddatabase voor een school om de SQL-opdrachten voor elke hierboven vermelde subset verder te demonstreren. De schooldatabase heeft verschillende tabellen, voor studenten, cursussen, cijfers, enzovoort. De definitie van de Student
tabel bevat kolommen voor het SSNumber
van de leerling , Firstname
, en Lastname
, en de definitie van de CourseTaken
tabel bevat kolommen voor SSNumber
, CourseId
, NumericGrade
, en YearTaken
.
Het voorbeeld gaat ervan uit dat er drie studenten in de school zijn, die elk twee cursussen hebben voltooid. De voorbeeldgegevens worden weergegeven in de onderstaande tabel:
SSNumber | Achternaam | Voornaam | CourseId | NumericGrade | YearTaken |
---|---|---|---|---|---|
111111111 | Smith | Jan | CSC101 | 98 | 2021 |
111111111 | Smith | Jan | ENG101 | 95 | 2022 |
222222222 | Jones | Maria | CSC101 | 100 | 2022 |
222222222 | Jones | Maria | EEE101 | 75 | 2022 |
333333333 | Hansen | Robert | POL101 | 92 | 2021 |
333333333 | Hansen | Robert | SOC103 | 84 | 2022 |
Tabellen maken, wijzigen en neerzetten met SQL-opdrachten
Gebruik vanaf de opdrachtregel de CREATE TABLE
commando gevolgd door de naam van de tabel en de tabelgegevens. De onderstaande opdracht maakt de Student
tafel.
CREATE TABLE Student (
SSNumber CHAR(9) NOT NULL,
LastName VARCHAR(30) NOT NULL,
FirstName VARCHAR(20) NOT NULL
);
De haakjes omsluiten de tabelgegevens, te beginnen met een kolom die de gegevens van elke rij labelt. De volgende kolom geeft het gegevenstype aan dat deze rij bevat. CHAR
geeft een stringgegevenstype met een vaste lengte aan en VARCHAR
geeft een gegevenstype van een tekenreeks met variabele lengte aan. In de laatste kolom, de NOT NULL
attribuut zorgt ervoor dat een record niet aan de tabel kan worden toegevoegd als een van de NOT NULL
kolommen hebben geen gegevens die eraan zijn gekoppeld.
Opmerking De CREATE TABLE
statement wordt gescheiden door een puntkomma (;), hoewel het mogelijk is dat sommige commerciële relationele databasesystemen dat scheidingsteken niet nodig hebben.
Opmerking Tenzij anders vermeld, werken alle databasecommando's die in deze handleiding worden gedemonstreerd goed op zowel MySQL en PostgreSQL .
De CourseTaken
maken tabel, voer dan het volgende commando uit:
CREATE TABLE CourseTaken (
SSNumber CHAR(9) NOT NULL,
CourseId CHAR(6) NOT NULL,
NumericGrade INT NOT NULL
);
De YearTaken
kolom is opzettelijk niet opgenomen in de CourseTaken
tabel om het gebruik van de ALTER TABLE
te demonstreren opdracht. Om de YearTaken
toe te voegen kolom in de CourseTaken
tabel, hoeft u de CourseTaken
. niet te laten vallen tafel geheel. In plaats daarvan kunt u de DDL ALTER TABLE
. gebruiken opdracht. Het volgende commando verandert de CourseTaken
tabel door de ontbrekende kolom aan de tabel toe te voegen.
ALTER TABLE CourseTaken
ADD (YearTaken INT NOT NULL);
De bovenstaande opdracht volgt een vergelijkbare syntaxis als voorheen. Het vereist de tabelnaam en drie argumenten:rijnaam, rijgegevenstype en NOT NULL
attribuut. Als u de CourseTaken
. wilt verwijderen tafel volledig, geef de DDL DROP TABLE
uit commando gevolgd door de tabelnaam.
DROP TABLE CourseTaken;
Let op Als u een tabel laat vallen, worden alle gegevens in de tabel verwijderd.
Gegevens invoegen in een tabel in SQL
Om de gegevens in de tabel in te voegen, gebruikt u de SQL INSERT INTO
uitspraak. Om deze opdracht aan te roepen, geeft u de tabelnaam en de lijst met rijnamen (tussen haakjes) op waarin u de gegevens wilt invoegen. Dit wordt gevolgd door de VALUES
trefwoord en de werkelijke waarden (tussen haakjes) die u wilt invoegen. De waarden worden ingevoegd in de rijen in de volgorde waarin ze worden aangeroepen.
Opmerking
- SQL-commando's kunnen over regels worden verdeeld. Het einde van het SQL-commando wordt begrensd door een puntkomma (
;
).- De karaktergegevens worden gescheiden door een apostrof voor openen en sluiten (
‘
), terwijl numerieke gegevens dat niet zijn.
De volgende INSERT
commando's voegen drie rijen in de Student
tafel. Deze commando's gebruiken meerdere INSERT
verklaringen.
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('111111111', 'Smith', 'John');
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('222222222', 'Jones', 'Mary');
INSERT INTO Student (SSNumber, LastName, FirstName) VALUES
('333333333', 'Hansen', 'Robert');
Op dezelfde manier kunt u ook meerdere rijen in de tabel invoegen in een enkele SQL-query, zoals hieronder weergegeven:
INSERT INTO CourseTaken
(SSNumber, CourseId, NumericGrade, YearTaken)
VALUES
('111111111', 'CSC101', 98, 2021),
('111111111', 'ENG101', 95, 2022),
('222222222', 'CSC101', 100, 2022);
OpmerkingU kunt de
INSERT INTO
. gebruiken commando op dezelfde manier in PostgreSQL om rijen aan de tabel toe te voegen. Zorg ervoor dat de waarden overeenkomen met de volgorde van de kolommen in de tabeldefinitie.INSERT INTO student VALUES ('111111111', 'Smith', 'John');
Gegevens uit een tabel verwijderen
Om gegevens uit een tabel te verwijderen, gebruikt u de SQL DELETE FROM
uitspraak. Gebruik de WHERE
clausule om de voorwaarde te specificeren, en als er meer dan één voorwaarde is, gebruik dan de AND
clausule samen met WHERE
.
Het volgende commando verwijdert bijvoorbeeld een record uit de CourseTaken
tabel met SSNumber 333333333
en CourseId POL101
.
Let op Als u de WHERE
. weglaat clausule worden alle records in de tabel verwijderd.
DELETE FROM CourseTaken WHERE SSNumber = '333333333' AND CourseId = 'POL101';
SQL-opdracht om gegevens in een tabel bij te werken
Om het bestaande record in een tabel bij te werken, gebruikt u de SQL UPDATE
opdracht. De SET
clausule wordt gebruikt om een nieuwe waarde in te stellen (bij te werken) voor een bepaalde kolom en de WHERE
clausule wordt gebruikt om de geselecteerde rijen bij te werken.
De volgende opdracht werkt bijvoorbeeld de NumericGrade
. bij kolom van de CourseTaken
tabel voor records met SSNumber 222222222
en CourseId EEE101
.
UPDATE CourseTaken
SET NumericGrade = 95
WHERE SSNumber = '222222222' AND CourseId = 'EEE101';
SQL-opdracht om gegevens uit een tabel op te halen
De ware kracht van relationele databasesystemen ligt in het vermogen om informatie op te halen in een schema met meerdere tabellen, via de SQL SELECT
commando, en de mogelijkheid om tabellen samen te voegen via gemeenschappelijke sleutels. Hoewel deze inleidende gids niet ingaat op het maken van sleutels en indexen die deze sleutels gebruiken, gebruikt het de SSNumber
kolom van elke tabel als een voertuig (sleutel) om de tabellen te relateren (of samen te voegen) om informatie te genereren. De volgende voorbeelden bieden verschillende gebruiksscenario's voor het gebruik van de SQL SELECT
commando vanaf de commandoregel.
Voorbeeld 1: Om de lijst van alle leerlingen in de school op te halen.
SELECT * from Student;
Uitvoer:
+-----------+----------+-----------+
| SSNumber | LastName | FirstName |
+-----------+----------+-----------+
| 111111111 | Smith | John |
| 222222222 | Jones | Mary |
| 333333333 | Hansen | Robert |
+-----------+----------+-----------+
Voorbeeld 2: Om de lijst op te halen van alle studenten en cursussen die ze hebben gevolgd.
SELECT Student.SSNumber, Student.LastName,
Student.FirstName, CourseTaken.CourseId
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber;
Uitvoer:
+-----------+----------+-----------+----------+
| SSNumber | LastName | FirstName | CourseId |
+-----------+----------+-----------+----------+
| 111111111 | Smith | John | CSC101 |
| 111111111 | Smith | John | ENG101 |
| 222222222 | Jones | Mary | CSC101 |
+-----------+----------+-----------+----------+
Opmerking In het bovenstaande commando zijn de twee tabellen,Student
enCourseTaken
worden samengevoegd om de vereiste informatie op te halen. De kolomnamen in deSELECT
enWHERE
clausules worden voor de duidelijkheid voorafgegaan door hun tabelnamen. In het geval van hetSSNumber
kolom, zijn we verplicht om de juiste voorvoegsels voor de tabelnaam op te geven, aangezien beide tabellen dezelfde kolomnaam hebben. DeFROM
clausule geeft de tabellen aan die in deze zoekopdracht worden gebruikt.
Voorbeeld 3: Haal de lijst met studenten op met CourseId CSC101
en het jaar waarin ze deze cursus hebben gevolgd.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.YearTaken
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.CourseId = 'CSC101';
Uitvoer:
+----------+-----------+----------+-----------+
| LastName | FirstName | CourseId | YearTaken |
+----------+-----------+----------+-----------+
| Smith | John | CSC101 | 2021 |
| Jones | Mary | CSC101 | 2022 |
+----------+-----------+----------+-----------+
Voorbeeld 4: Haal de lijst op met namen van studenten, gevolgde cursussen en ontvangen cijfers, voor degenen met cursuscijfers hoger dan 90
.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.NumericGrade
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.NumericGrade > 90;
Uitvoer:
+----------+-----------+----------+--------------+
| LastName | FirstName | CourseId | NumericGrade |
+----------+-----------+----------+--------------+
| Smith | John | ENG101 | 95 |
| Smith | John | CSC101 | 98 |
| Jones | Mary | CSC101 | 100 |
+----------+-----------+----------+--------------+
Opmerking De AND
clausule in de bovenstaande opdracht stelt u in staat om de resultaten te filteren op een voorwaardelijke cijferscoretest.
Conclusie
Deze handleiding over SQL-opdrachten is een inleidende inleiding over het maken van databaseschema's en het manipuleren van gegevens in die databases. Hoewel de hier geïntroduceerde concepten slechts het eerste gezicht zijn met betrekking tot het gebruik van relationele databasesystemen, is het een goed startpunt voor basis- en essentiële commando's en concepten.