В днешния свят на увеличена дигитализация, големи данни и облачни изчисления, управлението на данни е сред най-важните умения, които може да притежава софтуерният инженер. За тази цел един от най-мощните инструменти за база данни е SQL.
SQL (Structured Query Language) е стандартният език за програмиране, използван за манипулиране на обекти от структурата на данни. Те оперират с данни, които се съдържат в система за управление на релационна база данни (RDBMS). Някои добре познати RDBMS са MySQL и PostgreSQL.
В това ръководство ще научите за подмножествата на SQL езика и как да използвате някои основни SQL команди, като SELECT
, INSERT
, UPDATE
и DELETE
.
Подмножества на SQL
Списъкът по-долу включва различните езикови подмножества на различни SQL команди. Всяко подмножество има своя собствена функция и предназначение.
- Език за дефиниране на данни (DDL):Това ви позволява да създавате, изтривате и актуализирате дефиниции на схема на база данни (а именно таблици и индекси), без реално да манипулирате данните в таблиците на базата данни.
- Език за заявки за данни (DQL):DQL се използва за извличане на данни от базата данни с помощта на
SELECT
изявление. - Език за манипулиране на данни (DML):Този подезик позволява манипулиране на данни в базата данни с помощта на
INSERT
,UPDATE
иDELETE
изявления.
Това ръководство използва примерна база данни за училище, за да демонстрира допълнително SQL командите за всяко подмножество, изброено по-горе. Училищната база данни има няколко таблици за ученици, курсове, оценки и т.н. Дефиницията на Student
таблицата съдържа колони за SSNumber
на ученика , Firstname
и Lastname
и дефиницията на CourseTaken
таблицата съдържа колони за SSNumber
, CourseId
, NumericGrade
и YearTaken
.
Примерът предполага, че в училището има трима ученици, всеки от които е завършил два курса. Примерните данни са показани в таблицата по-долу:
SSNumber | Фамилия | FirstName | CourseId | NumericGrade | YearTaken |
---|---|---|---|---|---|
111111111 | Смит | Джон | CSC101 | 98 | 2021 |
111111111 | Смит | Джон | ENG101 | 95 | 2022 |
222222222 | Джоунс | Мери | CSC101 | 100 | 2022 |
222222222 | Джоунс | Мери | EEE101 | 75 | 2022 |
333333333 | Хансен | Робърт | POL101 | 92 | 2021 |
333333333 | Хансен | Робърт | SOC103 | 84 | 2022 |
Създавайте, променяйте и пускайте таблици с помощта на SQL команди
От командния ред използвайте CREATE TABLE
команда, последвана от името на таблицата и данните от таблицата. Командата по-долу създава Student
таблица.
CREATE TABLE Student (
SSNumber CHAR(9) NOT NULL,
LastName VARCHAR(30) NOT NULL,
FirstName VARCHAR(20) NOT NULL
);
Скобите обхващат данните от таблицата, като се започва с колона, която обозначава данните на всеки ред. Следващата колона показва типа данни, които този ред съдържа. CHAR
указва тип данни низ с фиксирана дължина и VARCHAR
указва тип данни низ с променлива дължина. В последната колона NOT NULL
атрибут гарантира, че запис не може да бъде добавен към таблицата, ако някой от NOT NULL
колони нямат данни, свързани с тях.
Забележка CREATE TABLE
изразът е разделен с крайна точка и запетая (;), въпреки че е възможно някои търговски системи за релационни бази данни да не изискват този разделител.
Забележка Освен ако не е посочено друго, всички демонстрирани в това ръководство команди на базата данни работят добре и на MySQL и PostgreSQL .
За да създадете CourseTaken
таблица, изпълнете следната команда:
CREATE TABLE CourseTaken (
SSNumber CHAR(9) NOT NULL,
CourseId CHAR(6) NOT NULL,
NumericGrade INT NOT NULL
);
YearTaken
колоната умишлено не е включена в CourseTaken
таблица за демонстриране на използването на ALTER TABLE
команда. За да добавите YearTaken
колона в CourseTaken
таблица, не е нужно да пускате CourseTaken
масата изцяло. Вместо това можете да използвате DDL ALTER TABLE
команда. Следната команда променя CourseTaken
таблица, като добавите липсващата колона към таблицата.
ALTER TABLE CourseTaken
ADD (YearTaken INT NOT NULL);
Командата по-горе следва подобен синтаксис като преди. Изисква името на таблицата, както и три аргумента:име на ред, тип данни на реда и NOT NULL
атрибут. Ако искате да изтриете CourseTaken
изцяло, издайте DDL DROP TABLE
команда, последвана от името на таблицата.
DROP TABLE CourseTaken;
Внимание Изтриването на таблица изтрива всички данни в таблицата.
Как да вмъкнете данни в таблица в SQL
За да вмъкнете данните в таблицата, използвайте SQL INSERT INTO
изявление. За да извикате тази команда, посочете името на таблицата и списъка с имена на редове (в скоби), в които искате да вмъкнете данните. Това е последвано от VALUES
ключова дума и действителните стойности (в скоби), които искате да вмъкнете. Стойностите се вмъкват в редовете, в който са извиквани.
Забележка
- SQL командите могат да бъдат разбити на редове. Краят на SQL командата е разделен с точка и запетая (
;
).- Данните за знаците са разделени с отварящ и затварящ апостроф (
‘
), докато цифровите данни не са.
Следният INSERT
командите вмъкват три реда в Student
маса. Тези команди използват множество INSERT
изявления.
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');
По същия начин можете също да вмъкнете няколко реда в таблицата в една SQL заявка, както е показано по-долу:
INSERT INTO CourseTaken
(SSNumber, CourseId, NumericGrade, YearTaken)
VALUES
('111111111', 'CSC101', 98, 2021),
('111111111', 'ENG101', 95, 2022),
('222222222', 'CSC101', 100, 2022);
ЗабележкаМожете да използвате
INSERT INTO
команда по подобен начин в PostgreSQL за добавяне на редове към таблицата. Уверете се, че стойностите съответстват на реда на колоните в дефиницията на таблицата.INSERT INTO student VALUES ('111111111', 'Smith', 'John');
Изтриване на данни от таблица
За да изтриете данни от таблица, използвайте SQL DELETE FROM
изявление. Използвайте WHERE
клауза за определяне на условието и ако има повече от едно условие, използвайте AND
клауза заедно с WHERE
.
Например следната команда изтрива запис от CourseTaken
таблица сSSNumber 333333333
и CourseId POL101
.
Внимание Ако пропуснете WHERE
клауза, всички записи в таблицата се изтриват.
DELETE FROM CourseTaken WHERE SSNumber = '333333333' AND CourseId = 'POL101';
SQL команда за актуализиране на данни в таблица
За да актуализирате съществуващия запис в таблица, използвайте SQL UPDATE
команда. SET
клаузата се използва за задаване (актуализация) на нова стойност за конкретна колона и WHERE
клаузата се използва за актуализиране на избраните редове.
Например, следната команда актуализира NumericGrade
колона на CourseTaken
таблица за записи сSSNumber 222222222
и CourseId EEE101
.
UPDATE CourseTaken
SET NumericGrade = 95
WHERE SSNumber = '222222222' AND CourseId = 'EEE101';
SQL команда за извличане на данни от таблица
Истинската сила на системите за релационни бази данни е в способността им да извличат информация в схема с множество таблици чрез SQL SELECT
команда и възможност за присъединяване на таблици чрез общи ключове. Въпреки че това въвеждащо ръководство не разглежда създаването на ключове и индекси, използващи тези ключове, то използва SSNumber
колона на всяка таблица като превозно средство (ключ) за свързване (или присъединяване) на таблиците за генериране на информация. Следните примери предоставят различни случаи на използване на SQL SELECT
команда от командния ред.
Пример 1: За да извлечете списъка с всички ученици в училището.
SELECT * from Student;
Изход:
+-----------+----------+-----------+
| SSNumber | LastName | FirstName |
+-----------+----------+-----------+
| 111111111 | Smith | John |
| 222222222 | Jones | Mary |
| 333333333 | Hansen | Robert |
+-----------+----------+-----------+
Пример 2: За да извлечете списъка с всички студенти и курсове, които са взели.
SELECT Student.SSNumber, Student.LastName,
Student.FirstName, CourseTaken.CourseId
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber;
Изход:
+-----------+----------+-----------+----------+
| SSNumber | LastName | FirstName | CourseId |
+-----------+----------+-----------+----------+
| 111111111 | Smith | John | CSC101 |
| 111111111 | Smith | John | ENG101 |
| 222222222 | Jones | Mary | CSC101 |
+-----------+----------+-----------+----------+
Забележка В горната команда, двете таблици,Student
иCourseTaken
са обединени, за да извлекат необходимата информация. Имената на колоните вSELECT
иWHERE
клаузите са с префикс с техните имена на таблици за яснота. Въпреки това, в случая наSSNumber
колона, от нас се изисква да посочим подходящите префикси на името на таблицата, тъй като и двете таблици споделят едно и също име на колона.FROM
клауза посочва таблиците, които се използват в тази заявка.
Пример 3: Извлечете списъка със студенти с CourseId CSC101
и годината, в която са преминали този курс.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.YearTaken
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.CourseId = 'CSC101';
Изход:
+----------+-----------+----------+-----------+
| LastName | FirstName | CourseId | YearTaken |
+----------+-----------+----------+-----------+
| Smith | John | CSC101 | 2021 |
| Jones | Mary | CSC101 | 2022 |
+----------+-----------+----------+-----------+
Пример 4: Извличане на списък с имена на студенти, взети курсове и получени оценки за тези, които са имали оценки от курса над 90
.
SELECT Student.LastName, Student.FirstName,
CourseTaken.CourseId, CourseTaken.NumericGrade
FROM Student, CourseTaken
WHERE Student.SSNumber = CourseTaken.SSNumber
AND CourseTaken.NumericGrade > 90;
Изход:
+----------+-----------+----------+--------------+
| LastName | FirstName | CourseId | NumericGrade |
+----------+-----------+----------+--------------+
| Smith | John | ENG101 | 95 |
| Smith | John | CSC101 | 98 |
| Jones | Mary | CSC101 | 100 |
+----------+-----------+----------+--------------+
Забележка AND
клаузата в командата по-горе ви позволява да филтрирате резултатите чрез тест за условна оценка.
Заключение
Това ръководство за SQL команди е въвеждащ пример за това как да създавате схеми на база данни и да манипулирате данни в тези бази данни. Въпреки че въведените тук понятия само надраскват повърхността по отношение на използването на системите за релационни бази данни, това е добра отправна точка за основни и основни команди и концепции.