Главная страница
Навигация по странице:

  • Практическая № 5 Тема: SQL - Вложенные запросы Цель

  • Практическая работа № 6

  • практическая работа. Практическая работа - для слияния. Практическая работа 1 sql создание базы данных и таблиц Цель


    Скачать 3.41 Mb.
    НазваниеПрактическая работа 1 sql создание базы данных и таблиц Цель
    Анкорпрактическая работа
    Дата14.02.2023
    Размер3.41 Mb.
    Формат файлаdocx
    Имя файлаПрактическая работа - для слияния.docx
    ТипПрактическая работа
    #936408
    страница6 из 18
    1   2   3   4   5   6   7   8   9   ...   18

    Метасимволы оператора 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
    1   2   3   4   5   6   7   8   9   ...   18


    написать администратору сайта