
- •«Базы данных»
- •(Для студентов очной и заочной формы обучения)
- •1. Организационно-методическая часть (Программа дисциплины)
- •1.1. Цели и задачи дисциплины
- •1.2. Требования к уровню освоения содержания дисциплины
- •1.3. Объем дисциплины и виды учебной работы (в часах)
- •1.4. Содержание дисциплины
- •1.4.1. Разделы дисциплин и виды занятий
- •1.4.2. Содержание разделов дисциплины
- •Тема 1. Введение.
- •Тема 2. Основные понятия. Модели данных.
- •Тема 3. Язык sql. Формирование запросов к бд.
- •Тема 4. Основы проектирования баз данных.
- •1.5. Перечень практических занятий
- •1.6. График выполнения самостоятельных работ студентами
- •1.7. Рекомендуемая литература
- •2. Конспект лекций (семестр 5)
- •2.1. Введение в базы данных
- •2.2. Классификация моделей данных
- •2.3. Язык sql
- •2.4. Проектирование баз данных
- •2.5.Физические модели баз данных
- •2.6. Распределённая обработка данных
- •2.7. Обеспечение безопасности в бд
- •2.8. Современные направления исследований и разработок
- •3. Конспект лекций (семестр 6)
- •3.1. Представления
- •3.2. Компоненты языка Transact-sql
- •3.3. Курсоры
- •3.4. Хранимые процедуры
- •3.5. Триггеры
- •4. Задания для проведения семинарских занятий
- •Create table Salespeople - - продавцы
- •Create table Customers - - покупатели
- •Create table Orders - - заказы
- •2. Ввод данных
- •3. Компиляция table Offices без ограничения внешнего ключа
- •4. Ввод данных
- •5. Компиляция table Salesreps без ограничения внешнего ключа
- •11. Компиляция table Orders
- •12. Ввод данных
- •5. Контрольные и самостоятельные работы
- •I. Создать и описать 3 таблицы базы данных «Студенты»
- •II. Внести данные в каждую из таблиц, например:
- •III. Выполнить запросы:
- •Задание на «Курсоры»
- •Задание на «Хранимые процедуры»
- •Задание на «Триггеры»
- •6. Вопросы к экзамену (семестр 5)
- •Классификация моделей данных.
- •Распределённая обработка данных.
- •Практическое задание к билету № 1
- •7. Вопросы к зачёту(семестр 6)
- •8. Форма итогового контроля
2.3. Язык sql
Первый международный стандарт языка SQL был принят в 1989 г. (SQL/89 или SQL1), в 1992 г. был принят стандарт языка SQL (SQL/92 или SQL2). В 1999 г. появился стандарт SQL3. В SQL3 введены новые типы данных, при этом предоставляется возможность задания сложных структурированных типов данных, которые в большей степени соответствуют объектной ориентации. Появились стандарты на события и триггеры, которые раньше не затрагивались в стандартах.
Запрос на языке SQL состоит из одного или нескольких операторов, следующих один за другим и разделенных точкой с запятой.
Каждый столбец в любой таблице хранит данные определенных типов. Различают базовые типы данных:
строки символов фиксированной длины;
целые и вещественные числа;
дополнительные типы данных: строки символов переменной длины, денежные единицы, дату и время, логические данные.
Подавляющее большинство современных СУБД поддерживают тот или иной стандарт языка SQL, поэтому способы составления запросов, как правило, не зависят от конкретной СУБД. В то же время стоит понимать, что некоторые из разработчиков СУБД либо не полностью поддерживают стандарт, либо вносят свои дополнения.
Основные типы данных в SQL Server
NUMBER(N) – целые числа, где N – максимальное количество цифр в числе (например, тип данных NUMBER(3) позволит использовать числа из диапазона от –999 до 999).
NUMBER(N, M) – вещественные числа, где N – максимальное количество цифр в числе, M – максимальное количество цифр в дробной части (например, тип данных NUMBER(4,2) позволит использовать числа из диапазона от –99.99 до 99.99).
CHAR(N) – строки символов фиксированной длины, где N – максимальное число символов в строке (например, тип данных CHAR(5) позволит хранить строки максимум из пяти символов, причем под хранение каждой строки будет отведено 5 ячеек памяти, даже если строка будет состоять из меньшего числа символов).
VARCHAR2(N) – строки символов переменной длины, где N – максимально допустимое количество символов в строке (например, тип данных VARCHAR2(10) позволит хранить строки длинной не более 10 символов, причем память будет отведена именно под то количество символов, которое хранится в строке).
DATE – дата и время.
Структура языка SQL
Язык SQL делится на подмножества.
1) Язык определения данных (DDL – Data Definition Language) предоставляет пользователям средства указания типа данных и их структуры, а также средства задания ограничений для информации, хранимой в базе данных.
Операторы: CREATE, ALTER, DROP.
2) Язык манипулирования данными (DML – Data Manipulation Language) позволяет вставлять, обновлять и извлекать информацию из базы данных.
Операторы: SELECT, INSERT, DELETE, UPDATE.
3) Язык управления данными (DCL – Data Control Language) состоит из управляющих операторов.
Операторы – GRANT, REVOKE.
4) Язык управления транзакциями (TCL – Transaction Control Language) состоит из операторов, предназначенных для управления ходом выполнения транзакций.
Операторы: COMMIT, ROLLBACK, SAVEPOINT.
Подмножество языка DML
Создание таблицы
Оператор CREATE служит для создания любого типа объектов, из которых состоит база данных, в том числе таблиц1.
Синтаксис команды создания таблицы:
CREATE TABLE имя_таблицы(
поле1 тип1 [ограничения],
[поле2 тип2 [ограничения], …]);
Возможные ограничения в таблицах:
NOT NULL – значение атрибута должно быть определено (опция NOT NULL);
UNIQUE – значения атрибутов являются уникальными (уникальный ключ);
PRIMARY KEY – атрибут является первичным ключом (первичный ключ);
CHECK – определяет условие, которому должны удовлетворять значения атрибута (домен);
DEFAULT – присвоение значений «по умолчанию» для атрибутов.
Например:
CREATE TABLE Dealers1(
D_id NUMBER,
Name VARCHAR2(30),
Procent NUMBER(4,2),
Comments VARCHAR2(50) DEFAULT ‘no comments’);
Оператор ALTER
Оператор ALTER служит для изменения структуры любых объектов, из которых состоит база данных. В зависимости от типа объекта, изменяются и параметры команды ALTER. Далее рассмотрены примеры применения команды ALTER для изменения структуры объектов TABLE.
Для добавления атрибута к таблице применяется следующий синтаксис:
ALTER TABLE имя_таблицы ADD поле тип [ограничения];
Например, для добавления к таблице Dealers целого поля Age можно выполнить следующую команду:
ALTER TABLE Dealers ADD Age NUMBER(2);
Для удаления атрибута таблицы применяется следующий синтаксис:
ALTER TABLE имя_таблицы DROP COLUMN поле;
Например, для удаления поля Age из таблицы Dealers можно выполнить следующую команду:
ALTER TABLE Dealers DROP COLUMN Age;
Для изменения типа данных атрибута, размера типа данных или наличия опции NOT NULL используется следующие синтаксис:
ALTER TABLE имя_таблицы MODIFY поле тип [ограничения];
Оператор DROP
Оператор DROP служит для удаления объектов из базы данных. Синтаксис удаления любого типа объекта из базы данных, в том числе таблицы, выглядит следующим образом:
DROP тип объекта имя объекта;
Например, для удаления таблицы Dealers из базы данных необходимо выполнить следующую команду:
DROP TABLE Dealers;
Подмножество языка DML
Оператор выбора SELECT
Синтаксис оператора SELECT имеет следующий вид:
SELECT [ALL | DISTINCT] <список полей> | *
FROM <список таблиц>
[WHERE <условие фильтрации строк>]
[GROUP BY <условия группировки строк>]
[HAVING <условие фильтрации групп>]
[ORDER BY <условие сортировки результата запроса>]
Обязательными среди всех указанных параметров оператора SELECT являются параметры SELECT и FROM. Результатом выполнения оператора SELECT является набор данных (временная таблица), который затем либо передается пользователю, запросившему данные, либо используется как источник данных для другого оператора SELECT в качестве подзапроса.
Запросы с использованием единственной таблицы
SELECT список_всех_полей_таблицы | * FROM имя_таблицы;
Данная форма оператора SELECT используется, когда не нужно выполнять ни горизонтальную, ни вертикальную фильтрации. Символ «*» заменяет необходимость указания всех полей таблицы. Например:
Исключение дубликатов
Для исключения дубликатов из результирующего набора записей используют параметр DISTINCT, который указывают сразу после ключевого слова SELECT. Например:
SELECT DISTINCT Prod_id FROM Outgoing;
Сортировка результирующего набора данных
SELECT * FROM DEALERS ORDER BY Name, Procent;
Если после параметра ORDER BY указано более одного поля, сортировка сначала осуществляется по первому полю, потом, в случае наличия одинаковых значений, по второму и т.д. В приведенном примере результирующий набор данных сначала будет отсортирован по значениям поля Name, и в том случае, если в каких-то строках имена некоторых дилеров совпадут, эти строки отдельно будут отсортированы по значению поля Procent.
Выборка с использованием параметра WHERE
Параметр WHERE служит для реализации реляционной операции горизонтальной фильтрации, то есть отбора кортежей, или строк, удовлетворяющих определенному условию. Условие может быть составлено с использованием следующих конструкций:
операторы сравнения: =, < , > , <= , >= , <>;
булевы операторы: AND, OR, NOT;
оператор проверки на вхождение в множество: IN;
оператор проверки на вхождение в диапазон: BETWEEN;
оператор проверки на существование: EXISTS;
оператор проверки удовлетворению шаблону (только для символьных полей): LIKE;
операторы сравнения с NULL: IS NULL, IS NOT NULL;
агрегатные функции: COUNT, SUM, AVG, MAX, MIN;
константы и выражения;
подзапросы.
Использование параметров GROUP BY и HAVING
При помощи параметра GROUP BY оператора SELECT можно указать способ разбиения полученного в результате выполнения запроса набора записей на группы. В параметре GROUP BY задается столбец (или столбцы), по значениям которого будет производиться группировка. Например:
SELECT Name, COUNT(*) “Количество продаж”
FROM Managers m, Outgoing o
WHERE m.Man_id=o.Man_id
GROUP BY Name;
Параметр HAVING оператора SELECT используется для исключения групп из результирующего набора записей на основе результатов выполнения групповых функций. После параметра HAVING также как и после параметра WHERE указывается условие фильтрации, но в отличие от параметра WHERE, условия которого используются для фильтрации отдельных строк, условия, указанные в параметре HAVING используются для фильтрации целых групп. Например:
-- отбор менеджеров, осуществивших за последнюю неделю
-- не менее 10 сделок продажи
SELECT Name, COUNT(*) “Количество продаж”
FROM Managers m, Outgoing o
WHERE m.Man_id=o.Man_id AND o.Out_Date >= TRUNC(SYSDATE)-7
GROUP BY Name
HAVING COUNT(*) >= 10;
Запросы с использованием нескольких таблиц
Эквисоединение таблиц (=)
Эквисоединение таблиц выглядит следующим образом:
SELECT Managers.*, Contracts.*
FROM Managers, Contracts
WHERE Managers.Man_id = Contracts.Man_id;
Естественное соединение таблиц
Естественным соединением таблиц называется такое соединение, из которого исключены дубликаты столбцов, по которым проводилось эквисоединение (Managers.Man_id и Contracts.Man_id). Для исключения дубликатов в операторе SELECT необходимо явно указать только один из столбцов этих пар, принадлежащего главной таблице:
SELECT Managers.Man_id, D_id, Name, Hire_Date, Procent,
Comments, Parent_id, DayFrom, DayTo
FROM Managers, Contracts
WHERE Managers.Man_id = Contracts.Man_id;
Соединение таблиц с дополнительным условием
Наравне с уловными выражениями, предназначенными для указания способа соединения таблиц между собой, в параметре WHERE можно дополнительно указывать все описанные выше дополнительные условия фильтрации, объединенные с условными выражениями соединения при помощи оператора AND. Например:
-- получение информации о менеджерах и заключенных
-- ими контрактах за последнюю неделю
SELECT Name, DayFrom, DayTo
FROM Managers, Contracts
WHERE Managers.Man_id = Contracts.Man_id
AND DayFrom BETWEEN TRUNC(SYSDATE)-7 AND SYSDATE;
Внутреннее и внешнее объединение таблиц
Ранее были рассмотрены способы получения связанных между собой данных, находящихся в нескольких таблицах, при помощи комбинирования операций декартово произведения и горизонтальной фильтрации строк получившегося набора данных.
Кроме этого во многих СУБД существуют реализации операции внутреннего и внешнего условных соединений таблиц внутри одного запроса – INNER JOIN (внутреннее объединение), LEFT JOIN (полное левое объединение) и RIGHT JOIN (полное правое объединение).
Синтаксис применения операция объединения выглядит следующим образом:
SELECT список_полей
FROM таблица1 ( INNER | LEFT | RIGHT ) JOIN таблица2
ON таблица1.связующее_поле = таблица2.связующее_поле;
В результате выполнения внутреннего объединения из кортежей двух объединяемых таблиц остаются только те, для которых выполняется указанное условие. Например:
-- получение имен менеджеров и связанных с ними дилеров
-- (менеджеры, не связанные с дилерами и дилеры не связанные
-- с менеджерами исключатся из результата)
SELECT Managers.Name, Dealers.Name
FROM Managers INNER JOIN Dealers
ON Managers.D_id=Dealers.D_id;
При полном (внешнем) левом объединении из кортежей двух объединяемых таблиц остаются все кортежи таблицы, указанной слева от условного выражения, и кортежи правой таблицы, для которых выполняется указанное условие. Например:
-- получение всех менеджеров и связанных с ними дилеров,
-- включая менеджеров, не связанных с дилерами
SELECT Managers.Name, Dealers.Name
FROM Managers LEFT JOIN Dealers
ON Managers.D_id=Dealers.D_id;
При полном (внешнем) правом объединении из кортежей двух объединяемых таблиц остаются все кортежи таблицы, указанной справа от условного выражения, и кортежи левой таблицы, для которых выполняется указанное условие. Например:
-- получение всех дилеров и связанных с ними менеджеров,
-- включая дилеров, не связанных с менеджерами
SELECT Managers.Name, Dealers.Name
FROM Managers RIGHT JOIN Dealers
ON Managers.D_id=Dealers.D_id;
Вложенные подзапросы
Виды вложенных подзапросов
Вложенный подзапрос – это оператор SELECT, заключенный в круглые скобки и вложенный в команду языка DML, и использующийся в качестве источника данных для параметров SELECT, FROM, WHERE и HAVING. Каждый подзапрос в свою очередь может содержать в себе подзапрос и т.д. В каждой СУБД существуют ограничения на количество вложенных подзапросов, но обычно этих ограничений хватает, чтобы реализовать задачи любой известной сложности.
Вложенные подзапросы всегда применяются тогда, когда для выполнения основного запроса необходимо использовать данные, находящиеся в той же или других таблицах, которые невозможно получить при помощи соединения таблиц.
Все подзапросы можно условно разделить на однострочные и многострочные, а также на простые и коррелированные.
Однострочные подзапросы возвращают в качестве результата всегда одну строку, не больше и не меньше, поэтому над результатами выполнения таких запросов можно использовать операции сравнения.
Многострочные запросы в общем случае могут вернуть любое количество строк, поэтому над результатами таких подзапросов нельзя использовать операции сравнения (если один из аргументов операции сравнения будет являться пустым множеством или множеством, состоящим более чем из одного элемента, то запрос завершиться с ошибкой). Для таких подзапросов применимы операторы IN и EXISTS.
Простыми, или независимыми, подзапросами называются вложенные подзапросы, выполнение которых не зависит от внешнего запроса. Простые вложенные подзапросы обрабатываются системой «снизу вверх». Первым обрабатывается вложенный подзапрос самого нижнего уровня. Множество значений, полученное в результате его выполнения, используется при реализации подзапроса более высокого уровня и т.д.
Запросы с коррелированными вложенными подзапросами обрабатываются системой в обратном порядке. Сначала выбирается первая строка рабочей таблицы, сформированной основным запросом, и из нее выбираются значения тех столбцов, которые используются во вложенном подзапросе (вложенных подзапросах). Если эти значения удовлетворяют условиям вложенного подзапроса, то выбранная строка включается в результат. Затем выбирается вторая строка и т.д., пока в результат не будут включены все строки, удовлетворяющие вложенному подзапросу (последовательности вложенных подзапросов).
Следует отметить, что SQL обладает большой избыточностью в том смысле, что он часто предоставляет несколько различных способов формулировки одного и того же запроса.
Однострочные вложенные подзапросы
Однострочные вложенные подзапросы чаще всего применяются совместно с агрегатными функциями, результат вычисления которых и является единственным результатом подзапроса. Например:
-- получить имя менеджера, имеющего максимальное
-- значение размера комиссионных
SELECT Name FROM Managers WHERE Procent =
(SELECT Max(Procent) FROM Managers);
В данном случае вложенный подзапрос должен выполняться для каждой строки, обрабатываемой во внешнем запросе. Но очевидно, что результат вложенного запроса никоим образом не зависит от того, какая строка обрабатывается во внешнем запросе. В таких случаях, чтобы не выполнять один и тот же вложенный подзапрос, независящий от внешнего запроса, некоторые СУБД кэшируют (запоминают) результат, полученный в результате первого выполнения вложенного подзапроса, и подставляют для всех остальных строк таблиц, обрабатываемых во внешнем запросе.
-- получить имя менеджера, осуществившего
-- максимальное количество сделок продажи
SELECT Name FROM Managers
WHERE Man_id=
(SELECT Man_id FROM Outgoing
WHERE ROWNUM=1
GROUP BY Man_id
HAVING COUNT(Out_id)=
(SELECT MAX(COUNT(Out_id)) FROM Outgoing
GROUP BY Man_id));
В данном запросе в параметре WHERE указано условие ROWNUM=1, благодаря которому соблюдается условие выбора единственного значения во вложенном подзапросе, иначе вложенный подзапрос может вернуть более одной строки (если несколько менеджеров осуществили максимальное количество сделок), тогда результат выполнения подзапроса нельзя будет использовать в операциях сравнения.
Если необходимо вывести имена всех менеджеров, осуществивших одинаковое максимальное количество сделок продажи, можно выполнить следующий запрос:
SELECT m.Name FROM Managers m, Outgoing o
WHERE m.Man_id=o.Man_id
GROUP BY m.Name
HAVING COUNT(o.Out_id)=
(SELECT MAX(COUNT(Out_id)) FROM Outgoing
GROUP BY Man_id);
Многострочные вложенные подзапросы
Многострочные вложенные подзапросы используются для представления множества значений, исследование которых должно осуществляться в каком-либо предикате IN, что иллюстрируется в следующем примере:
-- определение имен менеджеров, которые не осуществили
-- ни одной сделки продажи
SELECT Name FROM Managers WHERE Man_Id NOT IN
(SELECT DISTINCT Man_Id FROM Outgoing);
Иногда с использованием многострочных подзапросов также можно решать задачи, которые обычно решаются простым соединением таблиц внутри одного запроса, например:
-- вывод имен менеджеров, осуществивших
-- хотя бы одну сделку продажи
SELECT Name FROM Managers WHERE Man_Id IN
(SELECT DISTINCT Man_Id FROM Outgoing);
-- аналогичная задача решается путем простого соединения
-- таблиц Managers и Outgoing
SELECT Name FROM Managers, Outgoing
WHERE Managers.Man_id=Outgoing.Man_id;
Коррелированные вложенные подзапросы
Коррелированные подзапросы характерны тем, что вложенный подзапрос не может быть обработан прежде, чем будет обрабатываться внешний подзапрос. Это связано с тем, что вложенный подзапрос зависит от значения внешнего запроса, а оно изменяется по мере того, как система проверяет различные строки таблицы, указанной во внешнем запросе. Например:
-- вывести имена менеджеров и даты сделок, в которых они
-- продали максимальное для себя количество товаров
SELECT Name, Out_Date FROM Managers m, Outgoing o
WHERE m.Man_id=o.Man_id AND o.Quantity=
(SELECT MAX(Quantity) FROM Outgoing
WHERE Man_id=m.Man_id);
Запросы с использованием EXISTS
Квантор EXISTS (существует) – понятие, заимствованное из формальной логики. В языке SQL предикат с квантором существования представляется выражением EXISTS (SELECT * FROM ...).
Такое выражение считается истинным только тогда, когда результат вычисления «SELECT * FROM ...» является непустым множеством, т.е. когда существует какая-либо запись в таблице, указанной во фразе FROM подзапроса, которая удовлетворяет условию WHERE подзапроса (практически этот подзапрос всегда будет коррелированным множеством). Например:
-- выдать наименования продуктов,
-- проданных менеджером с номером 1
SELECT Name FROM Products p
WHERE EXISTS
(SELECT Prod_id FROM Outgoing
WHERE Prod_id=p.Prod_id AND Man_id = 1);
Система последовательно выбирает строки таблицы PRODUCTS, выделяет из них значения столбцов Name и Prod_id, а затем проверяет, является ли истинным условие существования. То есть для каждой строки PRODUCTS проверяется условие, существует ли в таблице Outgoing хотя бы одна строка со значением Man_id=1 и значением Prod_id, равным значению Prod_id, выбранному из таблицы PRODUCTS. Если условие выполняется, то полученное значение столбца Name включается в результат.
Хотя этот пример только показывает иной способ формулировки запроса для задачи, решаемой и другими путями (с помощью оператора IN или соединения), EXISTS представляет собой одну из наиболее важных возможностей SQL. Фактически любой запрос, который выражается через IN, может быть альтернативным образом сформулирован также с помощью EXISTS. Однако обратное высказывание несправедливо.
-- реализация предыдущего запроса при помощи соединения
SELECT DISTINCT p.Name FROM Products p, Outgoing o
WHERE p.Prod_id=o.Prod_id AND o.Man_id = 1;
-- реализация предыдущего запроса при помощи оператора IN
SELECT Name FROM Products
WHERE Prod_id IN
(SELECT Prod_id FROM Outgoing
WHERE Man_id = 1);
Операции соединения подзапросов
Операции соединения подзапросов языка SQL – это реализация операторов реляционной алгебры объединения, пересечения и вычитания. Для выполнения этих операторов требуется, чтобы элементы обоих множеств были взаимно однородными, то есть содержали элементы одинаковой природы, или, если выражаться в терминах баз данных, строки, состоящие из атрибутов одинаковых типов. Сами множества строк создаются при помощи подзапросов.
Существует четыре операции соединения подзапросов:
UNION – объединение строк из обоих подзапросов; в результате остаются строки из обоих подзапросов, причем полностью повторяющиеся строки удаляются;
UNION ALL – объединение строк из обоих подзапросов; в результате остаются строки из обоих подзапросов, причем полностью повторяющиеся строки остаются;
INTERSECT – пересечение строк из обоих подзапросов; в результате остаются строки, присутствующие в обоих подзапросах;
MINUS – вычитание результатов одного подзапроса из результатов второго подзапроса.
Примеры использования операций соединения подзапросов:
-- получение списка наименования хотя бы раз
-- проданных или купленных товаров, исключая повторы
SELECT DISTINCT Name FROM Products, Outgoing
WHERE Products.Prod_id=Outgoing.Prod_id
UNION
SELECT DISTINCT Name FROM Products, Incoming
WHERE Products.Prod_id=Incoming.Prod_id;
-- получение списка менеджеров, осуществивших
-- хотя бы по одной сделке продажи и закупки товаров
SELECT Name FROM Managers, Outgoing
WHERE Managers.Man_id=Outgoing.Man_id
INTERSECT
SELECT Name FROM Managers, Incoming
WHERE Managers.Man_id=Incoming.Man_id;
Оператор ввода новых строк INSERT
Любая новая информация попадает в базу данных посредством использования оператора INSERT. Для добавления информации о каждом новом объекте используется один оператор INSERT, имеющий следующий синтаксис:
INSERT INTO имя_таблицы[(список_атрибутов)]
VALUES (список_значений);
Указание списка атрибутов является необязательным, но только в том случае, если список значений будет содержать значения для абсолютно всех атрибутов таблицы, и если указаны эти значения будут в порядке, соответствующему порядку указания атрибутов при создании таблицы.
Вставка множества записей осуществляется посредством использования подзапроса2 внутри оператора INSERT:
INSERT INTO имя_таблицы оператор_SELECT;
Оператор изменения значений полей UPDATE
Оператор UPDATE используется для изменения существующих строк таблиц. Оператор UPDATE имеет следующий синтаксис:
UPDATE имя_таблицы SET поле1=значение1, [поле2=значение2, …]
[WHERE условие_фильтрации_строк];
Параметр WHERE используется для отбора тех строк, в которых необходимо произвести изменения, описанные в параметре SET. Если параметр WHERE не будет указан, то изменению подвергнутся все строки указанной таблицы.
Оператор удаления строк DELETE
Оператор DELETE используется для удаления существующих строк таблиц. Оператор DELETE имеет следующий синтаксис:
DELETE FROM имя_таблицы
[WHERE условие_фильтрации_строк];
Параметр WHERE используется для отбора тех строк, которые необходимо удалить. Если параметр WHERE не будет указан, то будут удалены все строки указанной таблицы.