практическая работа. Практическая работа - для слияния. Практическая работа 1 sql создание базы данных и таблиц Цель
![]()
|
Метасимволы оператора LIKEПоиск с использованием метасимволов может осуществляться только в текстовых полях. Самый распространенный метасимвол - %. Он означает любые символы. Например, если нам надо найти слова, начинающиеся с букв "вел", то мы напишем LIKE 'вел%', а если мы хотим найти слова, которые содержат символы "клуб", то мы напишем LIKE '%клуб%'. Например: ![]() ![]() Обратите внимание на пробел между метасимволом и "рыб", если его пропустить, то запрос не сработает, т.к. метасимвол _ обозначает ровно один символ, а пробел - это тоже символ. На сегодня достаточно. В следующем уроке мы научимся составлять запросы к двум и более таблицам. А пока попробуйте самостоятельно составить запросы к таблице posts (сообщения). Практическая № 5 Тема: SQL - Вложенные запросыЦель: научиться создавать вложенные запросы В прошлом уроке мы столкнулись с одним неудобством. Когда мы хотели узнать, кто создал тему "велосипеды", и делали соответствующий запрос: ![]() Вместо имени автора, мы получали его идентификатор. Это и понятно, ведь мы делали запрос к одной таблице - Темы, а имена авторов тем хранятся в другой таблице - Пользователи. Поэтому, узнав идентификатор автора темы, нам надо сделать еще один запрос - к таблице Пользователи, чтобы узнать его имя: ![]() В SQL предусмотрена возможность объединять такие запросы в один путем превращения одного из них в подзапрос (вложенный запрос). Итак, чтобы узнать, кто создал тему "велосипеды", мы сделаем следующий запрос: ![]() То есть, после ключевого слова WHERE, в условие мы записываем еще один запрос. MySQL сначала обрабатывает подзапрос, возвращает id_author=2, и это значение передается в предложение WHERE внешнего запроса. В одном запросе может быть несколько подзапросов, синтаксис у такого запроса следующий: SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN (SELECT имя_столбца FROM имя_таблицы WHERE часть условия IN (SELECT имя_столбца FROM имя_таблицы WHERE условие) ) ; Обратите внимание, что подзапросы могут выбирать только один столбец, значения которого они будут возвращать внешнему запросу. Попытка выбрать несколько столбцов приведет к ошибке. Давайте для закрепления составим еще один запрос, узнаем, какие сообщения на форуме оставлял автор темы "велосипеды": ![]() Теперь усложним задачу, узнаем, в каких темах оставлял сообщения автор темы "велосипеды": ![]() Давайте разберемся, как это работает. Сначала MySQL выполнит самый глубокий запрос: SELECT id_author FROM topics WHERE topic_name='велосипеды' Полученный результат (id_author=2) передаст во внешний запрос, который примет вид: SELECT id_topic FROM posts WHERE id_author IN (2); Полученный результат (id_topic:4,1) передаст во внешний запрос, который примет вид: SELECT topic_name FROM topics WHERE id_topic IN (4,1); И выдаст окончательный результат (topic_name: о рыбалке, о рыбалке). Т.е. автор темы "велосипеды" оставлял сообщения в теме "О рыбалке", созданной Сергеем (id=1) и в теме "О рыбалке", созданной Светой (id=4). Вот собственно и все, что хотелось сказать о вложенных запросах. Хотя, есть два момента, на которые стоит обратить внимание: Не рекомендуется создавать запросы со степенью вложения больше трех. Это приводит к увеличению времени выполнения и к сложности восприятия кода. Приведенный синтаксис вложенных запросов, скорее наиболее употребительный, но вовсе не единственный. Например, мы могли бы вместо запроса SELECT name FROM users WHERE id_user IN (SELECT id_author FROM topics WHERE topic_name='велосипеды'); написать SELECT name FROM users WHERE id_user = (SELECT id_author FROM topics WHERE topic_name='велосипеды'); Т.е. мы можем использовать любые операторы, используемые с ключевым словом WHERE (их мы изучали в прошлом уроке). Вывод: На этом занятии мы научились создавать вложенные запросы Практическая работа № 6 |