W dzisiejszym świecie zwiększonej cyfryzacji, dużych zbiorów danych i przetwarzania w chmurze zarządzanie danymi jest jedną z najważniejszych umiejętności, jakie może posiadać inżynier oprogramowania. W tym celu jednym z najpotężniejszych narzędzi bazodanowych jest SQL.
SQL (Structured Query Language) to standardowy język programowania używany do manipulowania obiektami struktury danych. Działają na danych zawartych w systemie zarządzania relacyjnymi bazami danych (RDBMS). Niektóre dobrze znane RDBMS to MySQL i PostgreSQL.
W tym przewodniku dowiesz się o podzbiorach języka SQL oraz o tym, jak używać podstawowych poleceń SQL, takich jak SELECT
, INSERT
, UPDATE
i DELETE
.
Podzbiory SQL
Poniższa lista zawiera różne podzbiory językowe różnych poleceń SQL. Każdy podzbiór ma swoją własną funkcję i cel.
- Język definicji danych (DDL):Pozwala to na tworzenie, usuwanie i aktualizowanie definicji schematu bazy danych (mianowicie tabel i indeksów) bez faktycznego manipulowania danymi w tabelach bazy danych.
- Język zapytań o dane (DQL):DQL służy do pobierania danych z bazy danych za pomocą
SELECT
oświadczenie. - Język manipulacji danymi (DML):Ten podjęzyk pozwala na manipulację danymi w bazie danych za pomocą
INSERT
,UPDATE
iDELETE
oświadczenia.
W tym przewodniku wykorzystano przykładową bazę danych dla szkoły w celu dalszego zademonstrowania poleceń SQL dla każdego z wymienionych powyżej podzbiorów. Szkolna baza danych zawiera kilka tabel, dla uczniów, kursów, ocen i tak dalej. Definicja Student
tabela zawiera kolumny dla SSNumber
ucznia , Firstname
i Lastname
oraz definicję CourseTaken
tabela zawiera kolumny dla SSNumber
, CourseId
, NumericGrade
i YearTaken
.
W przykładzie założono, że w szkole jest trzech uczniów, z których każdy ukończył dwa kursy. Przykładowe dane są pokazane w poniższej tabeli:
SSNnumer | Nazwisko | Imię | Identyfikator kursu | NumericGrade | Rok podjęty |
---|---|---|---|---|---|
1111111111 | Kowalski | Jan | CSC101 | 98 | 2021 |
1111111111 | Kowalski | Jan | ENG101 | 95 | 2022 |
222222222 | Jones | Maryi | CSC101 | 100 | 2022 |
222222222 | Jones | Maryi | EEE101 | 75 | 2022 |
333333333 | Hansen | Robert | POL101 | 92 | 2021 |
333333333 | Hansen | Robert | SOC103 | 84 | 2022 |
Tworzenie, zmienianie i usuwanie tabel za pomocą poleceń SQL
Z wiersza poleceń użyj CREATE TABLE
polecenie, po którym następuje nazwa tabeli i dane tabeli. Poniższe polecenie tworzy Student
tabela.
CREATE TABLE Student (
SSNumber CHAR(9) NOT NULL,
LastName VARCHAR(30) NOT NULL,
FirstName VARCHAR(20) NOT NULL
);
Nawias obejmuje dane tabeli, zaczynając od kolumny, która oznacza dane każdego wiersza. Następna kolumna wskazuje typ danych, który zawiera ten wiersz. CHAR
wskazuje typ danych ciągu o stałej długości i VARCHAR
wskazuje typ danych ciągu o zmiennej długości. W ostatniej kolumnie NOT NULL
atrybut zapewnia, że rekord nie może zostać dodany do tabeli, jeśli którykolwiek z NOT NULL
kolumny nie mają powiązanych z nimi danych.
Uwaga CREATE TABLE
Instrukcja jest oddzielona końcowym średnikiem (;), chociaż możliwe jest, że niektóre komercyjne systemy relacyjnych baz danych mogą nie wymagać tego ogranicznika.
Uwaga O ile nie wspomniano inaczej, wszystkie polecenia baz danych przedstawione w tym przewodniku działają dobrze zarówno na MySQL i PostgreSQL .
Aby utworzyć CourseTaken
tabeli, wykonaj następujące polecenie:
CREATE TABLE CourseTaken (
SSNumber CHAR(9) NOT NULL,
CourseId CHAR(6) NOT NULL,
NumericGrade INT NOT NULL
);
YearTaken
kolumna celowo nie jest uwzględniona w CourseTaken
tabela, aby zademonstrować użycie ALTER TABLE
Komenda. Aby dodać YearTaken
kolumna w CourseTaken
tabeli, nie musisz porzucać CourseTaken
tabeli całkowicie. Zamiast tego możesz użyć DDL ALTER TABLE
Komenda. Następujące polecenie zmienia CourseTaken
tabeli, dodając brakującą kolumnę do tabeli.
ALTER TABLE CourseTaken
ADD (YearTaken INT NOT NULL);
Powyższe polecenie ma podobną składnię jak poprzednio. Wymaga nazwy tabeli oraz trzech argumentów:nazwy wiersza, typu danych wiersza i NOT NULL
atrybut. Jeśli chcesz usunąć CourseTaken
tabeli całkowicie, wydaj DDL DROP TABLE
polecenie, po którym następuje nazwa tabeli.
DROP TABLE CourseTaken;
Uwaga Upuszczenie tabeli usuwa wszystkie dane w tabeli.
Jak wstawić dane do tabeli w SQL
Aby wstawić dane do tabeli, użyj SQL INSERT INTO
oświadczenie. Aby wywołać to polecenie, podaj nazwę tabeli i listę nazw wierszy (w nawiasach), do których chcesz wstawić dane. Po nim następuje VALUES
słowo kluczowe i rzeczywiste wartości (w nawiasach), które chcesz wstawić. Wartości są wstawiane do wierszy w kolejności, w jakiej są wywoływane.
Uwaga
- Polecenia SQL można podzielić na wiersze. Koniec polecenia SQL jest oddzielony średnikiem (
;
).- Dane znakowe są oddzielone apostrofem otwierającym i zamykającym (
‘
), podczas gdy dane liczbowe nie.
Następujące INSERT
polecenia wstawiają trzy wiersze do Student
stół. Te polecenia używają wielu INSERT
oświadczenia.
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');
Podobnie, możesz również wstawić wiele wierszy do tabeli w jednym zapytaniu SQL, jak pokazano poniżej:
INSERT INTO CourseTaken
(SSNumber, CourseId, NumericGrade, YearTaken)
VALUES
('111111111', 'CSC101', 98, 2021),
('111111111', 'ENG101', 95, 2022),
('222222222', 'CSC101', 100, 2022);
UwagaMożesz użyć
INSERT INTO
polecenie podobnie w PostgreSQL aby dodać wiersze do tabeli. Upewnij się, że wartości odpowiadają kolejności kolumn w definicji tabeli.INSERT INTO student VALUES ('111111111', 'Smith', 'John');
Usuń dane z tabeli
Aby usunąć dane z tabeli, użyj polecenia SQL DELETE FROM
oświadczenie. Użyj WHERE
klauzulę, aby określić warunek, a jeśli jest więcej niż jeden warunek, użyj AND
klauzula wraz z WHERE
.
Na przykład poniższe polecenie usuwa rekord z CourseTaken
tabela z numerem SSN 333333333
i Identyfikator kursu POL101
.
Uwaga Jeśli pominiesz WHERE
klauzula, wszystkie rekordy w tabeli zostaną usunięte.
DELETE FROM CourseTaken WHERE SSNumber = '333333333' AND CourseId = 'POL101';
Polecenie SQL do aktualizacji danych w tabeli
Aby zaktualizować istniejący rekord w tabeli, użyj polecenia SQL UPDATE
Komenda. SET
Klauzula służy do ustawienia (aktualizacji) nowej wartości w określonej kolumnie i WHERE
klauzula jest używana do aktualizacji wybranych wierszy.
Na przykład poniższe polecenie aktualizuje NumericGrade
kolumna CourseTaken
tabela dla rekordów z SSNumber 222222222
i Identyfikator kursu EEE101
.
UPDATE CourseTaken
SET NumericGrade = 95
WHERE SSNumber = '222222222' AND CourseId = 'EEE101';
Polecenie SQL do pobierania danych z tabeli
Prawdziwa moc systemów relacyjnych baz danych tkwi w ich zdolności do pobierania informacji w schemacie wielotabelowym za pomocą SQL SELECT
polecenia oraz możliwość łączenia tabel za pomocą wspólnych klawiszy. Chociaż ten przewodnik wprowadzający nie analizuje tworzenia kluczy i indeksów przy użyciu tych kluczy, wykorzystuje on SSNumber
kolumna każdej tabeli jako nośnik (klucz) do powiązania (lub połączenia) tabel w celu wygenerowania informacji. Poniższe przykłady przedstawiają różne przypadki użycia SQL SELECT
polecenie z wiersza poleceń.
Przykład 1: Aby pobrać listę wszystkich uczniów w szkole.
SELECT * from Student;
Wyjście:
+-----------+----------+-----------+
| SSNumber | LastName | FirstName |
+-----------+----------+-----------+
| 111111111 | Smith | John |
| 222222222 | Jones | Mary |
| 333333333 | Hansen | Robert |
+-----------+----------+-----------+
Przykład 2: Aby pobrać listę wszystkich uczniów i kursów, w których uczestniczyli.
SELECT Student.SSNumber, Student.LastName,
Student.FirstName, CourseTaken.CourseId
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber;
Wyjście:
+-----------+----------+-----------+----------+
| SSNumber | LastName | FirstName | CourseId |
+-----------+----------+-----------+----------+
| 111111111 | Smith | John | CSC101 |
| 111111111 | Smith | John | ENG101 |
| 222222222 | Jones | Mary | CSC101 |
+-----------+----------+-----------+----------+
Uwaga W powyższym poleceniu dwie tabele,Student
iCourseTaken
są połączone w celu pobrania wymaganych informacji. Nazwy kolumn wSELECT
iWHERE
klauzule są poprzedzone ich nazwami tabel dla jasności. Jednak w przypadkuSSNumber
kolumny, musimy określić odpowiednie przedrostki nazwy tabeli, ponieważ obie tabele mają tę samą nazwę kolumny.FROM
klauzula wskazuje tabele, które są używane w tym zapytaniu.
Przykład 3: Pobierz listę uczniów z Identyfikatorem kursu CSC101
i rok, w którym wzięli udział w tym kursie.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.YearTaken
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.CourseId = 'CSC101';
Wyjście:
+----------+-----------+----------+-----------+
| LastName | FirstName | CourseId | YearTaken |
+----------+-----------+----------+-----------+
| Smith | John | CSC101 | 2021 |
| Jones | Mary | CSC101 | 2022 |
+----------+-----------+----------+-----------+
Przykład 4: Pobierz listę nazwisk uczniów, odbytych kursów i otrzymanych ocen dla tych, którzy mieli oceny z kursu powyżej 90
.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.NumericGrade
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.NumericGrade > 90;
Wyjście:
+----------+-----------+----------+--------------+
| LastName | FirstName | CourseId | NumericGrade |
+----------+-----------+----------+--------------+
| Smith | John | ENG101 | 95 |
| Smith | John | CSC101 | 98 |
| Jones | Mary | CSC101 | 100 |
+----------+-----------+----------+--------------+
Uwaga AND
klauzula w powyższym poleceniu umożliwia filtrowanie wyników według warunkowego testu ocen.
Wniosek
Ten przewodnik po poleceniach SQL stanowi wprowadzenie do tworzenia schematów baz danych i manipulowania danymi w tych bazach danych. Chociaż przedstawione tutaj koncepcje jedynie zarysowują powierzchnię w odniesieniu do użycia relacyjnych systemów baz danych, jest to dobry punkt wyjścia dla podstawowych i niezbędnych poleceń i koncepcji.