Примеры sql запросов к базе данных mysql

Сравнение данных за две даты

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

Работать мы будем с двумя таблицами, структура которых представлена ниже:

Структура таблицы products

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ShopID` int(11) NOT NULL,
  `Name` varchar(150) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf-8 AUTO_INCREMENT=10 ;

Структура таблицы statistics

CREATE TABLE IF NOT EXISTS `statistics` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ProductID` bigint(20) NOT NULL,
  `Orders` int(11) NOT NULL,
  `Date` date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (`id`),
  KEY `ProductID` (`ProductID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf-8 AUTO_INCREMENT=20 ;

Дело в том, что стандарт языка SQL допускает использование вложенных запросов везде, где разрешается использование ссылок на таблицы. Здесь вместо явно указанных таблиц, благодаря использованию псевдонимов, будут применяться результирующие таблицы вложенных запросов с имеющейся связью один – к – одному. Результатом каждой результирующей таблицы будут данные о количестве произведенных заказов некоего товара за определенную дату, полученные путем выполнения запроса на выборку данных из таблицы statistics по требуемым критериям. Иными словами мы свяжем таблицу statistics саму с собой. Пример запроса:

SELECT stat1.Name, stat1.Orders, stat1.Date, stat2.Orders, stat2.Date FROM 
(SELECT statistics.ProductID, products.Name, statistics.Orders, statistics.Date 
FROM products JOIN statistics ON products.id = statistics.ProductID WHERE 
DATE(statistics.date) = '2014-09-04') AS stat1 JOIN (SELECT statistics.ProductID, 
statistics.Orders, statistics.Date FROM statistics WHERE DATE(statistics.date) = 
'2014-09-12') AS stat2 ON stat1.ProductID = stat2.ProductID

В итоге имеем такой результат:

+------------------------+----------+------------+----------+------------+
| Name                   | Orders1  | Date1      | Orders2  | Date2      |
+------------------------+----------+------------+----------+------------+
| Процессоры Pentium II  |        1 | 2014-09-04 |        1 | 2014-09-12 |
| Процессоры Pentium III |        1 | 2014-09-04 |       10 | 2014-09-12 |
| Оптическая мышь Atech  |       10 | 2014-09-04 |        3 | 2014-09-12 |
| DVD-R                  |        2 | 2014-09-04 |        5 | 2014-09-12 |
| DVD-RW                 |       22 | 2014-09-04 |       18 | 2014-09-12 |
| Клавиатура MS 101      |        5 | 2014-09-04 |        1 | 2014-09-12 |
| SDRAM II               |       26 | 2014-09-04 |       12 | 2014-09-12 |
| Flash RAM 8Gb          |        8 | 2014-09-04 |        7 | 2014-09-12 |
| Flash RAM 4Gb          |       18 | 2014-09-04 |       30 | 2014-09-12 |
+------------------------+----------+------------+----------+------------+

Пустые поля NULL

Если выбрать все содержимое таблицы phone, то в последних двух строках будет не число, а какое странное NULL:

SELECT * FROM phone;

Результат

+---------+-----------+-----------+-----------+--------+
| phoneid | firstname | lastname  | phone     | cityid |
+---------+-----------+-----------+-----------+--------+
|       1 | John      | Doe       | 4144122   |      1 |
|       2 | Steve     | Doe       | 414124    |      1 |
|       3 | Johnatan  | Something | 4142947   |      2 |
|       4 | Donald    | Trump     | 414251123 |      2 |
|       5 | Alice     | Cooper    | 414254234 |      2 |
|       6 | Michael   | Jackson   | 4142544   |      3 |
|       7 | John      | Abama     | 414254422 |      3 |
|       8 | Andre     | Jackson   | 414254422 |      3 |
|       9 | Mark      | Oh        | 414254422 |   NULL |
|      10 | Charly    | Lownoise  | 414254422 |   NULL |
+---------+-----------+-----------+-----------+--------+

NULL – это не строка и не число, это отсутствующее значение, то есть в этих двух строках в колонке cityid отсутствует. NULL можно перевести как ноль, но правильнее все же переводить это слово как “несуществующий” или “недействительный”.

Если поле с числом равно 0, то это число, просто оно нулевое. А если поле с числом равно NULL, то это уже не число и не ноль, это значит, что там вообще числа нет, черная дыра, пробоина, все что угодно, но только не число.

Я только что ляпнул новое понятие – поле. Это пересечение колонки и строки. Это то, куда мы записываем значение какой-то колонки/строки.

Особенно такие вещи могут путать в случае работы со строками. Некоторые программы для работы с запросами отображают пустую строку и отсутствующее значение как просто пустоту. Но это не так. Просто в обоих случаях отобразить нечего.

Для базы данных есть огромная разница – мы храним пустую строку или в поле нет вовсе значения, потому что это разные вещи. Если строка пустая, то это все же строка, просто у нее нет длины, но если значения нет, то строки не существует.

Скорость у машины может быть нулевая, если машина стоит или какое-то число, если машина едет. А если машины нет? Скорости тоже не будет в принципе, и мы не можем сказать, что скорость нулевая у машины, которой просто нет.

Работа с нулевыми полями отличается, потому что если попробовать выполнить запрос:

select * from phone where cityid = null;

то ничего не вернется. Казалось бы, мы же сравниваем число символом сравнения с NULL, но это не работает. Дело в том, что сравнивать с помощью равенства нельзя, вместо этого нужно использовать слово is:

select * from phone where cityid is null;

А если мы хотим найти все строки, в которых поле не пустое, а имеет какое-то значение. Тут нужно использовать is not:

select * from phone where cityid is not null;

На этом пока с основами получения данных закончим. В процессе рассмотрения дальнейшего материала мы познакомимся с еще более сложными запросами на практике.

SELECT доступ к одной таблице

Команда SELECT достаточно простая, потому что она выглядит и звучит вполне логично и последовательно. Да, она может быть и сложной, потому что позволяет достаточно многое, и чтобы не пугать вас, я даже не буду пытаться показывать сейчас максимальную версию.

Начнем с самой простой версии:

SELECT колонки FROM базаданных.таблица

Большими буквами я выделил ключевые слова языка запросов SQL, а русскими маленькими буквами показано то, что мы должны заменить на реальные значения. Если перевести эту команду, то она будет звучать:

ВЫБРАТЬ колонки ИЗ база.данных.таблица

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

Колонки – это список имен колонок через запятую. Если вы хотите выбрать все колонки, то можно указать символ звездочки *.

У нас есть таблица City, давайте выберем из нее все записи и все колонки. Все колонки, значит нужно заменить слово «колонки» на символ звездочки, а на месте таблицы пишем city и в результате получаем

SELECT * FROM testdb.сity

Не забываем, что если выполнять из командной строки в mysql, то нужно в конце добавить точку запятой, но очень часто она не нужна, поэтому я в своих запросах буду опускать этот символ.

В результате мы должны увидеть следующее:

+--------+-----------+
| cityid | cityname  |
+--------+-----------+
|      1 | Toronto   |
|      2 | Vancouver |
|      3 | Montreal  |
+--------+-----------+
3 rows in set (0.00 sec)

Если мы пишем множество запросов, неужели каждый раз придется писать имя базы данных перед именем таблицы? Нет, это не обязательно. Если вы работаете с определенной базой, то можно как бы перейти в нее, или можно еще сказать выбрать ее. Для этого выполняем команду:

USE базаданных

Слово USE означает «использовать». То есть мы просим сервер использовать определенную базу для всех последующих запросов, пока снова не выберем другую. В нашем случае база данных это testdb, так что выполняем команду:

USE testdb

Теперь имя базы перед именем таблицы указывать не нужно, а значит запрос на получения всех колонок и всех строк из таблицы city может выглядеть теперь так:

SELECT * FROM сity

Это достаточно важный пункт, поэтому не забывайте его. В дальнейшем я буду писать запросы с учетом, что текущая база данных это testdb и поэтому перед именем таблицы указывать имя базы не буду.

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

Это значит, что следующие две команды могут завершиться ошибкой:

SELECT * FROM City
SELECT * FROM CITY

Потому что называние города написано в неверном регистре.

Писать команды SQL большими буквами не обязательно. Вот их как раз можно писать в любом регистре и следующая команда завершиться удачно:

select * from city 

Или даже эта

SeLeCt * FrOm city

Я не помню уже почему, то много лет назад, еще в 90-е годы я привык писать все слова, которые относятся к SQL большими буквами, чтобы они выделялись. На мой взгляд это читается проще, но вы не обязаны следовать этому же подходу.

Если в качестве колонок указать звездочку, то отображаются все поля в том порядке, в котором они создавались в базе данных. Мы можем перечислить имена через запятую:

SELECT cityid, cityname FROM city

В этом случае у нас есть возможность указать имена в любом порядке и указать сначала имя города, а потом идентификатор:

SELECT cityname, cityid FROM city

Или можно отобразить только имя города:

SELECT cityname FROM city

Настоятельно рекомендую повторять все, что мы здесь рассматриваем, потому что именно практика позволяет лучше запомнить материал.

Д. Использование связанных вложенных запросов

Коррелированный запрос — это запрос, зависящий от результатов выполнения другого запроса. Он может повторно выполняться для каждой строки, выбранной с помощью другого запроса.

В первом примере представлены семантически эквивалентные запросы для демонстрации различий в использовании ключевых слов и . В обоих примерах приведены допустимые вложенные запросы, извлекающие по одному экземпляру продукции каждого наименования, для которых модель продукта — «long sleeve logo jersey» (кофта с длинными рукавами, с эмблемой), а значения столбцов таблиц и совпадают.

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

Предыдущий вложенный запрос данной инструкции не может быть выполнен независимо от внешнего запроса. Требуется значение параметра , однако в процессе обработки строк компонентом Компонент SQL Server Database Engine указанное значение меняется.

Коррелированный вложенный запрос также может использоваться в предложении внешнего запроса. В данном примере осуществляется поиск моделей продуктов, для которых максимальная цена в каталоге в два раза превышает среднюю цену по нему.

В данном примере с помощью двух коррелированных запросов осуществляется поиск сотрудников, продавших определенную продукцию.

Использование SELECT и предикатов IN, AND, OR, BETWEEN, LIKE

Предикаты — слова IN, OR, BETWEEN, LIKE в секции WHERE — также позволяют выбрать определённые диапазоны значений (IN, OR, BETWEEN) или
значения в строках (LIKE), которые требуется выбрать из таблицы. Запросы с предикатами IN, OR, BETWEEN имеют
следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ
WHERE ЗНАЧЕНИЕ
ПРЕДИКАТ (IN, OR, BETWEEN) (ЗНАЧЕНИЯ, УКАЗЫВАЮЩИЕ ДИАПАЗОН)

Запросы с предикатом LIKE имеют следующий синтаксис:

SELECT ИМЯ_СТОЛБЦА FROM ИМЯ_ТАБЛИЦЫ
WHERE ИМЯ_СТОЛБЦА LIKE
ВЫРАЖЕНИЕ

Пример 7. Пусть требуется выбрать из таблицы Staff имена, должности
и число отработанных лет сотрудников, работающих в отделах с номерами 20 или 84.
Это можно сделать следующим запросом (на MS SQL Server — с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years
FROM Staff
WHERE Dept IN (20, 84)

Результат выполнения запроса:

На сайте есть подробный урок об использовании предиката IN.

Пример 8. Пусть теперь требуется выбрать из таблицы Staff те же данные,
что и в предыдущем примере. Запрос со словом OR аналогичен запросу со словом IN и перечислением интересующих
значений в скобках. Запрос будет следующим (на MS SQL Server — с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years
FROM Staff
WHERE Dept=20 OR Dept=84

Пример 9. Выберем из той же таблицы имена, должности
и число отработанных лет сотрудников, зарплата которых между 15000 и 17000 включительно (на MS SQL Server — с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years
FROM Staff
WHERE Salary BETWEEN 15000 AND 17000

Результат выполнения запроса:

На сайте есть подробный урок об использовании предиката BETWEEN.

Предикат LIKE используется для выборки тех строк, в значениях которых встречаются символы, указанные
после предиката между апострофами (‘).

Пример 10. Выберем из той же таблицы имена, должности
и число отработанных лет сотрудников, имена которых начинаются с буквы S и состоят из 7 символов
(на MS SQL Server — с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years
FROM Staff
WHERE Name LIKE ‘S_ _ _ _ _ _’

Символ подчёркивания (_) означает любой символ. Результат выполнения запроса:

Пример 11. Выберем из той же таблицы имена, должности
и число отработанных лет сотрудников, имена которых начинаются с буквы S и содержат любые другие буквы
в любом количестве (на MS SQL Server — с предваряющей конструкцией USE company1;):

SELECT Name, Job, Years
FROM Staff
WHERE Name LIKE ‘S%’

Символ процентов (%) означает любое количество символов. Результат выполнения запроса:

На сайте есть подробный урок об использовании предиката LIKE.

Значения, указанные с использованием предикатов IN, OR, BETWEEN, LIKE можно инвертировать при помощи
слова NOT. Тогда запрашиваемые данные будут иметь противоположный смысл. Если мы используем NOT IN (20, 84),
то будут выведены данные сотрудников, которые работают во всех отделах, кроме имеющих номера 20 и 84.
С использованием NOT BETWEEN 15000 AND 17000 можно получить данные сотрудников, зарплата которых не
входит в интервал от 15000 до 17000. Запрос с NOT LIKE выведет данные сотрудников, чьи имена не начинаются
или не содержат символов, указанных с NOT LIKE.

Простые mysql запросы

Зная структуру БД, таблиц в БД и полей, можно посылать следующие запросы в MySQL.

слово select, говорит само за себя, и становится понятно, что пользуясь данными запросами, мы будем выбирать (читать) информацию из БД.

SELECT count(*) FROM table_name;

Выведет количество всех записей в таблице

SELECT * FROM table_name;

Выбирает все записи из таблицы БД

SELECT * FROM table_name LIMIT 2,3;

Выбирает 3 записи из таблицы, начиная с 2 записи. Этот запрос полезен при создании блока страниц навигации.

SELECT * FROM person ORDER BY number;

Выберет все записи из таблицы person в порядке возрастания значений поля number.

SELECT * FROM person ORDER BY number DESC;

Выбирает все записи из person, но уже в порядке убывания (т.е. в обратном порядке).

SELECT * FROM person ORDER BY number LIMIT 5;

Выбирает 5 записей из таблицы person, в порядке возрастания.

SELECT * FROM person WHERE name=’Anna’;

Выбирает все записи из таблицы person, где поле name соответствует значению Anna.

SELECT * FROM person WHERE name LIKE ‘An%’;

Выбирает все записи из таблицы person, в которой значения поля nameначинаются с An.

SELECT * FROM person WHERE name LIKE ‘%na’ ORDER BY number ;

Выбирает все записи из таблицы person, где name заканчивается на na, и упорядочивает записи в порядке возрастания значения number.

SELECT name, last_name FROM person;

Выбирает все значения полей name и last_name из таблицы person.

SELECT DISTINCT site FROM table_name;

Выбирает уникальные (DISTINCT) значения поля site из таблицы table_name. Например, при 5 значениях поля site: sitear.ru, sitear.ru, sitear.ru, yaveterinar.ru, wi-korporaciya.ru; выведет только 3 уникальные значения: sitear.ru, yaveterinar.ru, wi-korporaciya.ru;

SELECT * from person where age in (12,15,18);

Выведет все записи таблицы person в которых значения поля age будет равно 12 или 15 или 18.

select max(age) from person;

Выберет максимальное значение age из таблицы person.

select name, min(age) from person;

Выберет минимальное значение age из таблицы person.

данные запросы позволяют вставить запись в таблицу БД. Другими словами создать строку в таблице или добавить информацию в таблицу БД.

insert into table_name(site, description) values (‘sitear.ru’, ‘SiteAR – создание сайтов’)

Вставит в таблицу table_name, а точнее в поля site и description данной таблицы, соответствующие значения.

направлены на изменение уже имеющихся данных в таблице БД.

update table_name set site = ‘domain.com’ where id = ‘3’

Изменяет значение поля site на domain.com в таблице table_name где id равен 3.

delete from table_name where id = ‘3’

Удаляет запись из table_name где id равен 3.

Ответы на вопросы

Может полный новичок освоить SQL?

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

График обучения удобный?

В основном, уроки представлены в формате видеороликов, просматривать которые можно в любое удобное время.

Как можно общаться с преподавателем?

Связь с учениками поддерживается с помощью чатов и проверки домашних заданий. За студентами закрепляются кураторы, кто отвечает на все вопросы.

Возможна рассрочка?

Да. Не на всех сайтах это указано, следует выяснить, отправив вопрос менеджеру. У большинства курсов действуют.

Х. Использование UNION трех инструкций SELECT для демонстрации эффекта от использования скобок и ALL

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

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

Управление запросами

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

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

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

Предложение используется для сортировки результатов запроса. По умолчанию числовые значения сортируются в порядке возрастания, а текстовые значения сортируются в алфавитном порядке. Чтобы проиллюстрировать это, следующий запрос перечисляет столбцы и, но сортирует результаты по дате рождения:

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

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

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

Предложение было добавлено в SQL для обеспечения функциональности, аналогичной функциональности предложения WHERE, а также совместимости с агрегатными функциями. Полезно думать о разнице между этими двумя пунктами как о том, что применяется к отдельным записям, в то время как применяется к групповым записям. С этой целью каждый раз, когда вы вводите предложение , также должно присутствовать предложение.

Следующий пример — еще одна попытка найти, какие гарниры являются фаворитами как минимум трех ваших друзей, хотя этот вернет результат без ошибок:

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

Какими навыками должен обладать SQL-аналитик

Не скажу, что порог входа в профессию очень высокий и сложный, однако он требует специфических навыков и умений, основные из которых:

  • базовое знание SQL;
  • азы работы с большими данными;
  • общие знания о теории баз данных и методологиях проектирования;
  • навыки работы с одной из промышленных СУБД (лучше всего — ClickHouse);
  • аналитический склад мышления.

SQL-аналитику необходимо уметь посмотреть на ситуацию с разных ракурсов — как клиента, так и технического исполнителя. Это позволяет учитывать все аспекты работы при генерации вариантов решения поставленной задачи

Soft skills будут мало чем отличаться от других областей аналитики:

широкий кругозор
Насмотренность и начитанность, а также знание специфики различных видов деятельности (например, концентрация не только на банковской сфере, но и промышленности, телекоммуникациях, логистике и др.) помогает быстрее вникать в детали проекта и использовать уже готовые конструкции, а не начинать работу с нуля;

внимание к деталям

Мы имеем дело с огромными массивами данных, поэтому очень важно, чтобы полученные итоги были достоверными и обоснованными
Правило: «Семь раз примерь, один раз отрежь» — применимо к любой аналитической работе, где главный враг — суета, из-за которой можно не заметить важные мелочи;

коммуникабельность. Очень банальный, но актуальный скилл

Приходится общаться с большим количеством специалистов — от бизнес-заказчиков до проектных менеджеров, разработчиков и тестировщиков, доносить до них нужную информацию и делать релевантные запросы; 

навыки презентации. Мало выполнить работу и в совершенстве знать результат, необходимо сжато и доходчиво донести информацию до заказчиков/руководства/коллег. Это универсальный навык, пожалуй, полезный не только в аналитике, но и во многих других профессиях;

работа в команде. Здесь все понятно. Без комментариев.

Подстановка нескольких значений из другой таблицы

Необходимость в данном запросе не является повседневной, но возникает не совсем уж и редко. Самый распространенный пример, это обычная сетевая игра. Где создается сессия на два игрока. Соответственно в таблице с данными об играх имеются два поля с идентификаторами зарегистрированных игроков. Для того чтобы вывести информацию об имеющихся играх, мы не можем обойтись стандартным объединением таблицы с данными об игроках и таблицы об имеющихся играх. Так как мы имеем два поля с идентификаторами неких игроков. Но мы можем обратиться опять за помощью к псевдонимам таблиц.

Демонстрация данного запроса будет происходить на другом примере, а не на примере сетевой игры. Это чтобы не создавать заново все необходимые таблицы. В качестве данных возьмем таблицу products из примера “сравнение данных за две даты” и создадим еще одну недостающую таблицу replace_com, структура которой представлена ниже:

CREATE TABLE IF NOT EXISTS `replace_com` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sProductID` int(11) NOT NULL,
  `rProductID` int(11) NOT NULL,
  `Date` date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (`id`),
  KEY `sProductID` (`sProductID`,`rProductID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf-8 AUTO_INCREMENT=4 ;

Предположим, что у нас есть некий компьютерный салон и мы проводим модификации некоторых компьютерных составляющих, а все операции по замене комплектующих заносим в базу данных. В таблице replace_com интересующими нас полями являются: sProductID и rProductID. Где sProductID – идентификатор заменяемого модуля, а rProductID – идентификатор заменяющего модуля. Запрос, реализующий вывод данных о совершенных операциях выглядит следующим образом:

SELECT sProducts.Name AS sProduct, rProducts.Name AS rProduct, 
replace_com.Date FROM replace_com JOIN products AS sProducts ON 
sProducts.id = replace_com.sProductID JOIN products AS rProducts ON 
rProducts.id = replace_com.rProductID

Результирующая таблица данных:

+-----------------------+------------------------+------------+
| sProduct              | rProduct               | Date       |
+-----------------------+------------------------+------------+
| Процессоры Pentium II | Процессоры Pentium III | 2014-09-15 |
| Flash RAM 4Gb         | Flash RAM 8Gb          | 2014-09-17 |
| DVD-R                 | DVD-RW                 | 2014-09-18 |
+-----------------------+------------------------+------------+

Вывод данных из таблицы MySQL с помощью PHP (PDO)

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

Создадим файл c HTML-таблицей, ячейки которой будут заполнятся данными из таблицы books.

<!DOCTYPE html>
<html>
<head>
<meta charset=»utf-8″>
<title>SELECT</title>
<style>
td:nth-child(5),td:nth-child(6){text-align:center;}
table{border-spacing: 0;border-collapse: collapse;}
td, th{padding: 10px;border: 1px solid black;}
</style>
</head>
<body>
<?php
$db_server = «localhost»;
$db_user = «root»;
$db_password = «MySafePass4!»;
$db_name = «Bookstore»;

try {
// Открываем соединение, указываем адрес сервера, имя бд, имя пользователя и пароль,
// также сообщаем серверу в какой кодировке должны вводится данные в таблицу бд.
$db = new PDO(«mysql:host=$db_server;dbname=$db_name», $db_user, $db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>»SET NAMES utf8″));
// Устанавливаем атрибут сообщений об ошибках (выбрасывать исключения)
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Запрос на вывод записей из таблицы
$sql = «SELECT id, title, author, price, discount, amount FROM books»;
// Подготовка запроса
$statement = $db->prepare($sql);
// Выполняем запрос
$statement->execute();
// Получаем массив строк
$result_array = $statement->fetchAll();

echo «<table><tr><th>ID</th><th>Title</th><th>Author</th><th>Price</th><th>Discount</th><th>Amount</th></tr>»;
foreach ($result_array as $result_row) {
echo «<tr>»;
echo «<td>» . $result_row . «</td>»;
echo «<td>» . $result_row . «</td>»;
echo «<td>» . $result_row . «</td>»;
echo «<td>» . $result_row . «</td>»;
echo «<td>» . $result_row . «</td>»;
echo «<td>» . $result_row . «</td>»;
echo «</tr>»;
}
echo «</table>»;
}

catch(PDOException $e) {
echo «Ошибка при создании записи в базе данных: » . $e->getMessage();
}

// Закрываем соединение
$db = null;
?>
</body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

<!DOCTYPE html>

<html>

<head>

<meta charset=»UTF-8″>

<title>SELECT<title>

<style>

td:nth-child(5),td:nth-child(6){text-aligncenter;}

table{border-spacing;border-collapsecollapse;}

td, th{padding10px;border1pxsolidblack;}

</style>

<head>

<body>

<?php

$db_server=»localhost»;

$db_user=»root»;

$db_password=»MySafePass4!»;

$db_name=»Bookstore»;

try{

// Открываем соединение, указываем адрес сервера, имя бд, имя пользователя и пароль,

// также сообщаем серверу в какой кодировке должны вводится данные в таблицу бд.

$db=newPDO(«mysql:host=$db_server;dbname=$db_name»,$db_user,$db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>»SET NAMES utf8″));

// Устанавливаем атрибут сообщений об ошибках (выбрасывать исключения)

$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// Запрос на вывод записей из таблицы

$sql=»SELECT id, title, author, price, discount, amount FROM books»;

// Подготовка запроса

$statement=$db->prepare($sql);

// Выполняем запрос

$statement->execute();

// Получаем массив строк

$result_array=$statement->fetchAll();

echo»<table><tr><th>ID</th><th>Title</th><th>Author</th><th>Price</th><th>Discount</th><th>Amount</th></tr>»;

foreach($result_arrayas$result_row){

echo»<tr>»;

echo»<td>».$result_row»id».»</td>»;

echo»<td>».$result_row»title».»</td>»;

echo»<td>».$result_row»author».»</td>»;

echo»<td>».$result_row»price».»</td>»;

echo»<td>».$result_row»discount».»</td>»;

echo»<td>».$result_row»amount».»</td>»;

echo»</tr>»;

}

echo»</table>»;

}
 

catch(PDOException$e){

echo»Ошибка при создании записи в базе данных: «.$e->getMessage();

}

// Закрываем соединение

$db=null;

?>

<body>

<html>

Результат заполнения HTML-таблицы данными из таблицы books.

Результат вывода данных из таблицы MySQL при помощи PHP

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: