- •Лабораторные работы 1,2.
- •1. 1. Основные характеристики субд MySql.
- •1.2. Установка MySql
- •Проверка исходных требований
- •Выбор версии
- •1.4.Основные команды создания баз данных, основы работы с таблицами
- •Создание базы данных в Windows
- •Удаление баз данных.
- •1. 5. Типы данных столбцов
- •Требования к памяти для символьных типов приведены в таблице.
- •2.1. Запись данных в таблицы
- •В системе Windows
- •2.2. Запрос данных из таблицы MySql select
- •Выборка данных с помощью условий
- •Операторы больше и меньше
- •Поиск текстовых данных по шаблону с помощью предложения where и оператора like.
- •2.3. Логические операторы
- •Операторы in и between
- •2.4 Команды обработки данных: поиск максимального, минимального и среднего значений, нахождение суммы и количества записей Поиск минимального и максимального значений
- •Именование столбцов as
- •Подсчет числа записей
- •Предложения group by и having
- •Удаление записей из таблицы
- •Упорядочивание данных order by
- •Ограничение количества извлекаемых данных
- •Ключевое слово distinct
- •Вложенные запросы
- •Изменение записей update
- •3.1. Математические функции MySql
- •3.2.Работа с датой и временем
- •3.3. Работа со строками
- •Insert(строка, позиция, длина, новая_строка)
- •Instr(строка, подстрока)
- •Функции сравнения строк
- •3.4. Дополнительные функции MySql
- •Битовые функции
- •Прочие функции
- •3.3.4.9 Использование нескольких таблиц
- •3.3.4.6 Работа с значениями null
- •3.3.4.9 Использование нескольких таблиц
- •Делаем дамп (бэкап) базы данных, используя утилиту mysqldump
Ограничение количества извлекаемых данных
Далее рассмотрим, как ограничить число записей, выводимых оператором SELECT.
По мере увеличения таблиц возникает необходимость вывода только подмножества данных. Этого можно добиться с помощью предложения LIMIT.
Общая форма оператора LIMIT имеет следующий вид:
SELECT (что-нибудь) from таблица LIMIT начальная строка, извлекаемое число записей;
Например, чтобы вывести из таблицы имена только первых пяти сотрудников, используется оператор LIMIT с аргументом равным 5.
SELECT f_name, l_name from employee_data LIMIT 5;
Имена первых пяти сотрудников. Это первые пять записей таблицы
Можно соединить оператор LIMIT с оператором ORDER BY. Таким образом, следующий оператор выведет четверых самых молодых сотрудников компании.
SELECT f_name, l_name, age from employee_data ORDER BY age LIMIT 4;
Четверо самых молодых сотрудников компании
Аналогично можно вывести двух самых старших сотрудников.
SELECT f_name, l_name, age from employee_data ORDER BY age LIMIT 2;
Двое самых старших сотрудников
LIMIT можно использовать также для извлечения подмножества данных, используя дополнительные аргументы.
SELECT f_name, l_name from employee_data LIMIT 6,3;
Извлечение трёх строк начиная с 6-й. Будут извлечены три строки, начиная с шестой.
Ключевое слово distinct
Рассмотрим теперь, как выбрать и вывести записи таблиц MySQL с помощью ключевого слова DISTINCT (РАЗЛИЧНЫЙ), использование которого исключает появление повторяющихся данных.
Чтобы вывести все должности базы данных компании, можно выполнить следующий оператор:
select title from employee_data;
Все должности базы данных компании
Можно видеть, что список содержит повторяющиеся данные. Предложение SQL DISTINCT выводит только уникальные данные. Вот как оно используется.
select DISTINCT title from employee_data;
Все должности базы данных компании без повторов. Из этого можно видеть, что в компании имеется 11 уникальных должностей.
Уникальные записи можно также отсортировать с помощью ORDER BY.
select DISTINCT age from employee_data ORDER BY age;
Значения возраста сотрудников компании без повторов
DISTINCT часто используется вместе с функцией COUNT, которая будет рассмотрена далее.
Вложенные запросы
В SQL предусмотрена возможность объединять запросы в один путем превращения одного из них в подзапрос (вложенный запрос).
В одном запросе может быть несколько подзапросов, синтаксис у такого запроса следующий:
SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN
(SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN
(SELECT имя_столбца FROM имя_таблицы WHERE условие))
Пример:
Узнаем, кто создал тему «велосипеды» на форуме:
То есть, после ключевого слова WHERE, в условие мы записываем еще один запрос. MySQL сначала обрабатывает подзапрос, возвращает id_author=2, и это значение передается в предложение WHERE внешнего запроса.
Обратите внимание, что подзапросы могут выбирать только один столбец, значения которого они будут возвращать внешнему запросу. Попытка выбрать несколько столбцов приведет к ошибке.
Пример 2:
Узнаем, какие сообщения на форуме оставлял автор темы «велосипеды»:
Теперь усложним задачу, узнаем, в каких темах оставлял сообщения автор темы "велосипеды":
Давайте разберемся, как это работает.
Сначала MySQL выполнит самый глубокий запрос:
SELECT id_author FROM topics WHERE topic_name='велосипеды'
Полученный результат (id_author=2) передаст во внешний запрос, который примет вид: SELECT id_topic FROM posts WHERE id_author IN (2);
Полученный результат (id_topic:4,1) передаст во внешний запрос, который примет вид: SELECT topic_name FROM topics WHERE id_topic IN (4,1);
И выдаст окончательный результат (topic_name: о рыбалке, о рыбалке). Т.е. автор темы "велосипеды" оставлял сообщения в теме "О рыбалке", созданной Сергеем (id=1) и в теме "О рыбалке", созданной Светой (id=4).
Есть два момента, на которые стоит обратить внимание:
Не рекомендуется создавать запросы со степенью вложения больше трех. Это приводит к увеличению времени выполнения и к сложности восприятия кода.
Приведенный синтаксис вложенных запросов, скорее наиболее употребительный, но вовсе не единственный. Например, мы могли бы вместо запроса
SELECT name FROM users WHERE id_user IN
(SELECT id_author FROM topics WHERE topic_name='велосипеды');
написать
SELECT name FROM users WHERE id_user =
(SELECT id_author FROM topics WHERE topic_name='велосипеды');
Т.е. мы можем использовать любые операторы, используемые с ключевым словом WHERE.
