- •Лекция: Введение в 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(строка)
Работа с датой
Особенности типа данных Date
Операции с датами
Использование операторов = и !=
Использование операторов >= и <=
Определение диапазонов
Задания
Возможные решения
Использование Date для сортировки данных
Выбор данных с помощью Date
Текущие даты
Задания
Возможные решения
Тип столбца Null
Задания
Возможные решения
До сих пор мы имели дело с текстом (varchar) и числами (int). Чтобы понять тип данных date (дата) создадим еще одну таблицу, аналогично тому, как была создана первая таблица.
Создадим в текстовом редакторе файл employee_per.dat, который содержит оператор создания таблицы CREATE следующего вида:
CREATE TABLE employee_per (
e_id int unsigned not null primary key, -- идентификационный номер
address varchar(60), -- адрес
phone int, -- номер телефона
p_email varchar(60), -- адрес e-mail
birth_date DATE, -- дата рождения
sex ENUM('M', 'F'), -- пол
m_status ENUM('Y','N'), -- статус
s_name varchar(40), -- имя
children int); -- количество детей
и последовательность операторов INSERT, например, такого вида. Количество записей может быть произвольно.
INSERT INTO employee_per (e_id, address, phone, p_email,
birth_date, sex, m_status, s_name, children) values (1,
'Арбат, 12', 7176167, 'anna@yandex.ru', '1972-03-16',
'F', 'Y', 'Анна Петрова', 2);
Затем загрузим этот файл, как мы делали раньше, в базу данных.
В системе Windows
1). Поместите файл в каталог c:\mysql\bin.
2). Выполните в приглашении DOS команду.
dosprompt> mysql employees <employee_per.dat
3). Запустите программу клиента mysql и проверьте, что таблица была создана, с помощью команды SHOW TABLES;.
В системе Linux
1). Перейдите в каталог, в котором находится файл.
2). В приглашении введите следующую команду:
$prompt> mysql employees <employee_per.dat -u your_username -p
3). Проверьте, что таблица была создана с помощью команды SHOW TABLES; в программе клиента mysql.
Данные таблицы можно вывести с помощью команды DESCRIBE.
mysql> DESCRIBE employee_per;
Результат запроса представлен на рис. 9.1.
Рис. 9.1. Просмотр данных таблицы
Обратите внимание, что столбец birth_date имеет тип столбца date (дата). Здесь также присутствует еще один новый тип столбца ENUM, который был рассмотрен в лекции 4.
e-id: идентификатор сотрудника, такой же как в таблице employee_data
address: адрес сотрудника
phone: номер телефона
p_email: личный адрес e-mail
birth_date: дата рождения
sex: Пол сотрудника, мужской (M) или женский (F)
m_status: семейное положение, в браке (Y) или холост (N).
s_name: Имя супруга (NULL, если сотрудник холост)
children: Число детей (NULL, если детей нет)
Особенности типа данных Date
Даты в MySQL всегда представлены с годом, за которым следует месяц и затем день месяца. Даты часто записывают в виде YYYY-MM-DD, где YYYY -- 4 цифры года, MM -- 2 цифры месяца и DD -- 2 цифры дня месяца.
Операции с датами
Тип столбца даты позволяет выполнять несколько операций, таких как сортировка, проверка условий с помощью операторов сравнения и т.д.
Использование операторов = и !=
select p_email, phone from employee_per where birth_date = '1969-12-31';
Результат запроса представлен на рис. 9.2.
Рис. 9.2. Поиск по дате рождения
Примечание: MySQL требует, чтобы даты были заключены в кавычки.
Использование операторов >= и <=
select e_id, birth_date from employee_per where birth_date >= '1970-01-01';
Результат запроса представлен на рис. 9.3.
Рис. 9.3. Поиск по дате рождения с использованием оператора >=Определение диапазонов
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.