I dagens värld av ökad digitalisering, big data och cloud computing är datahantering bland de viktigaste färdigheter en mjukvaruingenjör kan ha. För detta ändamål är SQL ett av de mest kraftfulla databasverktygen.
SQL (Structured Query Language) är standardprogrammeringsspråket som används för att manipulera datastrukturobjekt. De arbetar på data som finns i ett relationsdatabashanteringssystem (RDBMS). Några välkända RDBMS är MySQL och PostgreSQL.
I den här guiden lär du dig om undergrupperna av SQL-språket och hur du använder några grundläggande SQL-kommandon, som SELECT
, INSERT
, UPDATE
och DELETE
.
Underuppsättningar av SQL
Listan nedan inkluderar de olika språkunderuppsättningarna av olika SQL-kommandon. Varje delmängd har sin egen funktion och syfte.
- Datadefinitionsspråk (DDL):Detta låter dig skapa, ta bort och uppdatera databasschemadefinitioner (nämligen tabeller och index), utan att faktiskt manipulera data i databastabellerna.
- Data Query Language (DQL):DQL används för att hämta data från databasen med
SELECT
uttalande. - Datamanipulationsspråk (DML):Detta underspråk tillåter datamanipulation i databasen med
INSERT
,UPDATE
ochDELETE
uttalanden.
Den här guiden använder en exempeldatabas för en skola för att ytterligare demonstrera SQL-kommandona för varje delmängd som anges ovan. Skoldatabasen har flera tabeller för elever, kurser, betyg och så vidare. Definitionen av Student
Tabellen innehåller kolumner för elevens SSNumber
, Firstname
och Lastname
, och definitionen av CourseTaken
Tabellen innehåller kolumner för SSNumber
, CourseId
, NumericGrade
och YearTaken
.
Exemplet förutsätter att det finns tre elever i skolan som var och en har genomgått två kurser. Exempeldata visas i tabellen nedan:
SSNumber | Efternamn | Förnamn | Kurs-ID | 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 |
Skapa, ändra och släpp tabeller med SQL-kommandon
Från kommandoraden, använd CREATE TABLE
kommando följt av namnet på tabellen och tabelldata. Kommandot nedan skapar Student
bord.
CREATE TABLE Student (
SSNumber CHAR(9) NOT NULL,
LastName VARCHAR(30) NOT NULL,
FirstName VARCHAR(20) NOT NULL
);
Parentesen omsluter tabelldata, börjar med en kolumn som etiketterar varje rads data. Nästa kolumn anger vilken datatyp som denna rad innehåller. CHAR
indikerar en strängdatatyp med fast längd och VARCHAR
indikerar en strängdatatyp med variabel längd. I den sista kolumnen visas NOT NULL
attribut säkerställer att en post inte kan läggas till i tabellen om någon av NOT NULL
kolumner har inga data kopplade till dem.
Obs CREATE TABLE
uttalandet är avgränsat med ett avslutande semikolon (;), även om det är möjligt att vissa kommersiella relationsdatabassystem kanske inte kräver den avgränsaren.
Obs Om inget annat nämns fungerar alla databaskommandon som visas i den här guiden bra på både MySQL och PostgreSQL .
För att skapa CourseTaken
tabell, kör följande kommando:
CREATE TABLE CourseTaken (
SSNumber CHAR(9) NOT NULL,
CourseId CHAR(6) NOT NULL,
NumericGrade INT NOT NULL
);
YearTaken
kolumnen är avsiktligt inte inkluderad i CourseTaken
tabell för att demonstrera användningen av ALTER TABLE
kommando. För att lägga till YearTaken
kolumnen i CourseTaken
tabellen behöver du inte släppa CourseTaken
bordet helt och hållet. Istället kan du använda DDL ALTER TABLE
kommando. Följande kommando ändrar CourseTaken
tabell genom att lägga till den saknade kolumnen i tabellen.
ALTER TABLE CourseTaken
ADD (YearTaken INT NOT NULL);
Kommandot ovan följer en liknande syntax som tidigare. Det kräver tabellnamnet samt tre argument:radnamn, raddatatyp och NOT NULL
attribut. Om du vill ta bort CourseTaken
tabell helt, utfärda DDL DROP TABLE
kommando följt av tabellnamnet.
DROP TABLE CourseTaken;
Varning Om du släpper en tabell raderas all data i tabellen.
Hur man infogar data i en tabell i SQL
För att infoga data i tabellen, använd SQL INSERT INTO
påstående. För att anropa detta kommando, ange tabellnamnet och listan över radnamn (inom parentes) som du vill infoga data i. Detta följs av VALUES
nyckelord och de faktiska värdena (inom parentes) som du vill infoga. Värdena infogas i raderna i den ordning som de kallas.
Obs
- SQL-kommandon kan delas upp över rader. Slutet på SQL-kommandot avgränsas av ett semikolon (
;
).- Teckendata avgränsas av en öppnings- och stängningsapostrof (
‘
), medan numeriska data inte är det.
Följande INSERT
kommandon infogar tre rader i Student
tabell. Dessa kommandon använder flera INSERT
uttalanden.
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å samma sätt kan du också infoga flera rader i tabellen i en enda SQL-fråga som visas nedan:
INSERT INTO CourseTaken
(SSNumber, CourseId, NumericGrade, YearTaken)
VALUES
('111111111', 'CSC101', 98, 2021),
('111111111', 'ENG101', 95, 2022),
('222222222', 'CSC101', 100, 2022);
ObsDu kan använda
INSERT INTO
kommandot på liknande sätt i PostgreSQL för att lägga till rader i tabellen. Se till att värdena matchar kolumnernas ordning i tabelldefinitionen.INSERT INTO student VALUES ('111111111', 'Smith', 'John');
Ta bort data från en tabell
För att radera data från en tabell, använd SQL DELETE FROM
påstående. Använd WHERE
sats för att specificera villkoret, och om det finns mer än ett villkor, använd AND
sats tillsammans med WHERE
.
Till exempel raderar följande kommando en post från CourseTaken
tabell med SSNumber 333333333
och CourseId POL101
.
Varning Om du utelämnar WHERE
klausul, raderas alla poster i tabellen.
DELETE FROM CourseTaken WHERE SSNumber = '333333333' AND CourseId = 'POL101';
SQL-kommando för att uppdatera data i en tabell
För att uppdatera den befintliga posten i en tabell, använd SQL UPDATE
kommando. SET
sats används för att ställa in (uppdatera) ett nytt värde till en viss kolumn och WHERE
sats används för att uppdatera de valda raderna.
Till exempel uppdaterar följande kommando NumericGrade
kolumnen i CourseTaken
tabell för poster med SSNumber 222222222
och CourseId EEE101
.
UPDATE CourseTaken
SET NumericGrade = 95
WHERE SSNumber = '222222222' AND CourseId = 'EEE101';
SQL-kommando för att hämta data från en tabell
Den sanna kraften hos relationsdatabassystem ligger i dess förmåga att hämta information i ett flertabellsschema, via SQL SELECT
kommando och möjligheten att ansluta tabeller via vanliga nycklar. Även om den här introduktionsguiden inte undersöker skapandet av nycklar och index som använder dessa nycklar, använder den SSNumber
kolumn i varje tabell som ett fordon (nyckel) för att relatera (eller sammanfoga) tabellerna för att generera information. Följande exempel ger olika användningsfall för att använda SQL SELECT
kommando från kommandoraden.
Exempel 1: För att hämta listan över alla elever i skolan.
SELECT * from Student;
Utdata:
+-----------+----------+-----------+
| SSNumber | LastName | FirstName |
+-----------+----------+-----------+
| 111111111 | Smith | John |
| 222222222 | Jones | Mary |
| 333333333 | Hansen | Robert |
+-----------+----------+-----------+
Exempel 2: För att hämta listan över alla studenter och kurser de har gått.
SELECT Student.SSNumber, Student.LastName,
Student.FirstName, CourseTaken.CourseId
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber;
Utdata:
+-----------+----------+-----------+----------+
| SSNumber | LastName | FirstName | CourseId |
+-----------+----------+-----------+----------+
| 111111111 | Smith | John | CSC101 |
| 111111111 | Smith | John | ENG101 |
| 222222222 | Jones | Mary | CSC101 |
+-----------+----------+-----------+----------+
Obs I kommandot ovan, de två tabellerna,Student
ochCourseTaken
förenas för att hämta den information som krävs. Kolumnnamnen iSELECT
ochWHERE
satser har prefixet med deras tabellnamn för tydlighetens skull. Men i fallet medSSNumber
kolumn måste vi ange lämpliga tabellnamnsprefix, eftersom båda tabellerna delar samma kolumnnamn.FROM
sats anger tabellerna som används i den här frågan.
Exempel 3: Hämta listan över elever med CourseId CSC101
och året då de gick den här kursen.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.YearTaken
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.CourseId = 'CSC101';
Utdata:
+----------+-----------+----------+-----------+
| LastName | FirstName | CourseId | YearTaken |
+----------+-----------+----------+-----------+
| Smith | John | CSC101 | 2021 |
| Jones | Mary | CSC101 | 2022 |
+----------+-----------+----------+-----------+
Exempel 4: Hämta listan över elevnamn, gjorda kurser och mottagna betyg för de som hade kursbetyg över 90
.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.NumericGrade
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.NumericGrade > 90;
Utdata:
+----------+-----------+----------+--------------+
| LastName | FirstName | CourseId | NumericGrade |
+----------+-----------+----------+--------------+
| Smith | John | ENG101 | 95 |
| Smith | John | CSC101 | 98 |
| Jones | Mary | CSC101 | 100 |
+----------+-----------+----------+--------------+
Obs AND
klausul i kommandot ovan låter dig filtrera resultaten med ett villkorligt betygstest.
Slutsats
Den här guiden om SQL-kommandon är en introduktion till hur man skapar databasscheman och manipulerar data i dessa databaser. Även om begreppen som introduceras här bara skrapar på ytan när det gäller användningen av relationsdatabassystem, är det en bra utgångspunkt för grundläggande och väsentliga kommandon och begrepp.