SQL

Вопрос по SQL. Помогите понять решение задачи

Объясните мне, пожалуйста, простым языком команду JOIN ON в SQL. Я понимаю, что это команда объединения двух таблиц. Но не понимаю как применять ее в решении задач.
Например задача:
Для каждого производителя, выпускающего ПК-блокноты c объёмом жесткого диска не менее 10 Гбайт, найти скорости таких ПК-блокнотов. Вывод: производитель, скорость.
SELECT DISTINCT p.maker, l.speed
FROM laptop l
JOIN product p ON p.model = l.model
WHERE l.hd >= 10

Не понимаю почему нужно ставить p.maker, l.speed
Сергей Марцен
Сергей Марцен
4 057
не, JOIN - это не объединение двух таблиц, а, скорее, соединение

пусть есть таблица А с полями (ключ, запись) и содержимым:
ключ = 1, запись = А1
ключ = 2, запись = А2

и таблица В с полями (ключ, запись) и содержимым:
ключ = 1, запись = В1
ключ = 2, запись = В2

объединение таблиц А и В выглядит так:
ключ = 1, запись = А1
ключ = 2, запись = А2
ключ = 1, запись = В1
ключ = 2, запись = В2

а соединение - так:
ключ = 1, запись из таблицы А = А1, запись из таблицы В = В1
ключ = 2, запись из таблицы А = А2, запись из таблицы В = В2

как видим, для объединения двух таблиц/выборок требуется, чтобы они имели одинаковый набор столбцов. а вот для соединения это не обязательно.

в SQL объединением заведует конструкция UNION, а соединением - JOIN.

рассмотрим соединение подробнее. для того, чтобы можно было "сшить" две таблицы, требуется задать условие - по каким условиям происходит соединение. в нашем примере это условие такое: "ключ таблицы А = ключ таблицы В"

пусть теперь в таблице А хранятся такие значения:
ключ = 1, запись = А1
ключ = 2, запись = А2

а в таблице В - такие:
ключ = 1, запись = В1
ключ = 3, запись = В3

что произойдет при соединении по условию "ключ из А = ключ из В"? а вот что:
ключ = 1, запись из таблицы А = А1, запись из таблицы В = В1
ключ = 2, запись из таблицы А = А2, запись из таблицы В = null
ключ = 3, запись из таблицы А = null, запись из таблицы В = В3

как видим, ключу со значением 2 в таблице В соответствия не нашлось, а ключу со значеним 3 - соответствия в таблице А
в этом случае возможны четыре варианта соединения: LEFT JOIN, RIGHT JOIN, INNER JOIN и FULL JOIN. результат их применения таков:

A LEFT JOIN B ON ключ из А = ключ из В,
результат:
ключ = 1, запись из таблицы А = А1, запись из таблицы В = В1
ключ = 2, запись из таблицы А = А2, запись из таблицы В = null

A RIGHT JOIN B ON ключ из А = ключ из В,
результат:
ключ = 1, запись из таблицы А = А1, запись из таблицы В = В1
ключ = 3, запись из таблицы А = null, запись из таблицы В = В3

A INNER JOIN B ON ключ из А = ключ из В,
результат:
ключ = 1, запись из таблицы А = А1, запись из таблицы В = В1

A FULL JOIN B ON ключ из А = ключ из В,
результат:
ключ = 1, запись из таблицы А = А1, запись из таблицы В = В1
ключ = 2, запись из таблицы А = А2, запись из таблицы В = null
ключ = 3, запись из таблицы А = null, запись из таблицы В = В3

вот, примерно так.
Сергей Быков
Сергей Быков
71 873
Лучший ответ
>найти скорости таких ПК-блокнотов
>Не понимаю почему нужно ставить p.maker, l.speed
Вот поэтому и надо. Просили найти скорость "блокнотов" - выводи "блокноты" и скорость.

К JOIN это не имеет ни малейшего отношения.
Андрей Ильин
Андрей Ильин
51 615