Разделы презентаций


SQL Запросы в базах данных

Содержание

Объединение таблиц (внутреннее объединение)Синтаксис самого простого объединения следующий: SELECT имена_столбцов_таблицы_1, имена_столбцов_таблицы_2 FROM имя_таблицы_1, имя_таблицы_2;Например, у нас есть две таблицы:в первой хранятся идентификаторы авторов и их имена (users);- во второй темы, созданные

Слайды и текст этой презентации

Слайд 1Объединение таблиц, группировка записей
SQL Запросы в базах данных

Объединение таблиц, группировка записей SQL Запросы в  базах данных

Слайд 2Объединение таблиц (внутреннее объединение)
Синтаксис самого простого объединения следующий:
SELECT имена_столбцов_таблицы_1, имена_столбцов_таблицы_2


FROM имя_таблицы_1, имя_таблицы_2;

Например, у нас есть две таблицы:
в первой хранятся

идентификаторы авторов и их имена (users);
- во второй темы, созданные авторами и их идентификаторы (topics).
Объединение таблиц (внутреннее объединение)Синтаксис самого простого объединения следующий: SELECT имена_столбцов_таблицы_1, имена_столбцов_таблицы_2 FROM имя_таблицы_1, имя_таблицы_2;Например, у нас есть

Слайд 3Объединение таблиц (внутреннее объединение)
Необходимо создать запрос, чтобы в ответе были

не идентификаторы авторов, а их имена.
Создадим простое объединение:
SELECT topic_name, name

FROM topics, users

Объединение таблиц (внутреннее объединение)Необходимо создать запрос, чтобы в ответе были не идентификаторы авторов, а их имена.Создадим простое

Слайд 4Объединение таблиц (внутреннее объединение)
Получилось не совсем то, ожидалось.

Такое объединение научно

называется декартовым произведением, когда каждой строке первой таблицы ставится в

соответствие каждая строка второй таблицы.
Чтобы результирующая таблица выглядела так, как нам нужно, необходимо указать условие объединения.
Мы связываем наши таблицы по идентификатору автора, это и будет нашим условием.
Т.е. мы укажем в запросе, что необходимо выводить только те строки, в которых значения поля id_author таблицы topics совпадают со значениями поля id_user таблицы users:

SELECT topic_name, name FROM topics, users
WHERE topics.id_autor=users.id_user;

Объединение таблиц (внутреннее объединение)Получилось не совсем то, ожидалось.Такое объединение научно называется декартовым произведением, когда каждой строке первой

Слайд 5Объединение таблиц (внутреннее объединение)
Т.е. мы в запросе сделали следующее условие:

если в обеих таблицах есть одинаковые идентификаторы, то строки с

этим идентификатором необходимо объединить в одну результирующую строку.
Объединение таблиц (внутреннее объединение)Т.е. мы в запросе сделали следующее условие: если в обеих таблицах есть одинаковые идентификаторы,

Слайд 6Объединение таблиц (внутреннее объединение)
На схеме это выглядит следующим образом:
Если в

одной из объединяемых таблиц есть строка с идентификатором, которого нет

в другой объединяемой таблице, то в результирующей таблице строки с таким идентификатором не будет. В нашем примере есть пользователь Oleg (id=5), но он не создавал тем, поэтому в результате запроса его нет.
При указании условия название столбца пишется после названия таблицы, в которой этот столбец находится (через точку). Это сделано во избежание путаницы, так как столбцы в разных таблицах могут иметь одинаковые названия.
Объединение таблиц (внутреннее объединение)На схеме это выглядит следующим образом:Если в одной из объединяемых таблиц есть строка с

Слайд 7Синтаксис объединения с условием:
 
SELECT имя_таблицы_1.имя_столбца1_таблицы_1,

имя_таблицы_1.имя_столбца2_таблицы_1,
имя_таблицы_2.имя_столбца1_таблицы_2,

имя_таблицы_2.имя_столбца2_таблицы_2
FROM
имя_таблицы_1, имя_таблицы_2
WHERE
имя_таблицы_1.имя_столбца_по_которому_объединяем =
имя_таблицы_2.имя_столбца_по_которому_объединяем;
Если имя столбца уникально, то название таблицы можно опустить (как мы делали в примере), но делать это не рекомендуется. Объединения дают возможность выбирать любую информацию из любых таблиц, причем объединяемых таблиц может быть и три, и четыре, условий для объединения может быть не одно. 

Объединение таблиц (внутреннее объединение)

Синтаксис объединения с условием:    SELECT имя_таблицы_1.имя_столбца1_таблицы_1,      имя_таблицы_1.имя_столбца2_таблицы_1,

Слайд 8Объединение таблиц (внешнее объединение)
Позволяет выводить все строки одной таблицы и

имеющиеся связанные с ними строки из другой таблицы.
Например: нам надо

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

То есть в результирующей таблице есть только те пользователи, которые создавали темы. А нам надо, чтобы выводились все имена.

Объединение таблиц (внешнее объединение)Позволяет выводить все строки одной таблицы и имеющиеся связанные с ними строки из другой

Слайд 9Объединение таблиц (внешнее объединение)
Немного изменим запрос:
 
SELECT users.name,

topics.topic_name
FROM users LEFT OUTER JOIN topics

ON users.id_user=topics.id_author;

И получим желаемый результат - все пользователи и темы, ими созданные. Если пользователь не создавал тему, но в соответствующем столбце стоит значение NULL. 
Объединение таблиц (внешнее объединение)Немного изменим запрос:    SELECT users.name, topics.topic_name   FROM users LEFT OUTER

Слайд 10Объединение таблиц (внешнее объединение)
В запрос было добавлено ключевое слово - LEFT

OUTER JOIN, указав тем самым, что из таблицы слева надо

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

Синтаксис для внешнего объединения следующий:

SELECT имя_таблицы_1.имя_столбца, имя_таблицы_2.имя_столбца
FROM имя_таблицы_1 ТИП ОБЪЕДИНЕНИЯ имя_таблицы_2
ON условие_объединения;

Объединение таблиц (внешнее объединение)В запрос было добавлено ключевое слово - LEFT OUTER JOIN, указав тем самым, что из

Слайд 11Объединение таблиц (внешнее объединение)
Поменяем в нашем запросе левостороннее объединение на

правостороннее
Теперь есть все темы (все строки из правой таблицы), а

пользователи только те, которые темы создавали (т.е. из левой таблицы выбираются только те строки, которые связаны с правой таблицей).
Объединение таблиц (внешнее объединение)Поменяем в нашем запросе левостороннее объединение на правостороннееТеперь есть все темы (все строки из

Слайд 12Группировка записей и функция COUNT()
Для того, чтобы посмотреть какие сообщения

и в каких темах имеются воспользуемся запросом

SELECT*FROM posts;

Группировка записей и функция COUNT()Для того, чтобы посмотреть какие сообщения и в каких темах имеются воспользуемся запросомSELECT*FROM

Слайд 13Группировка записей и функция COUNT()
Для того, чтобы узнать сколько сообщений

имеется на форуме можно воспользоваться встроенной функцией COUNT().
Эта функция подсчитывает

число строк. Причем, если в качестве аргумента этой функции выступает *, то подсчитываются все строки таблицы. А если в качестве аргумента указывается имя столбца, то подсчитываются только те строки, которые имеют значение в указанном столбце. В нашем примере оба аргумента дадут одинаковый результат, т.к. все столбцы таблицы имеют тип NOT NULL.

Напишем запрос, используя в качестве аргумента столбец id_topic:
 
SELECT COUNT(id_topic) FROM posts;

Группировка записей и функция COUNT()Для того, чтобы узнать сколько сообщений имеется на форуме можно воспользоваться встроенной функцией COUNT().

Слайд 14Группировка записей и функция COUNT()
Получим:
Т.е., в наших темах имеется 4

сообщения

Группировка записей и функция COUNT()Получим:Т.е., в наших темах имеется 4 сообщения

Слайд 15Группировка записей и функция COUNT()
Для того чтобы узнать сколько сообщений

имеется в каждой теме, нужно сгруппировать наши сообщения по темам

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

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

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

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

Слайд 16Группировка записей и функция COUNT()
Результат выполнения запроса:
Если бы в поле

id_topic были возможны отсутствия значений, то такие строки были бы

объединены в отдельную группу со значением NULL.
Группировка записей и функция COUNT()Результат выполнения запроса:Если бы в поле id_topic были возможны отсутствия значений, то такие

Слайд 17Группировка записей и функция COUNT()
Предположим, что нас интересуют только те

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

указали бы условие с помощью оператора WHERE, но этот оператор умеет работать только со строками, а для групп те же функции выполняет оператор HAVING:
 
SELECT id_topic, COUNT(id_topic) FROM posts
GROUP BY id_topic
HAVING COUNT(id_topic) > 2;

Результат:

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

Теги

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика