ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.10.2024
Просмотров: 11
Скачиваний: 0
10. Лекція: Робота з датою і часом:
В лекції розглядаються команди роботи з датою і часом в MySql.
Робота з датою
Дотепер ми мали справу з текстом (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, наприклад, такого вигляду. Кількість записів має складати не менше 20 (двадцяти).
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) Помістіть файл в каталог …\mysql\bin.
2) Виконайте в запрошенні DOS команду.
dosprompt> mysql employees <employee_per.dat
3) Запустіть програму клієнт mysql і перевірте, що таблиця була створена, за допомогою команди SHOW TABLES;.
Дані таблиці можна вивести за допомогою команди DESCRIBE.
mysql> DESCRIBE employee_per;
Результат запиту представлений на мал. 10.1.
Мал. 10.1. Проглядання даних таблиці
Зверніть увагу, що стовпець birth_date має тип стовпця date (дата). Тут також присутній ще один новий тип стовпця ENUM, який був розглянутий в лекційному розділі.
e-id: ідентифікатор співробітника, такий же як в таблиці employee_data
address: адреса співробітника
phone: номер телефону
p_email: особиста адреса e-mail
birth_date: дата народження
sex: Пол співробітника, чоловічий (M) або жіночий (F)
m_status: сімейний стан, в браку (У) або неодружений (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';
Результат запиту представлений на мал. 10.2.
Мал. 10.2. Пошук по даті народження
Примітка: MySQL вимагає, щоб дати були взяті в лапки.
Використовування операторів >= і <=
select e_id, birth_date from employee_per where birth_date >= '1970-01-01';
Результат запиту представлений на мал. 10.3.
Мал. 10.3. Пошук по даті народження з використанням оператора >=
Визначення діапазонів
select e_id, birth_date
from employee_per where
birth_date BETWEEN
'1969-01-01' AND '1974-01-01';
Результат запиту представлений на мал. 10.4.
Мал. 10.4. Пошук по даті народження в певному діапазоні
Той же запит можна представити без конструкції BETWEEN:
select e_id, birth_date
from employee_per where
birth_date >= '1969-01-01' AND birth_date <= '1974-01-01';
Результат запиту буде аналогічний мал. 10.4.
Завдання
Вивести ідентифікатори і дати народження всіх співробітників, які народилися до 1965 р.
Вивести ідентифікатори і дати народження співробітників, що народилися між 1970 і 1973 рр.
Мал. 10.5. Пошук по даті народження в певному діапазоні
Використовування Date для сортування даних
select e_id, birth_date
from employee_per
ORDER birth_date;
Результат запиту представлений на мал. 10.6.
Мал. 10.6. Пошук по даті народження в певному діапазоні
Вибір даних за допомогою Date
От як можна вибрати співробітників, які народилися в березні.
select e_id, birth_date
from employee_per
where MONTH(birth_date)= 3;
Результат запиту представлений на мал. 10.7.
Мал. 10.7. Пошук по місяцю
Можна також використовувати замість чисел назви місяців.
select e_id, birth_date
from employee_per
where MONTHNAME(birth_date)= 'January';
Результат запиту представлений на мал. 10.8.
Мал. 10.8. Використовування назви місяця в пошуку
Будьте уважні при використовуванні назв місяців, оскільки вони розрізняють регістр символів. Тому January працюватиме, а JANUARY не буде!
Аналогічно можна вибрати співробітників, що народилися в певний рік або в певний день.
select e_id, birth_date
from employee_per
where year(birth_date)= 1972;
Результат запиту представлений на мал. 10.10.
Мал. 10.10. Пошук по року народження
select e_id, birth_date
from employee_per
where DAYOFMONTH(birth_date)= 20;
Результат запиту представлений на мал. 10.10.
Мал. 10.10. Пошук по даті народження
Поточні дати
Раніше ми бачили, що поточну дату, місяць і рік можна вивести за допомогою аргументу CURRENT_DATE пропозицій DAYOFMONTH(), MONTH() і YEAR(), відповідно. Те ж саме можна використовувати для вибірки даних з таблиць.
select e_id, birth_date
from employee_per where
MONTH(birth_date)= MONTH(CURRENT_DATE);
Результат запиту представлений на мал. 10.11.
Мал. 10.11. Пошук по поточному місяцю
Завдання
Вивести ідентифікатори, дати народження і адреси e-mail співробітників, що народилися в квітні.
Вивести ідентифікатори, дати народження і імена подружжя співробітників, що народилися в 1968 р., і відсортуйте записи на основі імен їх подружжя.
Виведіть ідентифікатори співробітників, що народилися в поточному місяці.
Скільки в базі даних є унікальних років народження?
Вивести список унікальних років народження і число співробітників, що народилися в кожному такому році.
Скільки співробітників народилися в кожному місяці? Видача повинна містити назви місяців (не номери), і записи повинні бути впорядковані по убуванню по місяцях, починаючи від найбільшого номера.
Примітка: Значення NULL буде показано в горі. Більш детально значення NULL буде розглянуто нижче.
Тип стовпця 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;
Результат запиту представлений на мал. 10.18.
Мал. 10.18. Співробітники, що мають дітей
Приведена вище команда виводить ідентифікатори і кількість дітей співробітників, у яких є діти.
Завдання
Знайти і вивести ідентифікатори і імена подружжя всіх співробітників, які полягають в браку.
Змінити попереднє завдання так, щоб висновок був відсортований по іменах подружжя.
Скільки є співробітників кожної підлоги (чоловіків і жінок)?
Скільки співробітників полягають в браку, і скільки неодружених?
Знайдіть загальне число дітей.
Зробіть унікальні групи по кількості дітей і визначте число дітей кожної групи. Відсортуйте виведення груп по убуванню по кількості дітей.
Контрольні питання
-
В якому вигляді в MySQL представлені дати? Чи завжди формат вдображнння дати однаковий?
-
Які дії можна виконати над полем, що має тип дата?
-
Яким чином використовуються оператори порівняння при роботі з датою?
-
Яким чином використовуються оператори рівності і нерівності при роботі з датою?
-
Яким чином використовується оператор діапазону при роботі з датою? Що спільного і відмінного в роботі цього оператора при застосуванні до числових полів?
-
Яким чином здійснюється сортування дат?
-
В чому полягає призначення оператора date?
-
Яким чином працює оператор MONTHNAME?
-
Яким чином працює оператор year?
-
Чи можна отримати за допомогою MySQL поточну дату? Як це зробити?
-
В чому особливість роботи зі значенням NULL?