- •Концепции баз данных Системы управления файлами
- •Иерархические базы данных
- •Сетевые базы данных
- •Реляционные базы данных
- •Объектно-ориентированные базы данных
- •Объектно-реляционные базы данных
- •Инсталляция с помощью менеджера пакетов RedHat Linux
- •Загрузка MySql
- •Проверка исходных требований
- •Выбор версии
- •Инсталляция в Windows
- •Инсталляция вручную
- •Компиляция программы
- •Предоставление привилегий
- •Создание базы данных в Windows
- •Создание базы данных в Linux
- •Команда create database
- •Работа с таблицами
- •Использование базы данных
- •Создание таблицы
- •Синтаксис команды create table
- •Удаление таблиц
- •Синтаксис команды drop table
- •Числовые типы данных
- •Типы данных даты и времени
- •Типы данных datetime, date и timestamp
- •Тип данных time
- •Тип данных year
- •Символьные типы данных
- •Типы данных char и varchar
- •Типы данных blob и text
- •Тип перечисления enum
- •Тип множества set
- •Выбор правильного типа данных в столбце
- •Требования к памяти для различных типов столбцов
- •Запись данных в таблицы
- •Задания
- •Возможные решения
- •Выборка данных с помощью условий
- •Операторы больше и меньше
- •Задания
- •Возможные решения
- •Поиск текстовых данных по шаблону
- •Задания
- •Возможные решения
- •Предложение having
- •Задание
- •Возможное решение
- •Удаление записей из таблицы
- •Задания
- •Возможные решения
- •Операторы in и between
- •Задания
- •Возможные решения
- •Упорядочивание данных
- •Задания
- •Возможные решения
- •Ограничение количества извлекаемых данных
- •Извлечение подмножеств
- •Задания
- •Возможные решения
- •Ключевое слово distinct
- •Задания
- •Возможные решения
- •Изменение записей
- •Задания
- •Возможные решения
- •Поиск среднего значения и суммы Суммирование значений столбца с помощью функции sum
- •Вычисление среднего значения
- •Задания
- •Возможные решения
- •Работа с датой
- •Особенности типа данных Date
- •Операции с датами
- •Определение диапазонов
- •Строковые функции
- •Ascii(строка) ord(строка)
- •Concat(строка1, строка2, ...)
- •Concat_ws(разделитель, строка1, строка2, ...)
- •Conv(n, основание_начальное, основание_конечное)
- •Elt(n, строка1, строка2, строкаЗ, ...)
- •Field(строка, строка1, строка2, строка3, ...)
- •Find_in_set(строка, список_строк)
- •Substring_index(строка, разделитель, количество)
- •Trim([[both | leading | trailing] [удаляемая_строка] from] строка)
- •Uncompress(строка_для_распаковки)
- •Unhex(строка)
- •Битовые функции
- •Побитовое или ( | )
- •Побитовое и ( & )
- •Функции шифрования
- •Aes_encrypt(строка, строка_ключа) aes_decrypt(зашифрованная_строка, строка_ключа)
- •Decode(зашифрованная_строка, строка_пароля)
- •Encode(строка, строка_пароля)
- •Des_decrypt(зашифрованная_строка [, строка_ключа])
- •Des_encrypt(строка[, (номер_ключа | строка_ключа)])
- •Encrypt(строка [, нач])
- •Информационные функции benchmark(количество, выражение)
- •Charset(строка)
- •Coercibility(строка)
- •Collation(строка)
- •Md5(строка)
- •Password(строка)
- •Last_insert_id(выражение)
- •Прочие функции
- •Get_lock(строка, таймаут)
- •Inet_aton(выражение)
- •Inet_ntoa(выражение)
- •Is_free_lock(строка)
- •Master_pos_wait(имя_журнала, позиция_в_журнале [, таймаут])
- •Release_lock(строка)
- •Вывод данных из базы данных
- •Создаем ссылки на лету
- •Сохранение данных в базе данных
Определение диапазонов
select e_id, birth_date
from employee_per where
birth_date BETWEEN
'1969-01-01' AND '1974-01-01';
Результат запроса представлен на рис. 9.4.
Рис. 9.4. Поиск по дате рождения в определенном диапазоне
Тот же запрос можно представить без конструкции BETWEEN:
select e_id, birth_date
from employee_per where
birth_date >= '1969-01-01' AND birth_date <= '1974-01-01';
Результат запроса будет аналогичен рис. 9.4.
Задания
Вывести идентификаторы и даты рождения всех сотрудников, которые родились до 1965 г.
Вывести идентификаторы и даты рождения сотрудников, родившихся между 1970 и 1973 гг.
Возможные решения
mysql> select e_id, birth_date
-> from employee_per
-> where birth_date <= '1964-12-31';
mysql> select e_id, birth_date
-> from employee_per
-> where birth_date >= '1970-01-01'
-> and birth_date <= '1972-12-31';
Результат запроса представлен на рис. 9.5.
Рис. 9.5. Поиск по дате рождения в определенном диапазоне
Использование Date для сортировки данных
select e_id, birth_date
from employee_per
ORDER BY birth_date;
Результат запроса представлен на рис. 9.6.
Рис. 9.6. Поиск по дате рождения в определенном диапазоне
Выбор данных с помощью Date
Вот как можно выбрать сотрудников, которые родились в марте.
select e_id, birth_date
from employee_per
where MONTH(birth_date) = 3;
Результат запроса представлен на рис. 9.7.
Рис. 9.7. Поиск по месяцу
Можно также использовать вместо чисел названия месяцев.
select e_id, birth_date
from employee_per
where MONTHNAME(birth_date) = 'January';
Результат запроса представлен на рис. 9.8.
Рис. 9.8. Использование названия месяца в поиске
Будьте внимательны при использовании названий месяцев, так как они различают регистр символов. Поэтому January будет работать, а JANUARY не будет!
Аналогично можно выбрать сотрудников, родившихся в определенный год или в определенный день.
select e_id, birth_date
from employee_per
where year(birth_date) = 1972;
Результат запроса представлен на рис. 9.9.
Рис. 9.9. Поиск по году рождения
select e_id, birth_date
from employee_per
where DAYOFMONTH(birth_date) = 20;
Результат запроса представлен на рис. 9.10.
Рис. 9.10. Поиск по дате рождения
Текущие даты
Ранее мы видели, что текущую дату, месяц и год можно вывести с помощью аргумента CURRENT_DATE предложенийDAYOFMONTH(), MONTH() и YEAR(), соответственно. То же самое можно использовать для выборки данных из таблиц.
select e_id, birth_date
from employee_per where
MONTH(birth_date) = MONTH(CURRENT_DATE);
Результат запроса представлен на рис. 9.11.
Рис. 9.11. Поиск по текущему месяцу
Задания
Вывести идентификаторы, даты рождения и адреса e-mail сотрудников, родившихся в апреле.
Вывести идентификаторы, даты рождения и имена супругов сотрудников, родившихся в 1968 г., и отсортируйте записи на основе имен их супругов.
Выведите идентификаторы сотрудников, родившихся в текущем месяце.
Сколько в базе данных имеется уникальных годов рождения?
Вывести список уникальных годов рождения и число сотрудников, родившихся в каждом таком году.
Сколько сотрудников родились в каждом месяце? Выдача должна содержать названия месяцев (не номера), и записи должны быть упорядочены по убыванию по месяцам, начиная от наибольшего номера.
Возможные решения
mysql> select e_id, birth_date, p_email
-> from employee_per
-> where month(birth_date) = 4;
Результат запроса представлен на рис. 9.12.
Рис. 9.12. Сотрудники, родившиеся в апреле
или
mysql> select e_id, birth_date, p_email
-> from employee_per
-> where MONTHNAME(birth_date) = 'April';
Результат аналогичен рис. 9.12.
mysql> select e_id, birth_date, s_name
-> from employee_per where
-> YEAR(birth_date) = 1968
-> ORDER BY s_name;
Результат запроса представлен на рис. 9.13.
Рис. 9.13. Сотрудники 1968 года рождения, с сортировкой по именам
Примечание: Значение NULL показано в самом верху. Более подробно значение NULL будет рассмотрено ниже.
mysql> select e_id from employee_per
-> where month(birth_date) = month(current_date);
Результат запроса представлен на рис. 9.14.
Рис. 9.14. Сотрудники родившиеся в этом месяце
mysql> select distinct year(birth_date) from employee_per;
Результат запроса представлен на рис. 9.15.
Рис. 9.15. Уникальные годы рождения
mysql> select year(birth_date) as Year,
-> count(*) from employee_per
-> GROUP BY Year;
Результат запроса представлен на рис. 9.16.
Рис. 9.16. Количество сотрудников, родившихся в каждом году
mysql> select MONTHNAME(birth_date) AS Month,
-> count(*) AS Number
-> from employee_per
-> GROUP BY Month
-> ORDER BY Number DESC;
Результат запроса представлен на рис. 9.17.
Рис. 9.17. Количество сотрудников, родившихся в каждом месяце
Тип столбца Null
В этой лекции мы уже встречались с типом NULL. Теперь рассмотрим его подробнее.
Тип столбца NULL является специальным значением. Чтобы вставить значение NULL, удалите просто имя столбца из оператораINSERT. Столбцы содержат NULL по умолчанию, если только не определены как NOT NULL. Значение null может использоваться для целочисленных, а также текстовых или двоичных данных.
NULL нельзя сравнивать с помощью арифметических операторов. Сравнение для NULL можно делать с помощью IS NULL илиIS NOT NULL.
select e_id, children
from employee_per
where children IS NOT NULL;
Результат запроса представлен на рис. 9.18.
Рис. 9.18. Сотрудники, имеющие детей
Приведенная выше команда выводит идентификаторы и количество детей сотрудников, у которых есть дети.
Задания
Найти и вывести идентификаторы и имена супругов всех сотрудников, которые состоят в браке.
Изменить предыдущее задание так, чтобы вывод был отсортирован по именам супругов.
Сколько имеется сотрудников каждого пола (мужчин и женщин)?
Сколько сотрудников состоят в браке, и сколько холостых?
Найдите общее число детей.
Сделайте уникальные группы по количеству детей и определите число детей каждой группы. Отсортируйте вывод групп по убыванию по количеству детей.
Возможные решения
mysql> select e_id, s_name
-> from employee_per
-> where m_status = 'Y';
или
mysql> select e_id, s_name
-> from employee_per
-> where s_name IS NOT NULL;
mysql> select e_id, s_name
-> from employee_per
-> where m_status = 'Y'
-> ORDER BY s_name;
mysql> select e_id, s_name
-> from employee_per
-> where s_name IS NOT NULL
-> ORDER BY s_name;
mysql> select sex, count(*)
-> from employee_per
-> GROUP BY sex;
mysql> select m_status, count(*)
-> from employee_per
-> GROUP BY m_status;
mysql> select sum(children) from employee_per;
mysql> select children, count(*) AS
-> number from employee_per
-> GROUP BY children
-> ORDER BY number DESC;
Лекция 10.
