ГлавнаяУроки SQL → Урок 10. Встроенные функции

SQL - Урок 10. Встроенные функции

Функции - это операции, позволяющие манипулировать данными. В MySQL можно выделить несколько групп встроенных функций:
  • Строковые функции. Используются для управления текстовыми строками, например, для обрезания или заполнения значений.

  • Числовые функции. Используются для выполнения математических операций над числовыми данными. К числовым функциям относятся функции возвращающие абсолютные значения, синусы и косинусы углов, квадратный корень числа и т.д. Используются они только для алгебраических, тригонометрических и геометрических вычислений. В общем, используются редко, поэтому рассматривать их мы не будем. Но вы должны знать, что они существуют, и в случае необходимости обратиться к документации MySQL.

  • Итоговые функции. Используются для получения итоговых данных по таблицам, например, когда надо просуммировать какие-либо данные без их выборки.

  • Функции даты и времени. Используются для управления значениями даты и времени, например, для возвращения разницы между датами.

  • Системные функции. Возвращают служебную информацию СУБД.

Для того, чтобы рассмотреть основные встроенные функции нам понадобится создать новую базу данных, чтобы в ней были числовые значения и значения даты. В уроке 5 основ баз данных мы сделали реляционную модель базы данных интернет-магазина. Пришло время реализовать ее в MySQL, заодно закрепим пройденное.

Итак, смотрим на последнюю схему урока 5 по БД и создаем БД - 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 наименования товара, привезенные в трех поставках от трех поставщиков, и совершенно три продажи. Все готово, можем приступать к изучению встроенных функций MySQL, чем и займемся в следующем уроке.



Предыдущий урок Вернуться в раздел Следующий урок 
Программирование на Python для начинающих


Теперь нажмите кнопку, что бы не забыть адрес и вернуться к нам снова.