Файл: Лабораторна робота10.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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. Співробітники, що мають дітей

Приведена вище команда виводить ідентифікатори і кількість дітей співробітників, у яких є діти.

Завдання

Знайти і вивести ідентифікатори і імена подружжя всіх співробітників, які полягають в браку.

Змінити попереднє завдання так, щоб висновок був відсортований по іменах подружжя.

Скільки є співробітників кожної підлоги (чоловіків і жінок)?

Скільки співробітників полягають в браку, і скільки неодружених?

Знайдіть загальне число дітей.

Зробіть унікальні групи по кількості дітей і визначте число дітей кожної групи. Відсортуйте виведення груп по убуванню по кількості дітей.

Контрольні питання

  1. В якому вигляді в MySQL представлені дати? Чи завжди формат вдображнння дати однаковий?

  2. Які дії можна виконати над полем, що має тип дата?

  3. Яким чином використовуються оператори порівняння при роботі з датою?

  4. Яким чином використовуються оператори рівності і нерівності при роботі з датою?

  5. Яким чином використовується оператор діапазону при роботі з датою? Що спільного і відмінного в роботі цього оператора при застосуванні до числових полів?

  6. Яким чином здійснюється сортування дат?

  7. В чому полягає призначення оператора date?

  8. Яким чином працює оператор MONTHNAME?

  9. Яким чином працює оператор year?

  10. Чи можна отримати за допомогою MySQL поточну дату? Як це зробити?

  11. В чому особливість роботи зі значенням NULL?