В днешния свят на увеличена дигитализация, големи данни и облачни изчисления, управлението на данни е сред най-важните умения, които може да притежава софтуерният инженер. За тази цел един от най-мощните инструменти за база данни е 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 команди е въвеждащ пример за това как да създавате схеми на база данни и да манипулирате данни в тези бази данни. Въпреки че въведените тук понятия само надраскват повърхността по отношение на използването на системите за релационни бази данни, това е добра отправна точка за основни и основни команди и концепции.