Объясните мне, пожалуйста, простым языком команду 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
SQL
Вопрос по SQL. Помогите понять решение задачи
не, 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
вот, примерно так.
пусть есть таблица А с полями (ключ, запись) и содержимым:
ключ = 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
вот, примерно так.
>найти скорости таких ПК-блокнотов
>Не понимаю почему нужно ставить p.maker, l.speed
Вот поэтому и надо. Просили найти скорость "блокнотов" - выводи "блокноты" и скорость.
К JOIN это не имеет ни малейшего отношения.
>Не понимаю почему нужно ставить p.maker, l.speed
Вот поэтому и надо. Просили найти скорость "блокнотов" - выводи "блокноты" и скорость.
К JOIN это не имеет ни малейшего отношения.
Похожие вопросы
- Вопрос по SQL + Python
- Вопрос по SQL - уникальное поле ID для трёх таблиц (нельзя вставить значения в одну, если оно есть в другой таблице).
- PL SQL Помогите пожалуйста как из этого запроса сделать функцию
- SQL. Выводятся не все данные. 4 задача.
- Простая задача на SQL
- SQL задача. Помогите решить
- Помогите написать sql запросы
- Помогите решить SQL задачки?
- Чем отличаются разные SQL?
- Не очень понятен синтаксис запросов SQL