Используя базу данных вывести данные

Вывод информации из базы данных

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

Каждый пользователь, работающий с СУБД, имеет возможность использования спе­циальных средств построения отчетовдля вывода данных. Используя специальные средства создания отчетов, пользователь получает следующие дополнительные возможнос­ти вывода данных:

─ включать в отчет выборочную информацию из таблиц БД;

─ добавлять информацию, не содержащуюся в БД;

─ при необходимости выводить итоговые данные на основе информации базы данных;

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

─ включать в отчет информацию из разных связанных таблиц БД.

4. РАЗРАБОТКА ИНФОЛОГИЧЕСКОЙ МОДЕЛИ

И СОЗДАНИЕ СТРУКТУРЫ РЕЛЯЦИОННОЙ БАЗЫ ДАННЫХ

4.1. Организация данных

Как уже было отмечено выше, слово «реляционная» происходит от английского relation ─ отношение. Отношение ─ ма­тематическое понятие, но в терминологии моделей данных отношения удобно изображать в виде таблицы. При этом строки таблицы соответствуют кортежам отношения, а столбцы ─ атрибутам. Ключом называют любую функцию от атрибутов кортежа, которая может быть использована для идентификации кортежа. Такая функция может быть значением одного из атрибутов (простой ключ), задаваться алгебраическим выражением, включающим значения нескольких атрибутов (составной ключ). Это означает, что данные в строках каждого из столбцов составного ключа могут повторяться, но комбинация данных каждой строки этих столбцов является уникальной. Например, в рассмотренной выше таблице Студенты (см. рис.1.9) есть столбцы Фамилия и Дата рождения. В каждом из столбцов есть некоторые повторяющиеся данные, т.е. одина­ковые фамилии и одинаковые даты рождения. Но если студенты, имеющие одинаковые фа­милии, имеют разные даты рождения, то эти столбцы можно использовать в качестве со­ставного ключа. Как правило, ключ является уникальным, т.е. каждый кортеж определяется значением ключа однозначно, но иногда используют и неуникальные ключи (ключи с по­вторениями). В локализованной (русифицированной) версии Access вводится термин ключевое поле, которое можно трактовать как первичный ключ.

В Access можно выделить три типа ключевых полей: простой ключ, составной ключ и внешний ключ.

Одно из важнейших достоинств реляционных БД состоит в том, что можно хранить логически сгруппированные данные в разных таблицах и задавать связи между ними, объединяя их в единую базу. Для задания связи таблицы должны иметь поля с одина­ковыми именами или хотя бы с одинаковыми форматами данных. Связь между таблицами устанавливает отношения между совпадающими значениями в этих полях. Такая организа­ция данных позволяет уменьшить избыточность хранимых данных, упрощает их ввод и ор­ганизацию запросов и отчетов. Поясним это на примере. Допустим, в базе надо хранить данные о студентах (фамилия, изучаемая дисциплина) и преподавателях (фамилия, название кафедры, ученая степень, преподаваемая дисциплина). Если хранить данные в одной таблице, то в строке с фамилией студента, изучающего конкретную дисциплину, будут храниться все атрибуты преподавателя, читающего эту дисциплину. Это же огромная избы­точность данных. А если хранить данные о студенте в одной таблице, о преподавателе ─ в другой и установить связь между полями Читаемая дисциплина ─ Изучаемая дис­циплина (фактически это одинаковые поля), то избыточность хранимых данных много- кратно уменьшится без ущерба для логической организации информации.

В Access можно задать три вида связей между таблицами: Один-ко-многим, Многие-ко-многим и Один-к-одному.

Связь Один-ко-многим ─ наиболее часто используемый тип связи между таблицами. В такой связи каждой записи в таблице А может соответствовать несколько записей в таб­лице В (поля с этими записями называют внешними ключами), а запись в таблице В не мо­жет иметь более одной соответствующей ей записи в таблице А.

При связи Многие-ко-многим одной записи в таблице А может соответствовать несколько записей в таблице В, а одной записи в таблице В ─ несколько записей в таблице А. Такая схема реализуется только с помощью третьей (связующей) таблицы, ключ кото­рой состоит по крайней мере из двух полей, одно из которых является общим с таблицей А, а другое — общим с таблицей В.

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

Тип создаваемой связи зависит от полей, для которых определяется связь:

─ связь Один-ко-многим создается в том случае, когда только одно из полей является ключевым или имеет уникальный индекс, т.е. значения в нем не повторяются;

─ связь Один-к-одному создается в том случае, когда оба связываемых поля являются ключевыми или имеют уникальные индексы;

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

4.2. Целостность данных

Целостность данных означает систему правил, используемых в СУБД Access для поддер­жания связей между записями в связанных таблицах (таблиц, объединенных с помощью связи), а также обеспечивает защиту от случайного удаления или изменения связанных данных. Контролировать целостность данных можно, если выполнены следующие условия:

─ связанное поле (поле, посредством которого осуществляется связь) одной таблицы яв­ляется ключевым полем или имеет уникальный индекс;

─ связанные поля имеют один тип данных. Здесь существует исключение. Поле счетчи­ка может быть связано с числовым полем, если оно имеет тип Длинное целое;

─ обе таблицы принадлежат одной базе данных Access. Если таблицы являются связан­ными, то они должны быть таблицами Access. Для установки целостности данных БД, в которой находятся таблицы, должна быть открыта. Для связанных таблиц из БД других форматов установить целостность данных невозможно.

Источник

Как sql-запросом извлечь из базы данных информацию, которой там нет

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

Приходят пользователи и просят: «Вот мы внесли данные в базу, а скажите нам, чего не хватает? Какие данные мы ещё не внесли в базу и их не хватает для полного счастья?»
Первая (и скажем честно, весьма глупая) реакция: «Как же я вам найду то, чего нет в базе данных?».

Но отбросим эмоции и применим логику. Ведь, как правило, требуются данные, формирование которых подчиняется некоему правилу — номера квитанций, справок и так далее… И я исхожу из того, что все эти номера и идентификаторы могут быть преобразованы в натуральную последовательность.
То есть задача будет сформулирована следующим образом: в базе данных хранится последовательность натуральных чисел, в которой есть пропуски, и необходимо вывести пропущенные числа для пользователя.
В такой формулировке задача уже выглядит достаточно простой. Более того — возникает желание реализовать эту задачу одним единственным sql-запросом.

Давайте создадим таблицу и заполним какими-нибудь данными.

Основная идея следующая: сравнить таблицу с самой собой же и для каждого значения ИКС найти минимальное ИГРЕК (которое всё же больше ИКСа), где (ИКС + 1) и (ИГРЕК — 1) будут нашими границами пропущенных диапазонов чисел. Добавив логичное условие, что, (ИКС + 1) должен быть не меньше (ИГРЕК — 1) получим следующие диапазоны: от 4 до 4, от 6 до 6, от 10 до 10 и от 13 до 15.
Какие есть нюансы:
1) Может быть пропущен первый элемент последовательности (в нашем случае это 1)
2) Неизвестен последний элемент последовательности (а вдруг это 22). Можно, конечно, запрашивать эту информацию у пользователя, но опыт подсказывает, что лучше этого избегать.
3) Диапазон «от 4 до 4» выглядит глючно, надо заменить просто на одно число
4) Результат всё-таки желательно получить значением одной строки, а не набором строк

Учитываем замечания и получаем вариант скрипта под MySQL:

и вариант под Oracle:

Результатом их выполнения является строка ‘1-2, 4, 6, 10, 13-15, 18. ‘
Во-первых, эта строка содержит то, что хотели пользователи.
Во-вторых, результат выглядит понятно для любого пользователя.
И в-главных, запрос выводит данные, которые действительно в базе данных не хранятся!

UPD1:

Большое спасибо всем, кто предложил варианты по улучшению скриптов, да и просто высказал интерес к этому вопросу.
Как это часто бывает, комментарии оказались интереснее и полезнее первоначальной статьи.
Действительно, стоило отметить, что нюанс номер 4 не реализуется стандартным синтаксисом SQL и для этой задачи необходимо привлекать дополнительный функционал, реализуемый на каждой отдельной СУБД по своему.
Ниже привожу скрипты, вытянутые мной из комментариев к статье.

Источник

Выводим данные из БД MySQL с помощью SQL-запросов

Здравствуйте, уважаемый посетитель!

В предыдущих статьях мы рассмотрели возможность записи данных в БД MySQL тремя разными способами:

  • в веб-интефейсе phpMyAdmin, записывая в ручную информацию в каждую ячейку таблицы;
  • с помощью подготовленных SQL-запросов;
  • программно, используя функции модуля MySQLi PHP, составив для этого соответствующий скрипт.

А, теперь выполним обратные действия, посмотрим, как можно вывести данные из таблицы MySQL с помощью SQL-запросов.

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

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

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

В связи с чем, вывод данных из БД MySQL здесь будет рассматриваться только для варианта с локальным веб-сервером «Denwer», который используется в нашем случае при создании сайта. Для хостинга будет все аналогично.

  • Выборка одиночной уникальной строки с заданным условием
  • Получение набора нескольких строк с сортировкой по заданному полю

Выборка одиночной уникальной строки с заданным условием

А предыдущих статьях мы сформировали в БД локального веб-сервера «avtobezugona» таблицу «url» и наполнили ее данными (другие ранее созданные таблицы «url_sql» и «url_php» использовались только для демонстрации возможности создания строк с помощью SQL-запросов и через PHP, поэтому в дальнейшем использоваться не будут).

Для начала снова вернемся к полученной таблице «url», предварительно открыв веб-приложение phpMyAdmin.

А теперь составим SQL-запрос, например, выборку строки, в которой в поле «url» значение будет соответствовать «poluchity-skidku» (на рис.1 эта строка имеет идентификатор «4»).

Как отмечалось ранее, в языке SQL имеется большое количества различных запросов предназначенных под разные конкретные задачи. Перечень возможных команд SQL можно посмотреть, например, в одном из разделов такого информационного ресурса, как Справочник по MySQL.

Для данной задачи будем использовать команду «SELECT», которая специально предназначена для поиска и выбора записей из таблиц.

Синтаксис написания такого SQL-запроса, в наиболее частом использовании, следующий:

  • сама команда SELECT;
  • имена полей, которые необходимо выбрать (если вместо них указан знак *, то будут выбраны все поля найденных строк);
  • слово FROM;
  • имя таблицы без кавычек или с использованием апострофа;
  • слово WHERE (если после имени таблицы слово WHERE отсутствует вместе с условием запроса, то будут выбраны все записи таблицы);
  • условие для выбора записей.

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

На следующем рисунке показано, как будет выглядеть запрос на извлечения из таблицы «url» записи со всеми полями с условием, что в этой строке в поле «url», будет присутствовать значение, равное «poluchity-skidku».

SELECT * FROM `url` WHERE `url`=’poluchity-skidku’

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

Для этого в phpMyAdmin следует открыть раздел «SQL» и написать или скопировать запрос в соответствующем поле, как показано на скриншоте.

А после нажатия на кнопку «OK» должен появиться результат его выполнения.

Как видно, мы получили ожидаемый результат — выборку записи с идентификатором «4».

При этом, чуть выше результата отображается код выполненного запроса, где системой автоматически добавлен дополнительный параметр «LIMIT 0, 30», означающий, что выборка выполнялась с записи номер «0» (самой первой) с максимальным количеством в 30 строк.

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

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

Получение набора нескольких строк с сортировкой по заданному полю

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

В нашей созданной таблице «url» заведомо не может быть каких-либо одинаковых значений полей, так как она предназначена для определения соответствия человеко-понятных урл (ЧПУ) к файлам страниц сайта (как составлялась данная таблица можно посмотреть в статье Создаем таблицы MySQL c помощью phpMyAdmin, SQL-команд и в PHP).

Поэтому, для того, что бы получить из данной таблицы несколько строк, воспользуемся в запросе оператором «OR» (логическое «ИЛИ»). И составим такое условие, при котором выбор строк будет происходить по любому указанному в запросе значению поля «url».

Скажем, кроме уже используемого в предыдущем примере значения «poluchity-skidku», дополнительно через оператор «OR» добавим еще два. Кроме того, отсортируем полученные строки таблицы в порядке убывания по значению идентификатора «id».

При таком варианте условия код запроса примет следующий вид.

SELECT * FROM `url` WHERE `url`=’poluchity-skidku’ OR `url`=’statistika-ugonov’ OR `url`=’kontakti’ ORDER BY `id` DESC

Здесь к предыдущему запросу через «OR», означающее логическое «ИЛИ», в качестве критерия поиска добавляются еще два значения поля «url» — «statistika-ugonov» и «kontakti».

Кроме того, с помощью конструкции «ORDER BY» в запросе указана сортировка выбранных строк по полю «id» в порядке убывания в соответствии ключевым словом «DESC» (если бы надо было отсортировать полученные записи по возрастанию, то вместо «DESC» нужно было бы применить «ASC».

А теперь, введем данный запрос в phpMyAdmin аналогично тому, как это делали в предыдущем случае.

И после его выполнения получим следующий результат.

В итоге, мы получили, что и требовалось — три строки таблицы с заданными критериями поиска и отсортированные по полю «id» в порядке убывания.

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

Если требуется сохранить полученные данные, то можно добавить в запрос команду «INTO OUTFILE» с указанием соответствующих параметров, включая имя файла, в который требуется выполнить запись.

Но, рассматривать такой вариант здесь не имеет смысла, так как в веб-программировании для сохранения результатов обработки запросов существует другой способ извлечения данных — с использованием PHP.

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

Источник

Читайте также:  Как вывести клей от скотча с пластика
Оцените статью