V dnešním světě zvýšené digitalizace, velkých dat a cloud computingu patří správa dat mezi nejdůležitější dovednosti, které může softwarový inženýr mít. Za tímto účelem je jedním z nejvýkonnějších databázových nástrojů SQL.
SQL (Structured Query Language) je standardní programovací jazyk používaný k manipulaci s objekty datové struktury. Pracují s daty, která jsou obsažena v systému správy relačních databází (RDBMS). Některé známé RDBMS jsou MySQL a PostgreSQL.
V této příručce se dozvíte o podmnožinách jazyka SQL a o tom, jak používat některé základní příkazy SQL, jako je SELECT
, INSERT
, UPDATE
a DELETE
.
Podmnožiny SQL
Níže uvedený seznam obsahuje různé jazykové podmnožiny různých příkazů SQL. Každá podmnožina má svou vlastní funkci a účel.
- Jazyk definice dat (DDL):Umožňuje vytvářet, mazat a aktualizovat definice databázových schémat (jmenovitě tabulky a indexy), aniž byste museli ve skutečnosti manipulovat s daty v tabulkách databáze.
- Jazyk dotazu na data (DQL):DQL se používá k načtení dat z databáze pomocí
SELECT
prohlášení. - Jazyk pro manipulaci s daty (DML):Tento podjazyk umožňuje manipulaci s daty v databázi pomocí
INSERT
,UPDATE
aDELETE
prohlášení.
Tato příručka používá vzorovou databázi pro školu k další demonstraci příkazů SQL pro každou podmnožinu uvedenou výše. Školní databáze má několik tabulek pro studenty, kurzy, známky a tak dále. Definice Student
tabulka obsahuje sloupce pro SSNumber
studenta , Firstname
a Lastname
a definice CourseTaken
tabulka obsahuje sloupce pro SSNumber
, CourseId
, NumericGrade
a YearTaken
.
Příklad předpokládá, že ve škole jsou tři studenti, z nichž každý absolvoval dva kurzy. Ukázková data jsou uvedena v tabulce níže:
SSNumber | Příjmení | Jméno | Id kurzu | NumericGrade | YearTaken |
---|---|---|---|---|---|
111111111 | Smith | Jan | CSC101 | 98 | 2021 |
111111111 | Smith | Jan | ENG101 | 95 | 2022 |
222222222 | Jones | Marie | CSC101 | 100 | 2022 |
222222222 | Jones | Marie | EEE101 | 75 | 2022 |
333333333 | Hansen | Robert | POL101 | 92 | 2021 |
333333333 | Hansen | Robert | SOC103 | 84 | 2022 |
Vytvářejte, upravujte a rušte tabulky pomocí příkazů SQL
Z příkazového řádku použijte CREATE TABLE
za ním následuje název tabulky a data tabulky. Níže uvedený příkaz vytvoří Student
tabulka.
CREATE TABLE Student (
SSNumber CHAR(9) NOT NULL,
LastName VARCHAR(30) NOT NULL,
FirstName VARCHAR(20) NOT NULL
);
Závorka uzavírá data tabulky, počínaje sloupcem, který označuje data každého řádku. Další sloupec označuje datový typ, který tento řádek obsahuje. CHAR
označuje datový typ řetězce pevné délky a VARCHAR
označuje datový typ řetězce proměnné délky. V posledním sloupci NOT NULL
atribut zajišťuje, že záznam nemůže být přidán do tabulky, pokud je některá z NOT NULL
sloupce nemají přidružená data.
Poznámka CREATE TABLE
příkaz je oddělen středníkem na konci (;), ačkoli je možné, že některé komerční systémy relačních databází tento oddělovač nevyžadují.
Poznámka Pokud není uvedeno jinak, všechny databázové příkazy uvedené v této příručce fungují dobře na obou MySQL a PostgreSQL .
Chcete-li vytvořit CourseTaken
tabulky, proveďte následující příkaz:
CREATE TABLE CourseTaken (
SSNumber CHAR(9) NOT NULL,
CourseId CHAR(6) NOT NULL,
NumericGrade INT NOT NULL
);
YearTaken
sloupec záměrně není zahrnut v CourseTaken
tabulka k demonstraci použití ALTER TABLE
příkaz. Chcete-li přidat YearTaken
ve sloupci CourseTaken
tabulky, nemusíte opouštět CourseTaken
stůl úplně. Místo toho můžete použít DDL ALTER TABLE
příkaz. Následující příkaz změní CourseTaken
přidáním chybějícího sloupce do tabulky.
ALTER TABLE CourseTaken
ADD (YearTaken INT NOT NULL);
Výše uvedený příkaz má podobnou syntaxi jako dříve. Vyžaduje název tabulky a také tři argumenty:název řádku, datový typ řádku a NOT NULL
atribut. Pokud chcete smazat CourseTaken
celou tabulku, zadejte DDL DROP TABLE
příkaz následovaný názvem tabulky.
DROP TABLE CourseTaken;
Pozor Vypuštěním tabulky se odstraní všechna data v tabulce.
Jak vložit data do tabulky v SQL
Pro vložení dat do tabulky použijte SQL INSERT INTO
prohlášení. Chcete-li zavolat tento příkaz, zadejte název tabulky a seznam názvů řádků (v závorkách), do kterých chcete vložit data. Poté následuje VALUES
klíčové slovo a skutečné hodnoty (v závorkách), které chcete vložit. Hodnoty jsou vloženy do řádků v pořadí, v jakém jsou volány.
Poznámka
- Příkazy SQL lze rozdělit na řádky. Konec SQL příkazu je oddělen středníkem (
;
).- Znaková data jsou oddělena úvodním a závěrečným apostrofem (
‘
), zatímco číselná data nikoli.
Následující INSERT
příkazy vloží tři řádky do Student
stůl. Tyto příkazy používají více příkazů INSERT
prohlášení.
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');
Podobně můžete také vložit více řádků do tabulky v jednom SQL dotazu, jak je znázorněno níže:
INSERT INTO CourseTaken
(SSNumber, CourseId, NumericGrade, YearTaken)
VALUES
('111111111', 'CSC101', 98, 2021),
('111111111', 'ENG101', 95, 2022),
('222222222', 'CSC101', 100, 2022);
PoznámkaMůžete použít
INSERT INTO
příkaz podobně v PostgreSQL pro přidání řádků do tabulky. Ujistěte se, že hodnoty odpovídají pořadí sloupců v definici tabulky.INSERT INTO student VALUES ('111111111', 'Smith', 'John');
Odstranit data z tabulky
Chcete-li odstranit data z tabulky, použijte SQL DELETE FROM
prohlášení. Použijte WHERE
klauzule k určení podmínky, a pokud existuje více než jedna podmínka, použijte AND
klauzule spolu s WHERE
.
Například následující příkaz odstraní záznam z CourseTaken
tabulka s číslem SSN 333333333
a Id kurzu POL101
.
Pozor Pokud vynecháte WHERE
klauzule, budou odstraněny všechny záznamy v tabulce.
DELETE FROM CourseTaken WHERE SSNumber = '333333333' AND CourseId = 'POL101';
Příkaz SQL pro aktualizaci dat v tabulce
Chcete-li aktualizovat existující záznam v tabulce, použijte SQL UPDATE
příkaz. SET
klauzule se používá k nastavení (aktualizaci) nové hodnoty pro konkrétní sloupec a WHERE
klauzule se používá k aktualizaci vybraných řádků.
Například následující příkaz aktualizuje NumericGrade
sloupec CourseTaken
tabulka pro záznamy s číslem SSN 222222222
a Id kurzu EEE101
.
UPDATE CourseTaken
SET NumericGrade = 95
WHERE SSNumber = '222222222' AND CourseId = 'EEE101';
Příkaz SQL pro načtení dat z tabulky
Skutečná síla relačních databázových systémů je v jejich schopnosti získávat informace ve vícetabulkovém schématu pomocí SQL SELECT
příkaz a schopnost spojovat tabulky pomocí společných klíčů. Ačkoli tato úvodní příručka nezkoumá vytváření klíčů a indexů pomocí těchto klíčů, využívá SSNumber
sloupec každé tabulky jako vozidlo (klíč) pro spojení (nebo spojení) tabulek za účelem generování informací. Následující příklady poskytují různé případy použití SQL SELECT
příkaz z příkazového řádku.
Příklad 1: Chcete-li načíst seznam všech studentů ve škole.
SELECT * from Student;
Výstup:
+-----------+----------+-----------+
| SSNumber | LastName | FirstName |
+-----------+----------+-----------+
| 111111111 | Smith | John |
| 222222222 | Jones | Mary |
| 333333333 | Hansen | Robert |
+-----------+----------+-----------+
Příklad 2: Chcete-li načíst seznam všech studentů a kurzů, které absolvovali.
SELECT Student.SSNumber, Student.LastName,
Student.FirstName, CourseTaken.CourseId
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber;
Výstup:
+-----------+----------+-----------+----------+
| SSNumber | LastName | FirstName | CourseId |
+-----------+----------+-----------+----------+
| 111111111 | Smith | John | CSC101 |
| 111111111 | Smith | John | ENG101 |
| 222222222 | Jones | Mary | CSC101 |
+-----------+----------+-----------+----------+
Poznámka Ve výše uvedeném příkazu jsou dvě tabulkyStudent
aCourseTaken
jsou spojeny za účelem získání požadovaných informací. Názvy sloupců vSELECT
aWHERE
klauzule jsou pro přehlednost opatřeny předponou s názvy tabulek. Nicméně v případěSSNumber
sloupec, musíme zadat příslušné předpony názvu tabulky, protože obě tabulky sdílejí stejný název sloupce.FROM
klauzule označuje tabulky, které se v tomto dotazu používají.
Příklad 3: Získejte seznam studentů pomocí Id kurzu CSC101
a rok, kdy tento kurz absolvovali.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.YearTaken
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.CourseId = 'CSC101';
Výstup:
+----------+-----------+----------+-----------+
| LastName | FirstName | CourseId | YearTaken |
+----------+-----------+----------+-----------+
| Smith | John | CSC101 | 2021 |
| Jones | Mary | CSC101 | 2022 |
+----------+-----------+----------+-----------+
Příklad 4: Získejte seznam jmen studentů, absolvovaných kurzů a obdržených známek pro ty, kteří měli hodnocení kurzu vyšší než 90
.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.NumericGrade
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.NumericGrade > 90;
Výstup:
+----------+-----------+----------+--------------+
| LastName | FirstName | CourseId | NumericGrade |
+----------+-----------+----------+--------------+
| Smith | John | ENG101 | 95 |
| Smith | John | CSC101 | 98 |
| Jones | Mary | CSC101 | 100 |
+----------+-----------+----------+--------------+
Poznámka AND
klauzule v příkazu výše vám umožňuje filtrovat výsledky pomocí podmíněného testu skóre.
Závěr
Tato příručka o příkazech SQL je úvodním návodem, jak vytvářet databázová schémata a manipulovat s daty v těchto databázích. Ačkoli zde představené koncepty pouze poškrábou povrch, pokud jde o použití relačních databázových systémů, jsou dobrým výchozím bodem pro základní a základní příkazy a koncepty.