Главная

Monday, 26 February 2018

SQL - разница между INNER JOIN и OUTER JOIN.

Всем привет.

Совсем недавно на собеседовании мне был задан вопрос по SQL. Ну кто же его, или про него, не знает. Чаще всего строится ассоциация с запросами типа SELECT. Но оператор SELECT весьма многогранен. Лично меня часто смущали условия типа JOIN, как внешние так и внутренние. Поэтому я решил прояснить это вопрос. Может и вам пригодиться.

В чем же разница между INNER JOIN и OUTER JOIN?

В SQL есть два типа оператора JOIN: INNER JOIN и OUTER JOIN. OUTER JOIN тоже может быть двух видов: LEFT JOIN и RIGHT JOIN. Главная разница между INNER JOIN и LEFT JOIN в том, что в первом случае из обеих таблиц выбираются только подходящие записи, а во втором случае из первой таблицы выбираются все записи, а из второй только подходящие. Всегда обращайте внимание на запросы с «ALL», потому что они, как правило, требуют LEFT JOIN, например, запрос, который требует найти все отделения и количество работников в них. Если вы используете INNER JOIN, то пропустите пустые отделения, в которых никто не работает. FULL JOIN логично объединяет обе таблицы. Существует еще запись CROSS JOIN, но она используется редко.

А теперь наглядно.

В тексте запроса можно опускать INNER если указан только JOIN. И OUTER если используете LEFT JOIN или RIGHT JOIN.

Также бывает полезно знать командную строку логина к популярным СУБД. Ниже маленькая справка.

Oracle: default port 1521
Connection: sqlplus username/pass@host:port/service

MSSQL: default port 1433
Connections:
до 2005-го: osql.exe -U <login> -P <password> -i <inputfile> - выполнить файл используя указанный login/password
C 2005-го:  sqlcmd -S server1\SQLExpress -U SqlUserAccount -P SqlPassword

MySQL: default port 3306
Connection: mysql -h host -u user -p

Firebird: default port 3050
Connection: isql [режимы] [имя-базы-данных] [-u[ser] <имя-пользователя> -pas[sword] <пароль>]

Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?