[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"/ru/kb/how-to/other/sql-join-vidy-zaprosy-primeryKbData":3},{"page":4,"pages":141,"recommendedPages":142,"category":105,"categoryTree":105,"total":148,"currentOrder":171,"activeManualCategoryId":105,"tag":-1},{"route":5,"uuid":8,"title":9,"excerpt":10,"content":11,"view_count":12,"published_at":13,"modified_at":13,"like":14,"category":17,"hero_image":98,"seo_metadata":99,"schema_org_metadata":103,"open_graph_metadata":106,"sections":107,"tags":130,"breadcrumbs":131,"images":138},{"language":6,"path":7},"ru","/kb/how-to/other/sql-join-vidy-zaprosy-primery","cf130df7-ae81-a666-5b0a-1de6d3f526d4","Принципы работы SQL Join: виды, запросы, примеры","Структура реляционных БД подразумевает хранение различных данных в соответствующих таблицах. Часто запросы требуют обращений к нескольким таблицам сразу.","\n\u003Cp>Структура реляционных БД подразумевает хранение различных данных в соответствующих таблицах. Часто запросы требуют обращений к нескольким таблицам сразу. Для решения этой задачи существует механизм Join, способный объединять данные из нескольких таблиц.\u003C/p>\n\n\n\n\u003Cp>В этой статье мы подробно рассмотрим, что собой представляет и как работает оператор Join в SQL, а также вас ждет описание разновидностей Join и примеры использования в различных задачах.\u003C/p>\n\n\n\n\u003Ch2 id=\"vidy-join-v-sql\">Виды Join в SQL\u003C/h2>\n\n\n\n\u003Cp>Разберем наиболее популярные типы Join в SQL.\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-image image-block\">\u003Cimg src=\"https://cp.beget.com/shared/h7JEwc7Z6zG6tOdWEspvNJsrBfEt1a6o/image1.png\" alt=\"Наглядное сравнение разных типов Join\">\u003C/div>\n\n\n\n\u003Ch3 id=\"inner-join\">Inner Join\u003C/h3>\n\n\n\n\u003Cp>Inner Join позволяет получить данные из указанных в SQL-запросе таблиц. Рассмотрим пример, в котором нам необходимо сопоставить покупателя и заказ. Укажем в запросе желаемые столбцы и таблицы, из которых необходимо их получить:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>SELECT orders.order_id, customers.name, orders.product_name \nFROM customers\nJOIN orders\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Далее в запросе необходимо явно задать условие: должны быть выведены строки, в которых значение столбца \u003Ccode>customer_id\u003C/code> в таблице \u003Ccode>customers\u003C/code> совпадает со значением столбца \u003Ccode>customer_id\u003C/code> в таблице \u003Ccode>orders\u003C/code>. Для этого добавим оператор \u003Ccode>ON\u003C/code>:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>ON customers.customer_id=orders.customer_id;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Итоговый запрос выглядит следующим образом:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>SELECT orders.order_id, customers.name, orders.product_name \nFROM customers \nJOIN orders \nON customers.customer_id = orders.customer_id;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>В результате получаем объединенную таблицу “покупатель – заказ”:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>+----------+---------------+--------------+\n| order_id | name          | product_name |\n+----------+---------------+--------------+\n|      101 | John Smith    | Laptop       |\n|      102 | Emma Johnson  | Smartphone   |\n|      103 | John Smith    | Mouse        |\n|      104 | Michael Brown | Keyboard     |\n|      105 | David Wilson  | Monitor      |\n|      106 | Sarah Davis   | Headphones   |\n|      107 | John Smith    | Tablet       |\n+----------+---------------+--------------+\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Если в SQL-запросе вы не указали тип Join, то, как и в примере выше, будет использован Inner Join. В результате будут получены только те строки, данные в которых совпадают в обеих таблицах по заданному критерию.\u003C/p>\n\n\n\n\u003Cp>Однако помимо Inner существуют и другие типы механизма Join, позволяющие получить информацию из таблиц.\u003C/p>\n\n\n\n\u003Ch3 id=\"left-join\">Left Join\u003C/h3>\n\n\n\n\u003Cp>Left Join возвращает все строки из левой таблицы и совпадающие строки из правой. Если совпадений нет, вместо значений правой таблицы будут выведены \u003Ccode>NULL\u003C/code>.\u003C/p>\n\n\n\n\u003Cp>Это особенно полезно, когда необходимо получить полный список объектов, даже если связанные данные отсутствуют.\u003C/p>\n\n\n\n\u003Cp>Например, выведем всех покупателей, включая тех, кто еще ничего не заказал:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>SELECT customers.name, orders.product_name\nFROM customers\nLEFT JOIN orders\nON customers.customer_id = orders.customer_id;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Результат:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>+---------------+--------------+\n| name          | product_name |\n+---------------+--------------+\n| John Smith    | Laptop       |\n| Emma Johnson  | Smartphone   |\n| John Smith    | Mouse        |\n| Michael Brown | Keyboard     |\n| David Wilson  | Monitor      |\n| Sarah Davis   | Headphones   |\n| John Smith    | Tablet       |\n| Lisa Anderson | NULL         |\n| Alex Lock     | NULL         |\n+---------------+--------------+\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Покупатели Alex Lock и Lisa Anderson присутствуют в таблице \u003Ccode>customers\u003C/code>, но не имеют заказов, поэтому значение \u003Ccode>product_name\u003C/code> равно \u003Ccode>NULL\u003C/code>.\u003C/p>\n\n\n\n\u003Ch3 id=\"right-join\">Right Join\u003C/h3>\n\n\n\n\u003Cp>Right Join работает аналогично Left Join, но приоритет отдается правой таблице:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>SELECT customers.name, orders.product_name\nFROM customers\nRIGHT JOIN orders\nON customers.customer_id = orders.customer_id;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>В результат попадут все строки из таблицы \u003Ccode>orders\u003C/code>, даже если соответствующего покупателя в таблице \u003Ccode>customers\u003C/code> нет:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>+---------------+--------------+\n| name          | product_name |\n+---------------+--------------+\n| John Smith    | Laptop       |\n| Emma Johnson  | Smartphone   |\n| John Smith    | Mouse        |\n| Michael Brown | Keyboard     |\n| David Wilson  | Monitor      |\n| Sarah Davis   | Headphones   |\n| John Smith    | Tablet       |\n| NULL          | USB Cable    |\n+---------------+--------------+\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Ch3 id=\"full-join\">Full Join\u003C/h3>\n\n\n\n\u003Cp>Full Join возвращает все строки из обеих таблиц. Если запись есть в левой таблице, но нет в правой – для столбцов правой таблицы будут выведены \u003Ccode>NULL\u003C/code>. И наоборот: если запись есть в правой таблице, но нет в левой, \u003Ccode>NULL\u003C/code> получат столбцы левой таблицы.\u003C/p>\n\n\n\n\u003Cp>Этот тип объединения удобен, когда нужно найти все несоответствия между таблицами: например, покупателей без заказов и заказы без привязанных покупателей.\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-alert alert-block alert-block-info\">\u003Cdiv class=\"alert-block-title\">Обратите внимание!\u003C/div>\u003Cdiv class=\"alert-block-content\">В \u003Ca href=\"https://beget.com/ru/cloud/dbaas-mysql?utm_source=kb&amp;utm_medium=article&amp;utm_campaign=sql_join&amp;utm_content=site_mysql\">MySQL\u003C/a> нет нативной поддержки Full Join. Однако его можно эмулировать с помощью объединения Left Join и Right Join через оператор Union.\u003C/div>\u003C/div>\n\n\n\n\u003Cp>Пример SQL-запроса с Full Join:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>SELECT customers.name, orders.product_name\nFROM customers\nFULL JOIN orders\nON customers.customer_id = orders.customer_id;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Для MySQL запрос будет выглядеть так:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>SELECT customers.name, orders.order_id, orders.product_name\nFROM customers\nLEFT JOIN orders\nON customers.customer_id = orders.customer_id\nUNION\nSELECT customers.name, orders.order_id, orders.product_name\nFROM customers\nRIGHT JOIN orders\nON customers.customer_id = orders.customer_id;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Оператор Union автоматически удаляет дублирующиеся строки.\u003C/p>\n\n\n\n\u003Cp>Результат запроса:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>+---------------+----------+--------------+\n| name          | order_id | product_name |\n+---------------+----------+--------------+\n| John Smith    |      101 | Laptop       |\n| Emma Johnson  |      102 | Smartphone   |\n| John Smith    |      103 | Mouse        |\n| Michael Brown |      104 | Keyboard     |\n| David Wilson  |      105 | Monitor      |\n| Sarah Davis   |      106 | Headphones   |\n| John Smith    |      107 | Tablet       |\n| Lisa Anderson |     NULL | NULL         |\n| Alex Lock     |     NULL | NULL         |\n| NULL          |      108 | USB Cable    |\n+---------------+----------+--------------+\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>В результате мы получили таблицу со всеми клиентами и заказами, избежав при этом наличия дублей строк.\u003C/p>\n\n\n\n\u003Ch3 id=\"self-join\">Self Join\u003C/h3>\n\n\n\n\u003Cp>Self Join – это соединение таблицы самой с собой. Такой тип Join используется, когда строки одной таблицы связаны друг с другом. Например, если в таблице сотрудников хранится информация об их руководителях.\u003C/p>\n\n\n\n\u003Cp>Рассмотрим пример таблицы \u003Ccode>employees\u003C/code>, где:\u003C/p>\n\n\n\n\u003Cul>\u003Cli>\u003Ccode>id\u003C/code> – идентификатор сотрудника\u003C/li>\u003Cli>\u003Ccode>name\u003C/code> – имя сотрудника\u003C/li>\u003Cli>\u003Ccode>manager_id\u003C/code> – идентификатор его руководителя\u003C/li>\u003C/ul>\n\n\n\n\u003Cp>Чтобы сопоставить сотрудников с их менеджерами, используем Self Join и псевдонимы таблицы:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>SELECT e.name AS employee, m.name AS manager\nFROM employees e\nLEFT JOIN employees m\nON e.manager_id = m.id;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>В результате получаем:\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-code code-block\">\u003Cpre data-options=\"{&quot;mode&quot;:&quot;sql&quot;}\">\u003Ccode>+---------------+--------------+\n| employee      | manager      |\n+---------------+--------------+\n| John Smith    | NULL         |\n| Emma Johnson  | John Smith   |\n| Michael Brown | John Smith   |\n| Sarah Davis   | Emma Johnson |\n+---------------+--------------+\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp>Здесь John Smith является руководителем верхнего уровня – у него нет начальника, поэтому значение \u003Ccode>manager\u003C/code> равно \u003Ccode>NULL\u003C/code>. Остальные сотрудники связаны со своими менеджерами через поле \u003Ccode>manager_id\u003C/code>.\u003C/p>\n\n\n\n\u003Ch2 id=\"zaklyuchenie\">Заключение\u003C/h2>\n\n\n\n\u003Cp>Оператор Join – один из ключевых инструментов в SQL.\u003C/p>\n\n\n\n\u003Cp>В зависимости от задач можно использовать разные типы Join: получать только совпадающие строки, сохранять данные из одной из таблиц или находить несвязанные записи.\u003C/p>\n\n\n\n\u003Cdiv class=\"wp-block-beget-alert alert-block alert-block-info\">\u003Cdiv class=\"alert-block-title\">SQL JOIN позволяет объединить данные из разрозненных таблиц в единую картину. Именно поэтому он считается одной из ключевых возможностей SQL при работе с реляционными базами данных.\u003C/div>\u003Cdiv class=\"alert-block-content\">Надежда Шатило, аналитик в Beget\u003C/div>\u003C/div>\n\n\n\n\u003Cp>Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “\u003Ca href=\"https://cp.beget.com/support?utm_source=kb&amp;utm_medium=article&amp;utm_campaign=sql_join&amp;utm_content=cp_support\">Помощь и поддержка\u003C/a>”), а если вы захотите обсудить синтаксис SQL Join или наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем \u003Ca href=\"https://t.me/beget_chat\">сообществе\u003C/a> в Telegram.\u003C/p>\n",12,"2026-08-03T19:34:18+03:00",{"count":15,"liked":16},2,false,{"route":18,"title":20,"tags":21,"breadcrumbs":90,"uuid":91,"parent_uuid":92,"default_page_path":26,"seo_metadata":93},{"language":6,"path":19},"/kb/how-to/other","Другое",[22,27,31,35,39,43,47,51,54,58,62,66,70,74,78,82,86],{"id":23,"title":24,"seo_metadata":25},"apache","Apache",{"title":26,"description":26,"header":26,"keywords":26},"",{"id":28,"title":29,"seo_metadata":30},"backup","BackUp",{"title":26,"description":26,"header":26,"keywords":26},{"id":32,"title":33,"seo_metadata":34},"bitrix","Bitrix",{"title":26,"description":26,"header":26,"keywords":26},{"id":36,"title":37,"seo_metadata":38},"cms","CMS",{"title":26,"description":26,"header":26,"keywords":26},{"id":40,"title":41,"seo_metadata":42},"ddos","DDoS",{"title":26,"description":26,"header":26,"keywords":26},{"id":44,"title":45,"seo_metadata":46},"diagnostika","Диагностика",{"title":26,"description":26,"header":26,"keywords":26},{"id":48,"title":49,"seo_metadata":50},"fajlovyj-menedzher","Файловый менеджер",{"title":26,"description":26,"header":26,"keywords":26},{"id":52,"title":52,"seo_metadata":53},"htaccess",{"title":26,"description":26,"header":26,"keywords":26},{"id":55,"title":56,"seo_metadata":57},"mysql","MySQL",{"title":26,"description":26,"header":26,"keywords":26},{"id":59,"title":60,"seo_metadata":61},"php","PHP",{"title":26,"description":26,"header":26,"keywords":26},{"id":63,"title":64,"seo_metadata":65},"redis","Redis",{"title":26,"description":26,"header":26,"keywords":26},{"id":67,"title":68,"seo_metadata":69},"reklama","Реклама",{"title":26,"description":26,"header":26,"keywords":26},{"id":71,"title":72,"seo_metadata":73},"sajty","Сайты",{"title":26,"description":26,"header":26,"keywords":26},{"id":75,"title":76,"seo_metadata":77},"servisy","Сервисы",{"title":26,"description":26,"header":26,"keywords":26},{"id":79,"title":80,"seo_metadata":81},"ssh","SSH",{"title":26,"description":26,"header":26,"keywords":26},{"id":83,"title":84,"seo_metadata":85},"terminal","Терминал",{"title":26,"description":26,"header":26,"keywords":26},{"id":87,"title":88,"seo_metadata":89},"veb-analitika","Веб-аналитика",{"title":26,"description":26,"header":26,"keywords":26},[],"990b6a3c-10fb-f492-f734-6ece33e9e4e3","fa9a1354-631a-4206-df34-291f0db8f42a",{"title":94,"description":95,"header":96,"keywords":97},"Другие вопросы. Полезные статьи – Beget","Полезные статьи о Других вопросах на сайте Beget","Другие вопросы. Полезные статьи","Beget, FAQ",{"src":26,"text":26},{"title":100,"description":101,"keywords":102},"SQL Join: виды, запросы и примеры","Подробный разбор функции JOIN в SQL | Популярные виды запросов для объединения и преобразования массива данных для аналитики","джоин sql, аналитика данных, работа с базами данных SQL",{"faq":104,"how_to":105,"product":105},[],null,{},[108,112,115,118,121,124,127],{"level":109,"name":110,"anchor":111},1,"Виды Join в SQL","vidy-join-v-sql",{"level":15,"name":113,"anchor":114},"Inner Join","inner-join",{"level":15,"name":116,"anchor":117},"Left Join","left-join",{"level":15,"name":119,"anchor":120},"Right Join","right-join",{"level":15,"name":122,"anchor":123},"Full Join","full-join",{"level":15,"name":125,"anchor":126},"Self Join","self-join",{"level":109,"name":128,"anchor":129},"Заключение","zaklyuchenie",[],[132,136],{"route":133,"title":135},{"language":6,"path":134},"/kb/how-to","Полезные статьи",{"route":137,"title":20},{"language":6,"path":19},[139],{"src":140},"https://cp.beget.com/shared/h7JEwc7Z6zG6tOdWEspvNJsrBfEt1a6o/image1.png",[],[143,153,162],{"route":144,"uuid":146,"title":147,"excerpt":26,"content":26,"view_count":148,"published_at":26,"modified_at":26,"like":105,"category":105,"hero_image":105,"seo_metadata":105,"schema_org_metadata":105,"open_graph_metadata":105,"sections":149,"tags":150,"breadcrumbs":151,"images":152},{"language":6,"path":145},"/kb/how-to/other/komanda-cat-v-linux","e96fff10-fe20-52bc-3854-b06f6d82c31b","Команда cat в Linux – что делает, для чего нужна",0,[],[],[],[],{"route":154,"uuid":156,"title":157,"excerpt":26,"content":26,"view_count":148,"published_at":26,"modified_at":26,"like":105,"category":105,"hero_image":105,"seo_metadata":105,"schema_org_metadata":105,"open_graph_metadata":105,"sections":158,"tags":159,"breadcrumbs":160,"images":161},{"language":6,"path":155},"/kb/how-to/other/xdebug-debag-i-profilirovanie-koda-php-profiling","27d0ba41-9fa5-27cb-5dc9-e1441927847b","Дебаг и профилирование PHP-кода с помощью Xdebug",[],[],[],[],{"route":163,"uuid":165,"title":166,"excerpt":26,"content":26,"view_count":148,"published_at":26,"modified_at":26,"like":105,"category":105,"hero_image":105,"seo_metadata":105,"schema_org_metadata":105,"open_graph_metadata":105,"sections":167,"tags":168,"breadcrumbs":169,"images":170},{"language":6,"path":164},"/kb/how-to/other/video-kak-vosstanovit-sajt-iz-rezervnoj-kopii","b3d6caff-213e-01d2-b76d-1ca8314932e9","Видео: Восстановление сайта из резервной копии на хостинге",[],[],[],[],"popularity-desc"]