Встроенные функции языка SQL
Функции – это операции, позволяющие манипулировать данными. В MySQL можно выделить несколько групп встроенных функций:
· Строковые функции. Используются для управления текстовыми строками, например, для обрезания или заполнения значений.
· Числовые функции. Используются для выполнения математических операций над числовыми данными. К числовым функциям относятся функции, возвращающие абсолютные значения, синусы и косинусы углов, квадратный корень числа и т.д. Используются они только для алгебраических, тригонометрических и геометрических вычислений.
· Итоговые функции. Используются для получения итоговых данных по таблицам, например, когда надо просуммировать какие-либо данные без их выборки.
· Функции даты и времени. Используются для управления значениями даты и времени, например, для возвращения разницы между датами.
· Системные функции. Возвращают служебную информацию СУБД.
Для того чтобы рассмотреть основные встроенные функции, создадим новую базу данных на основе реляционной модели базы данных интернет-магазина:
Создаем БД – shop: create database shop;
Выбираем ее для работы: use shop;
Создаем в базе данных 8 таблиц, как в схеме: Покупатели (customers), Поставщики (vendors), Покупки (sale), Поставки (incoming), Журнал покупок (magazine_sales), Журнал поставок (magazine_incoming), Товары (products), Цены (prices).
Пусть магазин будет торговать книгами, поэтому в таблицу «Товары» добавим еще один столбец – Автор (author).
create table customers
(id_customer int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL,
email char(50) NOT NULL,
PRIMARY KEY (id_customer));
create table vendors
(id_vendor int NOT NULL AUTO_INCREMENT,
name char(50) NOT NULL,
city char(30) NOT NULL,
address char(100) NOT NULL,
PRIMARY KEY (id_vendor));
create table sale
(id_sale int NOT NULL AUTO_INCREMENT,
id_customer int NOT NULL,
date_sale date NOT NULL,
PRIMARY KEY (id_sale),
FOREIGN KEY (id_customer) REFERENCES customers (id_customer));
create table incoming
(id_incoming int NOT NULL AUTO_INCREMENT,
id_vendor int NOT NULL,
date_incoming date NOT NULL,
PRIMARY KEY (id_incoming),
FOREIGN KEY (id_vendor) REFERENCES vendors (id_vendor));
create table products
(id_product int NOT NULL AUTO_INCREMENT,
name char(100) NOT NULL,
author char(50) NOT NULL,
PRIMARY KEY (id_product));
create table prices
(id_product int NOT NULL,
date_price_changes date NOT NULL,
price double NOT NULL,
PRIMARY KEY (id_product, date_price_changes),
FOREIGN KEY (id_product) REFERENCES products (id_product));
create table magazine_sales
(id_sale int NOT NULL,
id_product int NOT NULL,
quantity int NOT NULL,
PRIMARY KEY (id_sale, id_product),
FOREIGN KEY (id_sale) REFERENCES sale (id_sale),
FOREIGN KEY (id_product) REFERENCES products (id_product));
create table magazine_incoming
(id_incoming int NOT NULL,
id_product int NOT NULL,
quantity int NOT NULL,
PRIMARY KEY (id_incoming, id_product),
FOREIGN KEY (id_incoming) REFERENCES incoming (id_incoming),
FOREIGN KEY (id_product) REFERENCES products (id_product));
Обратите внимание, что в таблицах «Журнал покупок», «Журнал поставок» и «Цены» первичные ключи – составные, т.е. их уникальные значения состоят из пар значений (в таблице не может быть двух строк с одинаковыми парами значений). Названия столбцов этих пар значений и указываются через запятую после ключевого слова PRIMARY KEY.
В настоящем интернет-магазине данные в эти таблицы будут заноситься посредством сценариев на каком-либо языке (типа php).
Можно внести любые данные, только помните, что значения в одноименных столбцах связанных таблиц должны совпадать.
В данном примере будем использовать нижеприведенные данные:
INSERT INTO vendors (name, city, address) VALUES
('Вильямс', 'Москва', 'ул. Лесная, д. 43'),
('Дом печати', 'Минск', 'пр. Ф.Скорины, д. 18'),
('БХВ-Петербург', 'Санкт-Петербург', 'ул. Есенина, д. 5');
INSERT INTO customers (name, email) VALUES
('Иванов Сергей', 'sergo@mail.ru'),
('Ленская Катя', 'lenskay@yandex.ru'),
('Демидов Олег', 'demidov@gmail.ru'),
('Афанасьев Виктор', 'victor@mail.ru'),
('Пажская Вера', 'verap@rambler.ru');
INSERT INTO products (name, author) VALUES
('Стихи о любви', 'Андрей Вознесенский'),
('Собрание сочинений, том 2', 'Андрей Вознесенский'),
('Собрание сочинений, том 3', 'Андрей Вознесенский'),
('Русская поэзия', 'Николай Заболоцкий'),
('Машенька', 'Владимир Набоков'),
('Доктор Живаго', 'Борис Пастернак'),
('Наши', 'Сергей Довлатов'),
('Приглашение на казнь', 'Владимир Набоков'),
('Лолита', 'Владимир Набоков'),
('Темные аллеи', 'Иван Бунин'),
('Дар', 'Владимир Набоков'),
('Сын вождя', 'Юлия Вознесенская'),
('Эмигранты', 'Алексей Толстой'),
('Горе от ума', 'Александр Грибоедов'),
('Анна Каренина', 'Лев Толстой'),
('Повести и рассказы', 'Николай Лесков'),
('Антоновские яблоки', 'Иван Бунин'),
('Мертвые души', 'Николай Гоголь'),
('Три сестры', 'Антон Чехов'),
('Беглянка', 'Владимир Даль'),
('Идиот', 'Федор Достоевский'),
('Братья Карамазовы', 'Федор Достоевский'),
('Ревизор', 'Николай Гоголь'),
('Гранатовый браслет', 'Александр Куприн');
INSERT INTO incoming (id_vendor, date_incoming) VALUES
('1', '2011-04-10'),
('2', '2011-04-11'),
('3', '2011-04-12');
INSERT INTO magazine_incoming (id_incoming, id_product, quantity) VALUES
('1', '1', '10'), ('1', '2', '5'), ('1', '3', '7'), ('1', '4', '10'), ('1', '5', '10'), ('1', '6', '8'), ('1', '18', '8'), ('1', '19', '8'), ('1', '20', '8'), ('2', '7', '10'), ('2', '8', '10'), ('2', '9', '6'), ('2', '10', '10'), ('2', '11', '10'), ('2', '21', '10'), ('2', '22', '10'), ('2', '23', '10'), ('2', '24', '10'), ('3', '12', '10'), ('3', '13', '10'), ('3', '14', '10'), ('3', '15', '10'), ('3', '16', '10'), ('3', '17', '10');
INSERT INTO prices (id_product, date_price_changes, price) VALUES
('1', '2011-04-10', '100'), ('2', '2011-04-10', '130'), ('3', '2011-04-10', '90'), ('4', '2011-04-10', '100'), ('5', '2011-04-10', '110'), ('6', '2011-04-10', '85'), ('7', '2011-04-11', '95'), ('8', '2011-04-11', '100'), ('9', '2011-04-11', '79'), ('10', '2011-04-11', '49'), ('11', '2011-04-11', '105'), ('12', '2011-04-12', '85'), ('13', '2011-04-12', '135'), ('14', '2011-04-12', '100'), ('15', '2011-04-12', '90'), ('16', '2011-04-12', '75'), ('17', '2011-04-12', '90'), ('18', '2011-04-10', '150'), ('19', '2011-04-10', '140'), ('20', '2011-04-10', '85'), ('21', '2011-04-11', '105'), ('22', '2011-04-11', '70'), ('23', '2011-04-11', '65'), ('24', '2011-04-11', '130');
INSERT INTO sale (id_customer, date_sale) VALUES
('2', '2011-04-11'),
('3', '2011-04-11'),
('5', '2011-04-11');
INSERT INTO magazine_sales (id_sale, id_product, quantity) VALUES
('1', '1', '1'),
('1', '5', '1'),
('1', '7', '1'),
('2', '2', '1'),
('3', '1', '1'),
('3', '7', '1');
Таким образом, в магазине 24 наименования товара, привезенные в трех поставках от трех поставщиков, и совершенно три продажи.
Дата добавления: 2018-05-10; просмотров: 857;