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

  • Вывод

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


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

    Тема : SQL - Объединение таблиц (внешнее объединение)


    Цель: научиться объединять таблицы и совершать внутреннее объединение (продолжение)

    Ход работы:

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



    То есть в результирующей таблице есть только те пользователи, которые создавали темы. А нам надо, чтобы выводились все имена. Для этого мы немного изменим запрос:
    SELECT users.name, topics.topic_name

    FROM users LEFT OUTER JOIN topics

    ON users.id_user=topics.id_author;

    И получим желаемый результат - все пользователи и темы, ими созданные. Если пользователь не создавал тему, но в соответствующем столбце стоит значение NULL. 



    Итак, мы добавили в наш запрос ключевое слово - LEFT OUTER JOIN, указав тем самым, что из таблицы слева надо взять все строки, и поменяли ключевое слово WHERE на ON. Кроме ключевого слова LEFT OUTER JOIN может быть использовано ключевое слово RIGHT OUTER JOIN. Тогда будут выбираться все строки из правой таблицы и имеющиеся связанные с ними из левой таблицы. И наконец, возможно полное внешнее объединение, которое извлечет все строки из обеих таблиц и свяжет между собой те, которые могут быть связаны. Ключевое слово для полного внешнего объединения - FULL OUTER JOIN.

    Давайте поменяем в нашем запросе левостороннее объединение на правостороннее: 



    Как видите, теперь у нас есть все темы (все строки из правой таблицы), а вот пользователи только те, которые темы создавали (т.е. из левой таблицы выбираются только те строки, которые связаны с правой таблицей).

    К сожалению полное объединение СУБД MySQL не поддерживает.

    Подведем итог этого короткого урока. Синтаксис для внешнего объединения следующий:
    SELECT имя_таблицы_1.имя_столбца, имя_таблицы_2.имя_столбца

    FROM имя_таблицы_1 ТИП ОБЪЕДИНЕНИЯ имя_таблицы_2

    ON условие_объединения;

    где ТИП ОБЪЕДИНЕНИЯ - либо LEFT OUTER JOIN, либо RIGHT OUTER JOIN 

    Вывод: На этом уроке научились объединять таблицы и совершать внутреннее объединение на языке MySQL

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

    SQL - Группировка записей и функция COUNT()


    Цель: научиться группировать записи и изучить функцию COUNT()

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



    А что, если нам надо лишь узнать сколько сообщений на форуме имеется. Для этого можно воспользоваться встроенной функцией COUNT(). Эта функция подсчитывает число строк. Причем, если в качестве аргумента этой функции выступает *, то подсчитываются все строки таблицы. А если в качестве аргумента указывается имя столбца, то подсчитываются только те строки, которые имеют значение в указанном столбце.

    В нашем примере оба аргумента дадут одинаковый результат, т.к. все столбцы таблицы имеют тип NOT NULL. Давайте напишем запрос, используя в качестве аргумента столбец id_topic:
    SELECT COUNT(id_topic) FROM posts;




    Итак, в наших темах имеется 4 сообщения. Но что, если мы хотим узнать сколько сообщений имеется в каждой теме. Для этого нам понадобится сгруппировать наши сообщения по темам и вычислить для каждой группы количество сообщений. Для группировки в SQL используется оператор GROUP BY. Наш запрос теперь будет выглядеть так:
    SELECT id_topic, COUNT(id_topic) FROM posts

    GROUP BY id_topic;

    Оператор GROUP BY указывает СУБД сгруппировать данные по столбцу id_topic (т.е. каждая тема - отдельная группа) и для каждой группы подсчитать количество строк: 



    Ну вот, в теме с id=1 у нас 3 сообщения, а с id=4 - одно. Кстати, если бы в поле id_topic были возможны отсутствия значений, то такие строки были бы объединены в отдельную группу со значением NULL.

    Предположим, что нас интересуют только те группы, в которых больше двух сообщений. В обычном запросе мы указали бы условие с помощью оператора WHERE, но этот оператор умеет работать только со строками, а для групп те же функции выполняет оператор HAVING:
    SELECT id_topic, COUNT(id_topic) FROM posts

    GROUP BY id_topic

    HAVING COUNT(id_topic) > 2;

    В результате имеем: 



    В уроке 4 мы рассматривали, какие условия можно задавать оператором WHERE, те же условия можно задавать и оператором HAVING, только надо запомнить, что WHERE фильтрует строки, а HAVING - группы.

    Итак, сегодня мы узнали, как создавать группы и как подсчитать количество строк в таблице и в группах. Вообще вместе с оператором GROUP BY можно использовать и другие встроенные функции, но их мы будем изучать позже. 
    1   ...   4   5   6   7   8   9   10   11   ...   18


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