Об'єднання таблиць (внутрішнє об'єднання) Тобто ми в запиті зробили таку умову: якщо в обох таблицях є однакові ідентифікатори, то рядки з цим ідентифікатором необхідно об'єднати в одну результуючу рядок.
Об'єднання таблиць (внутрішнє об'єднання) На схемі це виглядає наступним чином: Якщо в одній з поєднуваних таблиць є рядок з ідентифікатором, якого немає в інший об'єднаній таблиці, то в результуючій таблиці рядки з таким ідентифікатором не буде. У нашому прикладі є користувач Oleg (id = 5), але він не створював теми, тому в результаті запиту його немає. При вказівці умови назву стовпця пишеться після назви таблиці, в якій цей стовпець знаходиться (через точку). Це зроблено, щоб уникнути плутанини, так як стовпці в різних таблицях можуть мати однакові назви.
Синтаксис об'єднання з умовою: SELECT імя_табліци_1.імя_столбца1_табліци_1, імя_табліци_1.імя_столбца2_табліци_1, імя_табліци_2.імя_столбца1_табліци_2, імя_табліци_2.імя_столбца2_табліци_2 FROM імя_табліци_1, імя_табліци_2 WHERE імя_табліци_1.імя_столбца_по_которому_об'едіняем = імя_табліци_2.імя_столбца_по_которому_об'едіняем; Якщо ім'я стовпця унікально, то назва таблиці можна опустити (як ми робили в прикладі), але робити це не рекомендується. Об'єднання дають можливість вибирати будь-яку інформацію з будь-яких таблиць, причому об'єднуються таблиць може бути і три, і чотири, умов для об'єднання може бути не одне. Об'єднання таблиць (внутрішнє об'єднання)
Об'єднання таблиць (зовнішнє об'єднання) Дозволяє виводити всі рядки однієї таблиці і наявні пов'язані з ними рядки з іншої таблиці. Наприклад: нам треба вивести всіх користувачів і теми, які вони створювали, якщо такі є. Якщо ми скористаємося внутрішнім об'єднанням, розглянутим вище, то отримаємо в підсумку наступне: Тобто в результуючій таблиці є тільки ті користувачі, які створювали теми. А нам треба, щоб виводилися всі імена.
Об'єднання таблиць (зовнішнє об'єднання) Трохи змінимо запит: 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 відбудеться повне зовнішнє об'єднання, яке отримає всі рядки з обох таблиць і зв'яже між собою ті, які можуть бути пов'язані. Синтаксис для зовнішнього об'єднання наступний: SELECT імя_табліци_1.імя_столбца, імя_табліци_2.імя_столбца FROM імя_табліци_1 ТИП ОБ'ЄДНАННЯ імя_табліци_2 ON условіе_об'едіненія;
Об'єднання таблиць (зовнішнє об'єднання) Змінимо в нашому запиті лівосторонній об'єднання на правосторонній Тепер є всі теми (всі рядки з правої таблиці), а користувачі тільки ті, які теми створювали (тобто з лівої таблиці вибираються тільки ті рядки, які пов'язані з правою таблицею).
Угруповання записів і функція COUNT () Отримаємо: Тобто в наших темах є 4 повідомлення
Угруповання записів і функція COUNT () Результат виконання запиту: Якби в полі id_topic були можливі відсутності значень, то такі рядки були б об'єднані в окрему групу зі значенням NULL.