I dagens verden med øget digitalisering, big data og cloud computing er datastyring blandt de vigtigste færdigheder, en softwareingeniør kan have. Til dette formål er SQL et af de mest kraftfulde databaseværktøjer.
SQL (Structured Query Language) er standardprogrammeringssproget, der bruges til at manipulere datastrukturobjekter. De opererer på data, der er indeholdt i et relationelt databasestyringssystem (RDBMS). Nogle velkendte RDBMS er MySQL og PostgreSQL.
I denne vejledning lærer du om undersættene af SQL-sproget, og hvordan du bruger nogle grundlæggende SQL-kommandoer, såsom SELECT
, INSERT
, OPDATERING
og SLET
.
Undersæt af SQL
Listen nedenfor inkluderer de forskellige sprogundersæt af forskellige SQL-kommandoer. Hver delmængde har sin egen funktion og formål.
- Datadefinitionssprog (DDL):Dette giver dig mulighed for at oprette, slette og opdatere databaseskemadefinitioner (nemlig tabeller og indekser), uden egentlig at manipulere dataene i databasetabellerne.
- Dataforespørgselssprog (DQL):DQL bruges til at hente data fra databasen ved hjælp af
SELECT
erklæring. - Datamanipulationssprog (DML):Dette undersprog giver mulighed for datamanipulation i databasen ved hjælp af
INSERT
,OPDATERING
ogSLET
udsagn.
Denne vejledning bruger et eksempel på en database for en skole til yderligere at demonstrere SQL-kommandoerne for hver delmængde, der er anført ovenfor. Skoledatabasen har flere tabeller for elever, kurser, karakterer og så videre. Definitionen af Studenten
tabel indeholder kolonner for elevens SSNumber
, Fornavn
og Efternavn
, og definitionen af CourseTaken
tabel indeholder kolonner for SSNumber
, CourseId
, NumericGrade
og YearTaken
.
Eksemplet forudsætter, at der er tre elever på skolen, som hver har gennemført to forløb. Eksempeldataene er vist i tabellen nedenfor:
SSNumber | Efternavn | Fornavn | CourseId | NumericGrade | YearTaken |
---|---|---|---|---|---|
111111111 | Smith | John | CSC101 | 98 | 2021 |
111111111 | Smith | John | ENG101 | 95 | 2022 |
222222222 | Jones | Mary | CSC101 | 100 | 2022 |
222222222 | Jones | Mary | EEE101 | 75 | 2022 |
333333333 | Hansen | Robert | POL101 | 92 | 2021 |
333333333 | Hansen | Robert | SOC103 | 84 | 2022 |
Opret, rediger og slip tabeller ved hjælp af SQL-kommandoer
Fra kommandolinjen skal du bruge CREATE TABLE
kommando efterfulgt af navnet på tabellen og tabeldataene. Kommandoen nedenfor opretter Student
tabel.
OPRET TABEL Elev (SSNumber CHAR(9) NOT NULL, Efternavn VARCHAR(30) NOT NULL, Fornavn VARCHAR(20) NOT NULL);
Parentesen omslutter tabeldataene, startende med en kolonne, der mærker hver rækkes data. Den næste kolonne angiver den datatype, som denne række indeholder. CHAR
angiver en strengdatatype med fast længde og VARCHAR
angiver en strengdatatype med variabel længde. I den sidste kolonne er NOT NULL
attribut sikrer, at en post ikke kan tilføjes til tabellen, hvis nogen af NOT NULL
kolonner har ikke data knyttet til dem.
Bemærk OPRET TABEL
sætning er afgrænset med et efterfølgende semikolon (;), selvom det er muligt, at nogle kommercielle relationelle databasesystemer måske ikke kræver det afgrænser.
Bemærk Medmindre andet er nævnt, fungerer alle databasekommandoer, der er vist i denne vejledning, godt på både MySQL og PostgreSQL .
For at oprette CourseTaken
tabel, skal du udføre følgende kommando:
OPRET TABEL CourseTaken (SSNumber CHAR(9) NOT NULL, CourseId CHAR(6) NOT NULL, NumericGrade INT NOT NULL);
YearTaken
kolonne er med vilje ikke inkluderet i CourseTaken
tabel for at demonstrere brugen af ALTER TABLE
kommando. For at tilføje YearTaken
kolonnen i CourseTaken
tabel, behøver du ikke slippe CourseTaken
bordet helt. I stedet kan du bruge DDL ALTER TABLE
kommando. Følgende kommando ændrer CourseTaken
tabel ved at tilføje den manglende kolonne til tabellen.
ÆNDRINGSTABEL CourseTaken ADD (YearTaken INT NOT NULL);
Kommandoen ovenfor følger en lignende syntaks som før. Det kræver tabelnavnet samt tre argumenter:rækkenavn, rækkedatatype og IKKE NULL
attribut. Hvis du ønsker at slette CourseTaken
hele tabellen, udsted DDL DROP TABLE
kommando efterfulgt af tabelnavnet.
DROP TABEL CourseTaken;
Forsigtig Sletning af en tabel sletter alle data i tabellen.
Sådan indsætter du data i en tabel i SQL
For at indsætte data i tabellen skal du bruge SQL INSERT INTO
udmelding. For at kalde denne kommando skal du angive tabelnavnet og listen over rækkenavne (i parentes), som du vil indsætte dataene i. Dette efterfølges af VALUES
nøgleord og de faktiske værdier (i parentes), som du ønsker at indsætte. Værdierne indsættes i rækkerne i den rækkefølge, de kaldes.
Bemærk
- SQL-kommandoer kan opdeles på tværs af linjer. Slutningen af SQL-kommandoen er afgrænset af et semikolon (
;
).- Tegndataene er afgrænset af en åbnings- og lukkeapostrof (
‘
), hvorimod numeriske data ikke er det.
Følgende INSERT
kommandoer indsætter tre rækker i Student
bord. Disse kommandoer bruger flere INSERT
udsagn.
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');
På samme måde kan du også indsætte flere rækker i tabellen i en enkelt SQL-forespørgsel som vist nedenfor:
INSERT INTO CourseTaken(SSNumber, CourseId, NumericGrade, YearTaken)VALUES('111111111', 'CSC101', 98, 2021),('111111111', 'ENG101', 95,'22222), ', 'CSC101', 100, 2022);
BemærkDu kan bruge
INSERT INTO
kommando på samme måde i PostgreSQL for at tilføje rækker til tabellen. Sørg for, at værdierne stemmer overens med rækkefølgen af kolonnerne i tabeldefinitionen.INSERT INTO elev VALUES ('111111111', 'Smith', 'John');
Slet data fra en tabel
For at slette data fra en tabel skal du bruge SQL DELETE FROM
udmelding. Brug WHERE
klausul for at specificere betingelsen, og hvis der er mere end én betingelse, skal du bruge AND
klausul sammen med WHERE
.
For eksempel sletter følgende kommando en post fra CourseTaken
tabel med SSNumber 333333333
og CourseId POL101
.
Forsigtig Hvis du udelader WHERE
klausul, slettes alle poster i tabellen.
SLET FRA CourseTaken WHERE SSNumber ='333333333' OG CourseId ='POL101';
SQL-kommando til at opdatere data i en tabel
For at opdatere den eksisterende post i en tabel skal du bruge SQL UPDATE
kommando. SET
klausul bruges til at sætte (opdatere) en ny værdi til en bestemt kolonne og WHERE
klausul bruges til at opdatere de valgte rækker.
For eksempel opdaterer følgende kommando NumericGrade
kolonne i CourseTaken
tabel for poster med SSNumber 222222222
og CourseId EE101
.
OPDATERING CourseTakenSET NumericGrade =95WHERE SSNumber ='222222222' OG CourseId ='EEE101';
SQL-kommando til at hente data fra en tabel
Den sande kraft af relationelle databasesystemer er i dets evne til at hente information i et multitabel-skema via SQL SELECT
kommando, og muligheden for at forbinde tabeller via fælles nøgler. Selvom denne introduktionsvejledning ikke undersøger oprettelsen af nøgler og indekser, der bruger disse nøgler, bruger den SSNumber
kolonne i hver tabel som et køretøj (nøgle) til at relatere (eller forbinde) tabellerne for at generere information. De følgende eksempler giver forskellige anvendelsesmuligheder for brug af SQL SELECT
kommando fra kommandolinjen.
Eksempel 1: For at hente listen over alle elever på skolen.
VÆLG * fra Elev;
Output: +------------+----------+-----------+| SSNumber | Efternavn | Fornavn |+-----------+----------+-----------+| 111111111 | Smith | John || 222222222 | Jones | Mary || 333333333 | Hansen | Robert |+-----------+-----------+-----------+
Eksempel 2: For at hente listen over alle elever og kurser, de har taget.
SELECT Student.SSNumber, Student.LastName, Student.FirstName, CourseTaken.CourseIdFROM Student, CourseTakenWHERE Student.SSNumber =CourseTaken.SSNumber;
Output:
+------------+-----------+------------+-------- --+| SSNumber | Efternavn | Fornavn | CourseId |+----------------------------------+| 111111111 | Smith | John | CSC101 || 111111111 | Smith | John | ENG101 || 222222222 | Jones | Mary | CSC101 |+-----------+---------------------+ Bemærk I ovenstående kommando, de to tabeller, Student
og CourseTaken
er tilsluttet for at hente de nødvendige oplysninger. Kolonnenavnene i SELECT
og Hvor
klausuler er foranstillet med deres tabelnavne for overskuelighed. Men i tilfælde af SSNumber
kolonne, er vi forpligtet til at angive de relevante tabelnavne-præfikser, da begge tabeller deler det samme kolonnenavn. FROM
klausul angiver de tabeller, der bruges i denne forespørgsel.
Eksempel 3: Hent listen over elever med CourseId CSC101
og det år, de tog dette kursus.
SELECT Student.LastName, Student.FirstName, CourseTaken.CourseId, CourseTaken.YearTakenFROM Student, CourseTakenWHERE Student.SSNumber =CourseTaken.SSNumberAND CourseTaken.CourseId ='CSC101';
Output: +-----------+------------------- --+| Efternavn | Fornavn | CourseId | YearTaken |+------+---------------------+| Smith | John | CSC101 | 2021 || Jones | Mary | CSC101 | 2022 |+-----------+--------------------+
Eksempel 4: Hent listen over elevernes navne, kurser taget og karakterer modtaget for dem, der havde kursuskarakterer over 90
.
VÆLG Student.LastName, Student.FirstName, CourseTaken.CourseId, CourseTaken.NumericGradeFROM Student, CourseTakenWHERE Student.SSNumber =CourseTaken.SSNumberAND CourseTaken.NumericGrade> 90;
Output: +-----------+------------------- -----+| Efternavn | Fornavn | CourseId | NumericGrade |+------+---------------------- -+| Smith | John | ENG101 | 95 || Smith | John | CSC101 | 98 || Jones | Mary | CSC101 | 100 |+-----------+--------------------- -+
Bemærk AND
klausul i kommandoen ovenfor giver dig mulighed for at filtrere resultaterne efter en betinget karaktertest.
Konklusion
Denne vejledning om SQL-kommandoer er en introduktion til, hvordan man opretter databaseskemaer og manipulerer data i disse databaser. Selvom de her introducerede begreber blot ridser i overfladen med hensyn til relationelle databasesystemers brug, er det et godt udgangspunkt for grundlæggende og væsentlige kommandoer og begreber.