- •Varchar [(длмня)], char varying [(длина)],
- •Числовые типы данных
- •Дата и время
- •Неопределенные или пропущенные данные (noll)
- •Используемые термины и обозначения
- •Команды манипулирования данными
- •3.2. Использование подзапросов в insert
- •Создание таблиц базы данных
- •Создание объектов базы данных
- •Зміна структури таблиці
- •Внимание
- •Зміна структури таблиць
- •Заняття 4. Вставка записів у таблиці
- •Ограничение not null
- •2.4. Листинг 2.4. Команда создания таблицы Orders
- •Перегляд окремих записів та окремих полів у таблиці
- •Використання кількох умов відбору записів
- •Ітоги . Що ми узнали про перегляд даних у таблицях
- •Лекція на тему: Оновлення та вилучення записів в субд MySql.
- •3.2. Использование подзапросов в insert
- •Вилучення записів з таблиць
- •Лекція на тему: Вибірка даних з субд MySql.
- •Просте об'єднання двох таблиць
- •Самостійно.
- •Об'єднання трьох і більше таблиць
- •Об'єднання таблиць за остачею
- •Підсумок
- •Лекція на тему: Групування даних. Запити з обчисленнями.
- •Обчислення середнього значення: функція avg
- •Підрахунок кількості записів: функція count
- •Підрахунок суми значень: функція sum()
- •Пошук найбільшого та найменшого значення: функції max та min
Ограничение not null
Чтобы запретить возможность использования в поле NULL-значений, можно при создании таблицы командой CREATE TABLE указать для соответствующего столбца ключевое слово NOT NULL.
Это ограничение применимо только к столбцам таблицы. Как уже говорилось выше, NULL — это специальный маркер, обозначающий тот факт, что поле пусто. Но он полезен не всегда. Первичные ключи, например, в принципе не должны содержать
NULL-значений (быть пустыми), поскольку это нарушило бы требование уникальности первичного ключа (более строго — функциональную зависимость атрибутов таблицы от первичного ключа). Во многих других случаях также необходимо, чтобы поля
обязательно содержали определенные значения. Если ключевое слово NOT NULL размещается непосредственно после типа данных (включая размер) столбца, то любые попытки оставить значение поля пустым (ввести в поле NULL-значение) будут отвергнуты системой.
Например, для того, чтобы в определении таблицы STUDENT
запретить использование NULL-значений для столбцов STUDENT_ID,
SURNAME и NAME, можно записать следующее:
CREATE TABLE STUDENT
(STUDENT_ID INTEGER NOT NULL,
SURNAME CHAR (25) NOT NULL,
NAME CHAR (10) NOT NULL,
STIPEND INTEGER,
KURS INTEGER,
CITY CHAR (15),
BIRTHDAY DATE,
UNIV_ID INTEGER);
Важно помнить: если для столбца указано NOT NULL, то при использовании команды INSERT обязательно должно быть указано конкретное значение, вводимое в это поле. При отсутствии ограничения NOT NULL в столбце значение может отсутствовать, если только не указано значение столбца по умолчанию (DEFAULT). Если при создании таблицы ограничение NOT NULL не было указано, то его можно указать позже, используя коман-
ду ALTER TABLE. Однако для того, чтобы для вновь вводимого с помощью команды ALTER TABLE столбца можно было задать ограничение NOT NULL, таблица, в которую добавляется столбец, должна быть пустой.
2.4. Листинг 2.4. Команда создания таблицы Orders
ZREATE TABLE Orders
(id SERIAL,
date DATE,
product_іd BIGINT UNSIGNED NOT NULL,
qty INT UNSIGNED,
amount DECIMAL(10,2),
customer_іd BIGINT UNSIGNED,
PRIMARY KEY (id),
FOREIGN KEY (product_іd) REFERENCES Products (id)
ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (customer_іd) REFERENCES Customers (id)
ON DELETE RESTRICT ON UPDATE CASCADE)
ENGINE InnoDB CHARACTER SET utf8;
Особенностью таблицы Orders является наличие внешних ключей: столбец product_id (товар) содержит номера товаров из таблицы Products, а столбец customer_id (клиент) — номера клиентов из таблицы Customers (см. также 72.6л. 1.2 в главе 1). Поскольку номера товаров и клиентов являются большими целыми положительными числами, столбцам product_id и customer_id мы обозначили тип BIGINT UNSIGNED.
Далее, чтобы обеспечить автоматическое поддержание целостности связей (о целостности мы рассказывали в главе 1), мы сообщили программе MySQL, какому первичному ключу соответствует каждый внешний ключ. Так, конструкция FOREIGN KEY (customer_id) REFERENCES Customers (id) означает, что в столбце customer_id могут содержаться только значения из столбца id таблицы Customers и неопределенные значения (NULL), а остальные значения запрещены. Для столбца product_id мы задали аналогичное ограничение и присвоили этому столбцу свойство NOT NULL, чтобы запретить регистрировать заказы с неопределенным товаром. Дополнительно мы указали для каждой из связей правила поддержания целостности (их мы также рассматривали в главе 1). Пра-
віло ON DELETE RESTRICT означает, что нельзя удалить запись о клиенте, если у этого клиента есть зарегистрированный заказ, и нельзя удалить запись о товаре, если этот товар был кем-то заказан. Правило ON UPDATE CASCADE означает, что
при изменении номера клиента в таблице Customers или номера товара в таблице Products соответствующие изменения вносятся и в таблицу Orders.
ПРИМЕЧАНИЕ
Обратите внимание, что таблицу Orders мы создали в последнюю очередь, так как первичные ключи в таблицах Customers и Products должны быть созданы раньше, чем ссылающиеся на них внешние ключи в таблице Orders. Впрочем, можно было бы создать таблицы без внешних ключей в любой последовательности, а затем добавить внешние ключи с помощью команды ALTER TABLE, которую мы рассмотрим в подразделе «Изменение структуры таблицы».
Лекція на тему: Перегляд записів у таблицях (прості запити на виборку)
Для перегляду інформації, що міститься у базі даних необхідно вміти скласти і виконати відповідний запит на мові SQL.
Всі запити складаються із використанням оператора SELECT. Цей оператор дозволяє вибирати з таблиць дані, що відповідають вказаному критерію.
Загальна форма оператора SELECT:
SELECT назви_полів FROM назва_таблиці
WHERE умова_відбору_записів
GROUP BY порядок_групування__записів
HAVING критерії_пошуку_записів
ORDER BY порядок_сортування_записів
LIMIT критерії_обмеження_кількості_записів;
Перегляд усієї таблиці
Інструкція SQL:
SELECT * FROM назва_таблиці;
Використання цієї інструкції розглянуто на попередньому занятті.
Перегляд окремих полів у таблиці
Для того, щоб переглянути не всю таблицю, а лише її окремі поля необхідно після оператора SELECT указати через кому назви потрібних полів.
Інструкція SQL:
SELECT назви_полів FROM назва_таблиці;
►►Виберіть прізвища та телефони користувачів з таблиці customers. Команда:
mysql> select name, phone from customers;
Відповідь сервера:
name |
phone |
Иван Иваненко Петро Петренко Сидор Сидоренко |
1-23-45 3-45-67
|
►► 3 таблиці books виберіть відомості про авторів, назви та рік видання книг. Команда:
mysql> select author, title, year from books;
►►Самостійноз З таблиці books виберіть відомості про назви, рік видання та ціну книг.
Перегляд окремих записів у таблиці
Для того, щоб у таблиці переглянути не всі, а лише окремі записи, необхідно у запиті вказати критерій відбору потрібних записів. Для цього призначена інструкція WHERE, що входить до складу оператору SELECT.
Інструкція SQL для вибору окремих записів:
SELECT * FROM назва_таблиці
WHERE умова_відбору_записів;
Крім того, можна встановити обмеження на кількість записів, які будуть переглянуті. Для цього необхідно вказати потрібну кількість записів в інструкції LIMIT оператору SELECT.
Інструкція SQL для вибору перших N записів має такий вид:
SELECT * FROM назва_таблиці
LIMIT N;
Для запису умов відбору застосовують такі оператори:
Оператор |
Значення |
Приклад використання |
= |
дорівнює |
customerlD = 3 |
!= або <> |
не дорівнює |
quantity != 0 |
> |
більше |
amount > 100.00 |
< |
менше |
amount < 100.00 |
>= |
більше або дорівнює |
amount >= 60.0 0 |
<= |
менше або дорівнює |
amount <= 60.0 0 |
BETWEEN a AND b |
величина між А та В |
amount BETWEEN 50.00 AND 90.00 |
IS NULL |
порожне поле |
review IS NULL |
IS NOT NULL |
не порожне поле |
review IS NOT NULL |
IN (множина значень) |
міститься у множині значень |
name IN ("Иван","Петро") |
NOT IN (множина значень) |
не міститься у множині значень |
name NOT IN ("Иван","Петро") |
LIKE ("Даний вираз%") |
містить "Даний вираз" |
title LIKE ("MySQL%") |
NOT LIKE |
не містить |
title NOT LIKE |
("Даний вираз%") |
"Даний вираз" |
("MySQL%") |
►► 3 таблиці customers виберіть відомості про користувача, що має ідентифікатор customerlD рівний 3. Команда:
mysql> select * from customers
where customerlD = 3;
Відповідь сервера:
CustomeІD |
Name |
Address |
|
Phone |
3 |
Сидор Сидоренко |
г. Полтава, |
вул . Жовтнева 3, кв. 3 |
3-45-67 |
►► 3 таблиці orders виберіть всі замовлення, які зробив користувач, що має ідентифікатор customerlD рівний 3. Команда:
mysql> select * from orders
where customerlD = 3;
Відповідь сервера:
OrderlD |
CustomerlD |
Amount |
Date |
1 4 |
3 3 |
60.00 222.00 |
2003-09-01 2003-09-25
|
►► 3 таблиці order_iterns виберіть відомості про замовлення 4 (воно має ідентифікатор OrderlD рівний 4). Команда:
Mysql > select * from order_items where OrderlD = 4;
Відповідь сервера:
ISBN |
OrderlD |
Quantity |
5-8459-0291-6 |
4 |
1 |
966-539-320-0 |
4 |
2 |
966-7393-98-4 |
4 |
1 |
►► 3 таблиці orders виберіть перші 3 записи. Команда:
mysql> select * from orders
LIMIT 3;
Відповідь:
OrderlD |
CustomerlD |
Amount |
Date |
1 |
3 |
60.00 |
2003-09-01 |
2 |
1 |
144.00 |
2003-09-10 |
3 |
2 |
42.00 |
2003-09-15 |
3 rows in set (0.05 sec)
►►3 таблиці order items виберіть всі дані, крім даних про замовлення 4, яке має ідентифікатор OrderlD рівний 4. Команда:
mysql> select * from order__items where orderlD <> 4;
Відповідь сервера:
Orderid |
customerid |
amount |
date |
1 2 3 |
3 1 2 |
60.00 144.00 42.00
|
2003-09-01 2003-09-10 2003-09-15 |
►►3 таблиці orders виберіть всі замовлення на суму не менше 100.00. Команда:
mysql> select * from orders where amount >= 100.00;
Відповідь сервера:
OrderlD |
CustomerlD |
Amount |
Date |
2 |
1 |
144.00 |
2003-09-10 |
1 row in set (0.06 sec)
Самостійно. Складіть запит і виберіть з таблиці customers відомості про всіх користувачів, крім користувача Иваненка (ідентифікатор customer ID цього користувача рівний 1).
Самостійно. Складіть запит і виберіть з таблиці orders всі замовлення на суму не більше 100.00.
Самостійно. З таблиці order_items виберіть відомості про всі замовлення, починаючи з другого (тобто ті, що мають ідентифікатор OrderlD більший або рівний 2).
