- •Лекция: Введение в MySql Содержание
- •Концепции баз данных Системы управления файлами
- •Иерархические базы данных
- •Сетевые базы данных
- •Реляционные базы данных
- •Объектно-ориентированные базы данных
- •Объектно-реляционные базы данных
- •2. Лекция: Подготовка к работе с MySql Содержание
- •Инсталляция вручную
- •Компиляция программы
- •Предоставление привилегий
- •Лекция: Создание базы данных, основы работы с таблицами
- •Создание базы данных в Windows
- •Создание базы данных в Linux
- •Команда create database
- •Работа с таблицами
- •Использование базы данных
- •Создание таблицы
- •Синтаксис команды create table
- •Удаление таблиц
- •Синтаксис команды drop table
- •Лекция: Типы данных столбцов
- •Числовые типы данных
- •Типы данных даты и времени
- •Типы данных datetime, date и timestamp
- •Тип данных time
- •Тип данных year
- •Лекция: Работа с таблицами. Внесение, извлечение, поиск и удаление данных
- •Запись данных в таблицы
- •Задания
- •Возможные решения
- •Выборка данных с помощью условий
- •Операторы больше и меньше
- •Задания
- •Возможные решения
- •Предложение having
- •Задание
- •Возможное решение
- •Удаление записей из таблицы
- •Лекция: Логические операторы
- •Задания
- •Возможные решения
- •8. Лекция: Математические функции
- •9. Лекция: Работа с датой и временем
- •Особенности типа данных Date
- •Операции с датами
- •10. Лекция: Работа со строками
- •Строковые функции
- •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(строка)
- •Upper(строка) ucase(строка)
- •11. Лекция: Дополнительные функции MySql
- •Битовые функции
- •Побитовое или ( | )
- •Побитовое и ( & )
- •Функции шифрования
- •Aes_encrypt(строка, строка_ключа) aes_decrypt(зашифрованная_строка, строка_ключа)
- •Decode(зашифрованная_строка, строка_пароля)
- •Encode(строка, строка_пароля)
- •Des_decrypt(зашифрованная_строка [, строка_ключа])
- •Информационные функции benchmark(количество, выражение)
- •Charset(строка)
- •Coercibility(строка)
- •Collation(строка)
- •Прочие функции
- •Get_lock(строка, таймаут)
- •Inet_aton(выражение)
- •Inet_ntoa(выражение)
- •Is_free_lock(строка)
- •Master_pos_wait(имя_журнала, позиция_в_журнале [, таймаут])
- •Release_lock(строка)
Рис. 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 children DESC;
10. Лекция: Работа со строками
Строковые функции
ASCII(строка)
ORD(строка)
BIN(N)
ВIT_LENGTH(строка)
CHAR(iV,...)
CHAR_LENGTH(строка)
CHARACTER_LENGTH(строка)
COMPRESS(строка_для_сжатия)
CONCAT(строка1, строка2, ...)
CONCAT_WS(разделитель, строка1, строка2, ...)
CONV(N, основание_начальное, основание_конечное)
ELT(N, строка1, строка2, строкаЗ, ...)
FIELD(строка, строка1, строка2, строка3, ...)
FIND_IN_SET(строка, список_строк)
HEX(Ч_или_С)
INSERT(строка, позиция, длина, новая_строка)
INSTR(строка, подстрока)
LEFT(строка, длина)
LENGTH(строка)
LOAD_FILE(имя_файла)
LOCATE(подстрока, строка)
LOCATE(подстрока, строка, позиция)
POSITION(подстрока IN строка)
LOWER(строка)
LCASE(строка)
LPAD(строка, длина, строка-заполнитель).
LTRIM(строка)
OCT(N)
QUOTE(строка)
REPEAT(строка, количество)
REPLACE(строка, строка_2, строка_3)
REVERSE(строка)
RIGHT(строка, длина)
RPAD(строка, длина, строка-заполнитель)
RTRIM(строка)
SOUNDEX(строка)
SPACE(N)
SUBSTRING(строка, позиция)
SUBSTRING(строка FROM позиция)
SUBSTRING(строка, позиция, длина)
SUBSTRING(строка FROM позиция FOR длина)
SUBSTRING_INDEX(строка, разделитель, количество)
TRIM([[BOTH | LEADING | TRAILING] [удаляемая_строка] FROM] строка)
UNCOMPRESS(строка_для_распаковки)
UNHEX(строка)
UPPER(строка)
UCASE(строка)
Функции сравнения строк
выражение LIKE шаблон [ESCAPE 'символ-отмены']
expr REGEXP pat
expr RLIKE pat
STRCMP(expr1,expr2)
Строковые функции
В этой лекции рассмотрим команды MySql, предназначенные для обработки строковых данных.
Ascii(строка) ord(строка)
Возвращает числовое значение первого символа строки строка. Возвращает 0, если строка является пустой. Возвращает NULL, если строка равна NULL. ASCII()работает с символами в диапазоне кодов от 0 до 255.
mysql> SELECT ASCII('2');
-> 50
mysql> SELECT ASCII(2);
-> 50
mysql> SELECT ASCII('dx');
-> 100
BIN(N)
Возвращает строковое представление двоичного значения N, где N - длинное целое (BIGINT). Это эквивалентно CONV(N, 10,2). ВозвращаетNULL, если N равно NULL.
mysql> SELECT BIN(12);
-> '1100'
ВIT_LENGTH(строка)
Возвращает длину строки строка в битах.
mysql> SELECT BIT_LENGTH('text');
-> 32
CHAR(iV,...)
Интерпретирует аргументы как целые и возвращает строку, состоящую из символов с кодами, заданными этими целыми. Значение NULLпропускаются.
mysql> SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql > SELECT CHAR(77,77.3,'77.3');
-> 'МММ'
CHAR_LENGTH(строка)
CHARACTER_LENGTH(строка)
Возвращает длину строки строка, измеренную в символах. Многобайтные символы считаются как один. Это значит, что для строки, состоящей из пяти двухбайтных символов, LENGTH() вернет 10, в то время какCHAR_LENGTH('') вернет 5.
COMPRESS(строка_для_сжатия)
Сжимает строку. Эта функция требует, чтобы MySQL был скомпилирован с библиотекой поддержки сжатия, такой как zlib. В противном случае возвращаемым значением всегда будет NULL.
Содержимое сжатой строки сохраняется следующим образом:
Пустая строка сохраняется как пустая строка.
Непустая строка сохраняется как четырехбайтовая длина несжатой строки (младший байт идет первым), за которой следует сжатая строка. Если строка завершается пробелом, добавляется дополнительный символ ' . ' во избежание усечения завершающих пробелов, которое имеет место при сохранении в столбцах CHAR илиVARCHAR. (Использовать для сохранения сжатых строк столбцы CHAR или VARCHAR не рекомендуется. Взамен лучше применять столбцы BLOB).