Różnica między połączeniem A połączeniem wewnętrznym
Oba te połączenia dadzą mi takie same wyniki:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
Vs
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
Czy jest jakaś różnica między wypowiedziami w wykonaniu lub w inny sposób?
Czy różni się między różnymi implementacjami SQL?
7 answers
Są funkcjonalnie równoważne, ale INNER JOIN
mogą być nieco jaśniejsze do odczytania, zwłaszcza jeśli zapytanie zawiera inne typy połączeń (np. LEFT
lub RIGHT
lub CROSS
).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 16:35:04
Po prostu wpisanie JOIN
domyślnie wykonuje INNER JOIN
.
Dla wszystkich innych jedno zdjęcie jest czasem warte więcej niż setki słów:
Zdjęcie dzięki uprzejmości Code Project.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 10:59:18
No, there is no difference, pure cukier składniowy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-19 14:48:41
INNER JOIN jest domyślną wartością , Jeśli nie podasz typu podczas używania słowa JOIN.
Możesz również użyć LEFT OUTER JOIN lub RIGHT OUTER JOIN, w którym to przypadku słowo OUTER jest opcjonalne, możesz też określić połączenie krzyżowe.
Lub
Dla połączenia wewnętrznego składnia jest następująca:
Wybierz ...
FROM TableA
[INNER] JOIN TableB(innymi słowy, słowo kluczowe "wewnętrzne" to opcjonalne - wyniki są takie same with or without it)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-30 10:41:27
Podobnie z OUTER JOINs
, słowo {[2] } jest opcjonalne. To słowo kluczowe LEFT
lub RIGHT
sprawia, że JOIN
jest "OUTER" JOIN
.
Jednak z jakiegoś powodu zawsze używam "OUTER"
jak w LEFT OUTER JOIN
i nigdy LEFT JOIN
, ale nigdy nie używam INNER JOIN
, a raczej po prostu używam "JOIN"
:
SELECT ColA, ColB, ...
FROM MyTable AS T1
JOIN MyOtherTable AS T2
ON T2.ID = T1.ID
LEFT OUTER JOIN MyOptionalTable AS T3
ON T3.ID = T1.ID
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 10:57:15
Czy różni się między różnymi implementacjami SQL?
Tak, Microsoft Access nie pozwala tylko join
. Wymaga inner join
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-19 10:57:53
Jak już mówią inne odpowiedzi, nie ma różnicy w twoim przykładzie.
Odpowiedni bit gramatyki jest udokumentowany tutaj
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Pokazując, że wszystkie są opcjonalne. Strona dodatkowo wyjaśnia, że
INNER
określa zwracane są wszystkie pasujące pary wierszy. Odrzuty niezrównane wiersze z obu tabel. Gdy Nie podano typu join, to jest wartością domyślną .
Gramatyka wskazuje również, że istnieje jeden czas, w którym na INNER
jest wymagane. Podczas określania podpowiedzi przyłączenia.
Zobacz przykład poniżej
CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);
SELECT *
FROM T1
LOOP JOIN T2
ON X = Y;
SELECT *
FROM T1
INNER LOOP JOIN T2
ON X = Y;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-02 16:38:33