Практикум №2 - Типы данных
Числовые поля
1. Задача - Товары в магазине
Создайте таблицу products для хранения информации о товарах в магазине.
Выберите оптимальные поля для хранения данных в соответствии с условиями:
idтипаINT— только положительные числа;name— символьный тип до100символов (включительно);count— количество товара на складе (до200штук), целое положительное;price— цена в рублях без копеек (не более1млн рублей). Только положительные значения.
Заполните таблицу тремя товарами:
Холодильник, 10 штук, 50 000 рублей.
Стиральная машина, 0 штук, 23 570 рублей.
Утюг, 3 штуки, 7300 рублей
Решение задачи
CREATE TABLE products (
id INT UNSIGNED,
name VARCHAR(100),
count TINYINT UNSIGNED,
price MEDIUMINT UNSIGNED
);
INSERT INTO products (id, name, count, price)
VALUES
(1 ,"Холодильник",10 ,50000),
(2 ,"Стиральная машина",0 ,23570),
(3 ,"Утюг",3 ,7300)
;
2. Задача - Фильмы
Создайте таблицу films с информацией о фильмах. Выберете оптимальные поля для хранения данных в соответствии с условиями:
idтипаINT, только положительные числа.name— символьное поле длиной100.rating— рейтинг, вещественное число. Принимает положительные значения от0до10.country— страна фильма. Символьное поле, содержащее ровно2символа.
Добавьте в неё записи так, чтобы получалась таблица ниже:
| id | name | rating | country |
|---|---|---|---|
| 1 | Большая буря | 3.45 | RU |
| 2 | Игра | 7.5714 | US |
| 3 | Война | 10.0 | RU |
Решение задачи
CREATE TABLE films (
id INT UNSIGNED,
name VARCHAR(100),
rating FLOAT(6,4) UNSIGNED,
country CHAR(2)
);
INSERT INTO films (id, name, rating, country)
VALUES
(1 ,"Большая буря",3.45 ,"RU"),
(2 ,"Игра",7.5714 ,"US"),
(3 ,"Война",10.0 ,"RU")
;
Строковые поля
3. Задача - Книги
Создайте таблицу books для хранения данных о книгах. В таблице должны быть следующие поля:
id— идентификатор, целое положительное.name— название, строка длиной не более100символов.description— описание книги длиной не более1000символов.isbn— международный стандартный книжный номер.10или13знаков.
Добавьте записи так, чтобы получалась таблица ниже:
| id | name | description | isbn |
|---|---|---|---|
| 1 | MySQL 8 | Хорошая книга. | 5941579284 |
| 2 | Изучаем SQL | Полезная книга. | 5932860510 |
| 3 | Изучаем Python. 4-е издание | Подробная книга о Python. | 9785932861592 |
Решение задачи
CREATE TABLE books (
id INT UNSIGNED,
name VARCHAR(100),
description VARCHAR(1000),
isbn VARCHAR(13)
);
INSERT INTO books (id, name, description, isbn)
VALUES
(1, 'MySQL 5','Хорошая книга.','5941579284'),
(2, 'Изучаем SQL','Полезная книга.','5932860510'),
(3, 'Изучаем Python. 4-е издание','Подробная книга о Python.','9785932861592')
;
4. Задача - Квартиры
Создайте таблицу apartments для хранения информации о квартирах на сайте жилищного комплекса. В таблице должны быть следующие поля:
id— идентификатор, целое положительное.image— поле для хранения пути до изображения, строка не более100символов.price— цена не более99 999 999. Целое положительное число.square— площадь квартиры. Не более150квадратных метров. Целое положительное число.
Добавьте записи так, чтобы получалась таблица ниже:
| id | image | price | square |
|---|---|---|---|
| 1 | /apartments/1/cover.jpg | 5250000 | 90 |
| 2 | /apartments/2/cover-3.jpg | 7500000 | 103 |
| 3 | 2300000 | 56 |
Решение задачи
CREATE TABLE apartments (
id INT UNSIGNED,
image VARCHAR(100),
price INT UNSIGNED,
square TINYINT UNSIGNED
);
INSERT INTO apartments (id, image, price, square)
VALUES
(1, '/apartments/1/cover.jpg',5250000,90),
(2, '/apartments/2/cover-3.jpg',7500000,103),
(3, '',2300000,56)
;
Дата и время
5. Задача - Регистрация и вход
Создайте таблицу users для хранения информации о пользователях сайта.
В таблице должны быть следующие поля:
id— идентификатор, целое положительное;email— адрес электронной почты, строка не более100символов;date_joined— дата регистрации (достаточно хранить дату, без времени)last_activity— дата и время последней активности (с точностью до секунд).
Добавьте записи, чтобы получалась таблица ниже:
| id | date_joined | last_activity | |
|---|---|---|---|
| 1 | user1@domain.com | 2022-12-12 | 2022-04-08 12:34:54 |
| 2 | user2@domain.com | 2022-12-12 | 2023-02-13 11:46:53 |
| 3 | user3@domain.com | 2022-12-13 | 2023-04-04 05:12:07 |
Решение задачи
CREATE TABLE users (
id INT UNSIGNED,
email VARCHAR (100),
date_joined DATE,
last_activity DATETIME
);
INSERT INTO users (id,email,date_joined,last_activity)
VALUES
(1,'user1@domain.com','2014-12-12','2016-04-08 12:34:54'),
(2,'user2@domain.com','2014-12-12','2017-02-13 11:46:53'),
(3,'user3@domain.com','2014-12-13','2017-04-04 05:12:07');
6. Задача - Температура
Создайте таблицу temperature для хранения записей о температуре. Добавьте в неё следующие поля:
id— идентификатор, целые положительные числа;city_id— идентификатор города, целые положительные числа;temperature— температура, целое число в диапазоне от-100до100градусов.wind_speed— целое положительное число для хранения скорости ветра. Историческая максимальная скорость ветра была113м/с.mdate— дата и время измерения (с точностью до секунд).
Добавьте 5 записей, чтобы получалась таблица ниже:
| id | city_id | temperature | wind_speed | mdate |
|---|---|---|---|---|
| 1 | 456 | 17 | 7 | 2017-02-08 12:00:00 |
| 2 | 456 | 19 | 6 | 2017-02-08 12:10:00 |
| 3 | 456 | 20 | 6 | 2017-02-08 12:20:00 |
| 4 | 471 | -7 | 12 | 2017-02-08 12:20:01 |
| 5 | 44 | -43 | 17 | 2017-02-08 12:23:12 |
Решение задачи
CREATE TABLE temperature (
id INT UNSIGNED,
city_id INT UNSIGNED,
temperature TINYINT,
wind_speed TINYINT UNSIGNED,
mdate DATETIME
);
INSERT INTO temperature (id, city_id, temperature, wind_speed, mdate)
VALUES
(1, 456, 17, 7,'2017-02-08 12:00:00'),
(2, 456, 19, 6,'2017-02-08 12:10:00'),
(3, 456, 20, 6,'2017-02-08 12:20:00'),
(4, 471, -7, 12,'2017-02-08 12:20:01'),
(5, 44, -43, 17,'2017-02-08 12:23:12');
Использование NULL
7. Задача - Пустой email
Создайте таблицу users с двумя полями:
id— целое положительное, не может приниматьNULL.email— строка для хранения электронных адресов пользователей длиной до100символов, не может приниматьNULL.
Добавьте записи так, чтобы получалась таблица ниже:
| id | |
|---|---|
| 1 | user1@domain.com |
| 2 | user2@domain.com |
| 3 | user3@domain.com |
| 4 | user4@domain.com |
Решение задачи
CREATE TABLE users(
id INT UNSIGNED NOT NULL,
email VARCHAR(100) NOT NULL
);
INSERT INTO users (id,email)
VALUES
(1,'user1@domain.com'),
(2,'user2@domain.com'),
(3,'user3@domain.com'),
(4,'user4@domain.com');
8. Задача - Товары без категорий
Выберите из таблицы products название, количество и цены всех товаров, у которых нет категории.
Данные отсортируйте по цене.
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS products;
SET foreign_key_checks = 1;
CREATE TABLE products (
id INT NOT NULL PRIMARY KEY,
category_id INT NULL,
name VARCHAR(255) NULL,
count INTEGER NULL,
price INTEGER NULL
);
INSERT INTO products (id, category_id, name, count, price)
VALUES
(1, 7, 'Стиральная машина', 5, 10000),
(2, 12, 'Холодильник', 0, 10000),
(3, 12, 'Микроволновка', 3, 4000),
(4, 8, 'Пылесос', 2, 4500),
(5, NULL, 'Вентилятор', 0, 700),
(6, 9, 'Телевизор', 7, 31740),
(7, 12, 'Тостер', 2, 2500),
(8, NULL, 'Принтер', 4, 3000),
(9, NULL, 'Активные колонки', 1, 2900);
Решение задачи
SELECT name, count, price
FROM products
WHERE category_id IS NULL
ORDER BY price;