Разница между предложением ON и использованием в sql

Я выполняю какое-то задание, связанное с объединениями в oracle. В какой-то момент я застрял, то есть какая разница между предложением USING и ON.

Я знаю, что, используя предложение ON, мы можем присоединиться к неограниченным таблицам. Можно ли присоединиться к неограниченным таблицам с помощью предложения USING? Как? не могли бы вы объяснить это, используя пример.

Ответ 1

  • Предложение USING: это позволяет вам указать ключ соединения по имени.

  • Предложение ON: этот синтаксис позволяет указать имена столбцов для ключей соединения в обе таблицы.

Предложение 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 позволяет указывать имена столбцов для ключей соединения в обеих таблицах.