17.3. Язык запросов sql
В то время, когда реляционные базы данных и СУБД только начинали развиваться, практически каждая СУБД предлагала свой язык для работы с базами данных, но со временем был стандартизирован один язык для работы с БД — структурированный язык запросов (Structured Query Language, SQL), который был принят как международный стандарт (ANSI SQL-92).
Хотя многие программные продукты сейчас поддерживают SQL, программный код редко можно перенести с одной СУБД на другую без модификаций, так как разработчики расширяют язык новыми командами, типами данных или не полностью реализуют стандарт.
Язык SQL включает:
-
операторы описания данных (создание/удаление/модификация таблиц, индексов, пакетов и т. п.);
-
операторы манипуляции данными (выборка, добавление, удаление, модификация записей в таблицах);
-
операторы определения доступа к данным;
-
операторы управления транзакциями.
В качестве примера рассмотрим несколько SQL-выражений на диалекте СУБД MySQL:
-
Создание таблицы STUDENT с четырьмя полями:
-
id целого числового типа (INT), обязательно непустое (NOT NULL), при необходимости автоматически генерируется на единицу больше последнего использованного значения (AUTO_INCREMENT), первичный ключ таблицы (PRIMARY_KEY(id));
-
first_name строкового типа VARCHAR длиной до 25 символов, может хранить пустое значение (NULL);
-
last_name строкового типа VARCHAR длиной до 45 символов, может хранить пустое значение (NULL);
-
faculty_id — целого числового типа, может хранить пустое значение.
-
CREATE TABLE STUDENT (
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(25) NULL,
last_name VARCHAR(45) NULL,
faculty_id INT NULL,
PRIMARY KEY (id)
)
-
Добавление записи о студенте: в выражении задан набор передаваемых полей (first_name, last_name) и их соответствующие значения ('Иван', 'Иванов'), поле id в этом случае получает автоматически сгенерированное значение, поле faculty_id остается пустым.
INSERT INTO STUDENT (first_name, last_name) VALUES ('Иван', 'Иванов')
-
Выборка записей о студентах с фамилией Иванов: в выражении указывается список возвращаемых полей id, first_name, last_name из таблицы STUDENT и условие для отбора записей WHERE last_name='Иванов'.
SELECT id, first_name, last_name
FROM STUDENT
WHERE last_name='Иванов'
-
Получение списка студентов с названиями факультетов:
-
выборка производится из двух таблиц STUDENT и FACULTY,
-
для таблиц заданы синонимы s и f соответственно;
-
так как в таблицах есть поля с одинаковым названием id, чтобы их различать, поля указываются с префиксом таблицы s.id, s.last_name, s.first_name, f.name;
-
оператор LEFT JOIN ON означает, что производится выборка всех записей из таблицы STUDENT, для каждой из них в таблице FACULTY находится строка для которой s.faculty_id = f.id, если такой строки нет или s.faculty_id содержит пустое значение, то f.name будет содержать пустое значение (NULL).
-
SELECT s.id, s.last_name, s.first_name, f.name
FROM STUDENT s LEFT JOIN FACULTY f ON s.faculty_id = f.id
-
Корректировка имени студента с идентификатором 1:
UPDATE STUDENT SET first_name='Петр' WHERE id=1
-
Удаление записи о студенте с идентификатором 1:
DELETE FROM STUDENT WHERE id=1
-
Удаление таблицы:
DROP TABLE STUDENT
- Раздел 16. Многоуровневые и многослойные приложения. Шаблон проектирования Модель-Представление-Контроллер
- 16.1. Многоуровневые приложения
- 16.2. Многослойные приложения
- 16.3. Шаблон проектирования Модель-Представление-Контроллер
- 16.4. Реализация шаблона Модель-Представление-Контроллер в веб-приложениях
- Раздел 17. Базы данных в веб-приложениях
- 17.1. Основные понятия баз данных
- 17.2. Системы управления базами данных
- 17.3. Язык запросов sql
- Транзакции
- 17.4. Доступ к базам данных из Java
- Пример: база данных студентов
- Поддержка транзакций
- 17.5. Объектно-реляционная проекция
- Лекция 18. Безопасность Интернет-приложений
- 18.1. Аутентификация и авторизация
- 18.2. Понятие безопасности Интернет-приложений
- 18.3. Классы атак сетевого уровня Сниффинг пакетов
- Подмена ip-адреса
- Отказ в обслуживании
- Сетевая разведка
- 18.4. Криптографические технологии
- 18.5. Уязвимости уровня приложений
- Уязвимости системы аутентификации
- Уязвимости системы авторизации
- Атаки на стороне клиента
- Выполнение кода на сервере
- Разглашение информации
- Злоупотребление функциональными возможностями
- Наиболее распространенные уязвимости
- 18.6. Резюме