Разница между предложением ON и использованием в sql
Я выполняю какое-то задание, связанное с объединениями в oracle.
В какой-то момент я застрял, то есть какая разница между предложением USING и ON.
Я знаю, что, используя предложение ON, мы можем присоединиться к неограниченным таблицам.
Можно ли присоединиться к неограниченным таблицам с помощью предложения USING? Как?
не могли бы вы объяснить это, используя пример.
Ответы
Ответ 1
Предложение USING
Предложение USING используется, если несколько столбцов имеют одно и то же имя, но вы не хотите присоединяться, используя все эти общие столбцы. Столбцы, перечисленные в инструкции USING can not, имеют какие-либо квалификаторы в инструкции, включая предложение WHERE:
Предложение ON
Предложение ON используется для объединения таблиц, в которых имена столбцов не совпадают в обеих таблицах. Условия соединения удаляются из условий фильтра в предложении WHERE:
Oracle
select department_name, city
from departments
JOIN locations
USING (location_id); -- specify the same column name
-- for both of the tables for the join
select department_name, city
from departments dept
join locations loc
on (d.location_id = l.id); -- specify different column name
-- for the tables for the join.
Ответ 2
В дополнение к вышеприведенным ответам важное различие заключается в том, что предложение ON сохраняет столбцы из каждой объединенной таблицы отдельно, что предложение USING объединяет столбцы из объединенных таблиц в один столбец. Это может быть важно, например, если вы хотите сохранить строки в своем результирующем наборе, только если соответствующая строка не существует в одной из объединенных таблиц. Для этого вы обычно используете OUTER JOIN вместе с условием в предложении WHERE, например
SELECT t1.*
FROM TABLE_1 t1
LEFT OUTER JOIN TABLE_2 t2
ON (t2.KEY_FIELD = t1.KEY_FIELD)
WHERE t2.KEY_FIELD IS NULL
В этом случае предполагается, что TABLE_2.KEY_FIELD является частью первичного ключа в TABLE_2 и поэтому никогда не может быть NULL, если данные действительно присутствуют в TABLE_2. Если после указанного выше соединения TABLE_2.KEY_FIELD обнаруживает, что в объединенном наборе содержится NULL, это означает, что ни одна строка TABLE_2 не была найдена, чтобы соответствовать соответствующей строке TABLE_1. Иногда это может быть полезно.
Поделитесь и наслаждайтесь.
Ответ 3
Дополнительные ответы на выше.
using
Параграф будет печатать объединенный столбец только один раз.
A.id B.id
1 1
2 2
3 3
Select * from A JOIN B using(id);
Выход будет
id
1
2
3
Но в разделе On
Select * from A JOIN B on A.id=B.id;
Выход будет.
id id
1 1
2 2
3 3
Ответ 4
Оба допускают объединение "неограниченных" таблиц. Разница в том, что для USING требуется, чтобы столбцы join имели одно и то же имя:
select emp.ename, dept.dname
from emp join dept using (deptno);
Версия ON также работает, когда столбцы соединения имеют разные имена:
select emp.ename, emp2.ename manager_name
from emp join emp emp2 on (emp.mgr = emp2.empno);
Ответ 5
USING
:
SELECT * FROM COUNTRIES JOIN CITIES USING (COUNTRY)
Вышеприведенный запрос выполняет внутреннее соединение между таблицей COUNTRIES
и таблицей CITIES
при условии, что COUNTRIES.COUNTRY
равно CITIES.COUNTRY
ON
:
SELECT * FROM COUNTRIES JOIN CITIES ON (COUNTRIES.COUNTRY = CITIES.COUNTRY)
Вышеприведенный запрос выполняет операцию внутреннего соединения с использованием предложения on.
Ответ 6
SELECT s.SID, s.SNAME, a.CNAME, c.MAJOR
FROM STUDENT s JOIN COLLEGE c
ON s.SID = c.SID;
SELECT SID, s.SNAME, a.CNAME, a.MAJOR
FROM STUDENT s JOIN COLLEGE c
USING (SID);
Предложение USING
: это позволяет указать ключ соединения по имени.
ON
позволяет указывать имена столбцов для ключей соединения в обеих таблицах.