- •Технология организации баз данных и знаний
- •Методические указания к выполнению лабораторных работ
- •Методические указания к выполнению лабораторных работ
- •Предисловие
- •Библиографический список
- •Лабораторная работа № 1 Тема №1. ИнсталляцияMySqLи создание локального сервера
- •1. Цель работы
- •2. Основные технические возможности
- •3. Описание установки
- •4. Порядок выполнения работы
- •5. Содержание отчета
- •Лабораторная работа № 1
- •6. Содержание отчета
- •Лабораторная работа № 2 Тема №1. Создание баз и таблиц данных
- •1. Цель работы
- •2. Основные сведения
- •3. Программа работы
- •4. Указания к выполнению работы
- •3. Программа работы
- •00 Проверка моего домена с именем Moy.Loc
- •4. Указания к выполнению работы
- •5. Содержание отчета
- •3. Указания к выполнению работы
- •Задание 2: Разработать html-форму с методом Post
- •Тема №2. Передача значений переменным в сценариях php. Использование возможностей метода get без html-формы для передачи значений переменных в сценариях php
- •Тема №3. Создание формы и рнр-сценария в одном файле
- •Задание 1: Получение данных из текстового поля
- •I курсив
- •Тема №4. Использование чисел. Управляющие структуры
- •Тема №5. Использование управляющей структурыswitch
- •Тема № 6. Использование регулярных выражений в сценариях рнр
- •Проверка ошибок
- •Задание 1. Вывод информации о ошибочно заполненных полях формы
- •Задание 2. Использование функций пользователя для контроля полей формы
- •Задание 3. Проверка ограничений в текстовом поле.Lab6_0_2.Php
- •Задание 4. Специфика имени пользователя. Lab6_0_3.Php
- •Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.Php
- •Тема №7. Работа с массивами
- •Задание 1. Означивание массива и вывод на экран. Lab7_0.Php.
- •Задание 4. Сортировка массива.Lab7_3.Php.
- •Тема №8. Функции в сценариях рнр
- •Задание 1. Вложенные функции.Lab8_0_0.Php
- •Задание 2. Объявление функций внутри других функций.Lab8_0.Php
- •Задание 3. Возврат значений функцией.Lab8_1.Php
- •Задание 4. Возврат нескольких значений функцией.Lab8_2.Php
- •Задание 5. Возвращение функцией нескольких величин.Lab8_3.Php
- •Задание 6. Рекурсивные функции .Lab8_4.Php
- •Задание 7. Функции-переменные.Lab8_5.Php
- •Задание 8. Построение библиотек функций.Lab8_6_0.Php.
- •Задание 9. Построение шаблона сайта.Lab8_7_0.Php.
- •Тема №9. Использование файлов для хранения данных в сценариях рнр
- •Создание сценария загрузки.
- •Задание 3. Сохранение пользовательских данных в текстовом файлеLab9_5.Php
- •Задание 4. Сохранение пользовательских данных в текстовом файлеLab9_6_0.Php
- •Тема № 10. Работа с каталогами в сценариях рнр
- •Тема №11. Создание панели управления файлами
- •Задание 1. Разработать форму и сопутствующее ей приложение для панели управления файлами.
- •Тема № 12.Работа с базой через монтторMySql и PhpMyAdmin
- •Задание 1. Создать базу данных через командную строку
- •Задание 3. Вставка данных в базу данных
- •Задание 4. Создание командных файлов и файлов сценариев для вставки данных в базу данных.
- •Тема № 13. Извлечение данных из базы данных
- •Задание 1. Оператор выборки данныхSelect
- •Задание 2. Извлечение данных по определенному критерию
- •Задание 3. Извлечение данных из нескольких таблиц
- •Задание 4. Поиск несоответствующих строк
- •Задание 5. Использование псевдонимов имен таблиц (as)
- •Задание 6. Извлечение данных в определенном порядке
- •Задание 7. Группировка и агрегирование данных
- •Задание 8. Обновление записей в базе данных (update)
- •Задание 10. Удаление записей, таблиц и базы данных (delete)
- •Тема № 14.Php и MySql. Доступ к базе данных MySql из Web с помощью рнр
- •Задание 1. Изучение работы архитектуры Web-баз данных
- •Задание 2. Проверка и фильтрация данных, исходящих от пользователя. Использование объектно-ориентированного синтаксисаPhp
- •Задание 3. Внесение новой информации в базу данных. Проверка и фильтрация данных, исходящих от администратора
- •Задание 4. Создание и удаление баз данных
- •Содержание
Задание 4. Поиск несоответствующих строк
Другой распространенный тип соединения в MySQL — объединение по остатку (левостороннее соединение – left join). В предыдущих примерах отбирались только те строки, в которых наблюдалось соответствие между таблицами. Однако могут потребоваться и строки, в которых нет соответствия — например, нужно найти клиентов, которые не сделали ни одного заказа, или книги, которые никто не заказывал.
Самый простой вариант ответа на такой вопрос в MySQL — использование левостороннего соединения, которое будет искать строки по указанному условию соединения двух таблиц. Если в указанной таблице нет подходящей строки, эта строка добавляется к результату, но с нулевым значением.
Пример:
select customers.customerid, customers.name, orders.orderid
from customers left join orders
on customers.customerid = orders.customerid;
Рис. 3.239. Запрос с левосторонним соединением.
Данный запрос SQL использует объединение по остатку для таблиц Customers и Orders. Его синтаксис в отношении условий объединения несколько иной; условие соединения указывается в специальной конструкции ON оператора SQL.
Результат запроса приведен на рис. 3.240.
Рис. 3.240. Результат запроса с левосторонним соединением.
Чтобы раскрыть суть левостороннего соединения добавим в таблицу Customers (Клиенты) еще одну строчку.
Рис. 3.241. Состав таблицы Customers (Клиенты) после добавления.
Если повторить запрос показанный на рис. 3.239, то получим результат приведенный на рис. 3.242.
Результат показывает, что для клиента Иван Иванов нет соответствующего orderid, поскольку его orderid имеют значения NULL.
Если необходимо найти исключительно тех клиентов, которые ничего не заказывали, этого можно достичь, проверив их на значение NULL в поле первичного ключа правой таблицы (в данном случае, orderid), поскольку строки с реальными значениями не могут иметь значение NULL (рис. 3.243)
Рис. 3.242. Результат левостороннего соединения таблиц Customers и Orders.
select customers.customerid, customers.name
from customers left join orders
using (customerid)
where orders.orderid is null;
Рис. 3.243. Запрос левостороннего соединения таблиц Customers и Orders с использованием using.
И вот результат:
Рис. 3.244. Результат левостороннего соединения таблиц Customers и Orders с использованием using.
Вероятно, вы обратили внимание на то, что в этом примере условие соединения обладает несколько другим синтаксисом. Соединение по остатку воспринимает как синтаксис ON, как было в первом примере, так и USING, как было во втором. Синтаксис USING не предполагает указания таблицы атрибута соединения, и по этой причине, если вы хотите пользоваться таким синтаксисом, столбцы в обеих таблицах должны называться одинаково.
Задание 5. Использование псевдонимов имен таблиц (as)
Часто бывает очень удобно, а порой и необходимо обращаться к таблицам под другими именами. Такие имена называются псевдонимами (aliase). Их можно создать в самом начале запроса, а потом пользоваться по мере необходимости. Псевдонимы очень удобны, все равно, что ярлык на рабочем столе. Если запрос, показанный на рис. 3.245 переписать с использованием псевдонимов (рис. 3.2460), то его объем становится меньше.
select customers . name
from customers, orders, order_items, books
where customers.customerid = orders.customerid
and orders.orderid = order_items.orderid
and order_items.isbn = books.isbn
and books.title like '%Java%';
Рис. 3.245. Запрос без использования псевдонимов.
Указывая таблицы, в фразе FROM, мы за именем таблицы вставляем конструкцию as, присваивая таблице псевдоним (короткое имя).
select с.name
from customers as с, orders as о, order_iterns as oi, books as b
where с.customerid = о.customerid
and о.orderid = oi.orderid
and oi.isbn = b.isbn
and b.title like '%Java%' ;
Рис. 3.246. Запрос с использованием псевдонимов.
Кроме того, псевдонимы можно давать столбцам, однако к этому мы вернемся после того, как рассмотрим обобщенные функции.
Табличные псевдонимы необходимы в случае соединения таблицы с самой собой. А такой подход очень удобен для поиска строк в той же таблице, в которой есть одинаковые значения. Если требуется найти клиентов, живущих в одном городе, скажем, с целью создания читательского клуба, можно присвоить одной и той же таблице Customers два разных псевдонима:
select sl.name, s2.name, sl.city
from customers as sl, customers as s2
where sl.city = s2.city
and sl.name != s2.name;
Рис. 3.247. Запрос с использованием 2-х псевдонимов на одной таблице.
Чтобы раскрыть суть соединения таблицы самой с собой, добавим в таблицу Customers (Клиенты) еще одну запись (рис. 3.248).
Рис. 3.248. Запрос на добавление нового клиента.
Далее исполним запрос на самосоединение таблиц:
Рис. 3.249. Список клиентов из одного города.
Мы делаем вид, что таблица Customers — это на самом деле две разные таблицы, sl и s2, и выполняем соединение по столбцу City. Второе условие, sl.name != s2.name, необходимо для того, чтобы в результате запроса не выдавалось соответствие клиента самому себе.
Резюме по типам соединениий
Мы рассмотрели только самые основные, хотя существуют еще несколько соединений, представленных в таблице на рис. 3.250.
Название |
Описание |
Декартово произведение |
Все комбинации всех строк во всех таблицах. В случае применения между именами таблиц ставят запятые и не употребляют конструкцию WHERE. |
Полное соединение |
Аналогично предыдущему. |
Перекрестное соединение |
Аналогично предыдущему. Также может использоваться с указанием ключевых слов CROSS JOIN между названиями объединяемых таблиц. |
Внутреннее соединение |
Семантически эквивалентно запятой. Может использоваться с указанием ключевых слов INNER JOIN. Без условия WHERE эквивалентно полному объединению. Обычно при истинно внутреннемобъединении задается условие WHERE. |
Соединение по равенству |
Использует условное выражение со знаком = для Соответствия в объединении строк из разных таблиц. В SQL в этом объединении применяется конструкция WHERE. |
Соединение по остатку |
Старается уравнивать строки в таблицах и выискивает несовпадающие строки со значениями NULL. В SQL используется с ключевыми словами LEFT JOIN. Предназначено для поиска отсутствующих значений. Аналогично можно употреблять RIGHT JOIN. |
Рис. 3.250. Типы соединеий в MySQL.