Структурированный язык запросов SQL в PHPMyAdmin

№17-1,

технические науки

Данная статья посвящена изучению темы "Основы Web-программирования", где продолжаем работать с базой данных, но уже с несколькими таблицами, создавая связи между ними и знакомясь с оператором SELECT.

Похожие материалы

phpMyAdmin — это программа написанная на PHP и предназначенная для управления сервером MySQL через всемирную сеть. phpMyAdmin поддерживает широкий набор операций над MySQL, наиболее часто используемые операции поддерживаются с помощью пользовательского интерфейса (управление базами данных, таблицами, полями, связями, индексами, пользователями, правами, и т. д.), одновременно вы можете напрямую выполнить любой SQL запрос.

Запросы — это объект базы данных, который служит для извлечения данных из таблиц и предоставления их пользователю в удобном виде. Особенность запросов состоит в том, что они черпают данные из базовых таблиц и создают на их основе временную таблицу. Применение запросов позволяет избежать дублирования данных в таблицах и обеспечивает максимальную гибкость при поиске и отображении данных в базе данных.

SQL-запросы — запросы, строящиеся при помощи унифицированного набора инструкций SQL (Structured Query Language — структурированный язык запросов). SQL в полной мере нельзя отнести к традиционным языкам программирования, где бы вы вводили переменные, описывали тип и многое другое, он содержит только набор стандартных операторов доступа к данным, хранящимся в базе данных.

Язык SQL делиться четыре части:

  • Операторы определения данных (Data Definition Language, DDL): create (“создать”), alter (“изменить”), drop (“удалить”).
  • Операторы манипуляции данными (Data Manipulation Language, DML): select (“выбрать”), insert (“вставить”), update (“обновить”) и delete (“удалить”).
  • Операторы определения доступа к данным (Data Control Language, DCL): grant (“предоставить”) и revoke (“лишить”).
  • Операторы управления транзакциями (Transaction Control Language, TCL): commit (“завершить”), rollback (“откатить”), savepoint (“сохранить”).

Мы же рассмотрим, одну команду языка SQL – команду выборки данных SELECT, так благодаря этой команде можно организовать все возможные запросы.

Синтаксис оператора SELECT

SELECT [ALL|DISTINCT] <список полей, которые вы хотите отразить в запросе> |*

FROM <список таблиц, с которыми вы работаете>

[WHERE <предикат-условие выборки или неявное внутреннее соединение таблиц>]

[JOIN <предикат внутреннего соединения таблиц>]

[GROUP BY <список полей группировки> [HAVING <предикат-условия для группировки>]]

[ORDER BY <список полей, по которым упорядочивает вывод> [ASC|DESC]]

Информация, заключенная в квадратные скобки, как обычно является необязательной.

Рассмотрим несколько примеров запросов в phpMyAdmin, для этого воспользуемся предыдущей базой данных «Komp_texnika». В данной базе мы уже создали таблицу «product» (товар), в которой отразили соответствующие свойства сущности: product_ID (первичный ключ), maker (производитель), model (модель), god_sozd (год создания) и type_ID (тип продукта, является внешним ключом) (см. Рис.1).

Рис.1

Так же в данной базе данных, мы добавили еще одну сущность «laptop» (тип товара), в которой отразили соответствующие свойства сущности: type_ID (первичный ключ), type (тип), OS (операционная система), processor (процессор), pamjat (память), zvet (цвет), ves (вес) и zena (цена) (см. Рис.2).

Рис.2

Теперь прежде чем прейти к составлению запросов, необходимо установить связь между сущностями (таблицами). Для этого будем работать с таблицей «laptop», а именно выберем пункт «Связи» (см. Рис.3).

Рис.3

После чего откроется страница, где необходимо указать поля, которые отвечают за связь между таблицами (см. Рис.4). Также связь можно установить другим способом, используя «Дизайнер» (см. Рис.4)

Рис.4

Таким образом, установив связи между таблицами, мы можем перейти к созданию запросов, перейдя верхнем меню «SQL».

Запрос 1. Вывести информацию имеющейся техники за 2012 выпуска (см. Таблицу 1).

Таблица 1

Программа:

select
maker,
model
from product
where god_sozd=2012
order by maker

Результат:

 

Для реализации данного запроса мы использовали оператор select – для вывода информации из поля maker (производитель) и model (модель), from – для описания таблицы из которой нужно выдать информацию; предикат where – для условия отбора строк из таблицы результата, то есть выдает те данные, у которых год создания (god_sozd) равнялся 2012; order by – для сортировки данным к полю maker (производитель).

Запрос 2. Вывести информацию о количестве технике имеющихся производителей (см. Таблицу 2).

Таблица 2

Программа:

select
maker,
count(maker)
from product
group by maker

Результат:

сount является одной из так называемых «агрегирующих функций», которая считает количество не пустых кортежей, являются мощным инструментом конструирования запросов, в данном случае вы сгруппировали вывод данных по maker (производителям).

Запрос 3. Вывести общую стоимость ноутбуков по имеющимся производителям, отсортировав по сумме по возрастанию (см. Таблицу 3).

Таблица 3

Программа:

select
product.maker, laptop.type,
count(laptop.type), sum(laptop.zena)
from product
join laptop on laptop.type_ID=
product.type_ID
group by laptop.type, product.maker
order by sum(laptop.zena)

Результат:

В данном запросе необходимы данные из двух таблицы, для этого нам необходимо объединить таблицы «product» (товар) и «laptop» (тип товара), что бы это сделать использовали предикат join с указание объединения полей: первичного ключа таблицы laptop.type_ID и внешнего ключа таблицы product.type_ID. Так же обратите внимание, что при работе с двумя и более таблиц, в операторе select, при описании полей необходима, указывать имя таблицы данного поля, например laptop.type. sum, так же как и count относится к «агрегирующим функциям», которая считает сумму значений кортежей, в нашем случае сумму стоимости техники.

Запрос 4. Вывести данные о ноутбуках с операционной системой Windows-8, со стоимостью не больше 25 тысяч (см. Таблицу 4).

Таблица 4

Программа:

select
product.maker, laptop.OS,
laptop.pamjat as pamjat_v_GB, laptop.zena
from laptop
join product on laptop.type_ID=
product.type_ID
where (laptop.zena < 25000) and
(laptop.OS like "%8")

Результат:

Запрос 5. Выведите информацию о товаре: maker (производитель), model (модель), pamjat (память), processor (процессор) и zena (цена), по категории «podhodit» и «not podhodit» (см. Таблицу 5).

Таблица 5

Результат:

Программа:

select
case
when (laptop.pamjat = 1000) and (laptop.processor >=2600) then "podhodit"
else "not podhodit" end as itog, product.maker, product.model,
laptop.pamjat as pamjat_v_Gb, laptop.processor as proc_v_Mgz,
laptop.zena
from product join laptop on laptop.type_ID=product.type_ID
where laptop.type like "l%"
order by 1 desc, 6

сaseend – предикат выбора, используется для распределения товара по категориям, в соответствии с критериями. like "1%" – предикат, который применяется для сопоставления строк с образцом. Образец представляет собой строку, в которой могут использоваться два специальных символа: «%» и «_», где «%» сопоставляется с любой строкой (возможно, пустой) и «_» сопоставляется с одним символом, любые другие символы, отличные от специальных, могут быть сопоставлены только со специальными символами и сами с собой. order by [asc|desc] – предназначен для сортировки результатов запросов [возрастанию (стоит по умолчанию) | по убыванию], сортировка возможна как для одного поля, так и более.

Оператора SELECT есть не что иное, как выражение для получения результирующего набора из таблиц базы данных. Мы формируем запрос при помощи оператора SELECT, а он, в свою очередь, выполнив свою работу, возвращает результирующий набор данных. Возвращаются эти данные в виде таблицы, которая в свою очередь, может быть обработана следующим оператором SELECT и т.д.

Список литературы

  1. Аннотация к phpMyAdmin [Электронный ресурс] / URL: http://php-myadmin.ru/about/notice.html
  2. Запросы к базе данных и их использование. Виды запросов. Технология создания [Электронный ресурс] / URL: http://www.yaklass.ru/materiali?mode=cht&chtid=514
  3. Островский С.Л. Основы web-программирования для школьного «сайтостроительства». Лекция 5. PHP+MySQL [Текст]/ С.Л. Островский // Информатика. – 2008.-№21.-с.2-15