Главная SQL Inner Join
E-mail Печать PDF

INNER JOIN - возвращает строки, когда есть хотя бы одно совпадение в обеих таблицах.

Синтаксис SQL INNER JOIN

1
2
3
4
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

Note - Замечание: INNER JOIN это тоже что и JOIN.

Пример SQL INNER JOIN

Есть таблица "Persons":

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Есть таблица "Orders":

O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15

Теперь мы хотим выбрать все лица имеющих какие-либо заказы.

Для этого используем такой запрос:

1
2
3
4
5
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName

Результат запроса:

LastName FirstName OrderNo
Hansen Ola 22456
Hansen Ola 24562
Pettersen Kari 77895
Pettersen Kari 44678

Комментарии

 
+11 #1 Dinesh 2010-06-25 17:42 Good example. Easy to identify.
Thanx.
Цитировать
 
 
+16 #2 student 2010-08-09 20:46 спасибо за статью, всё очень просто и понятно! Цитировать
 
 
0 #3 Irina 2010-10-20 09:31 Благодарствую за ресурс)) Очень полезная информация, жаль нет возможноти сразу же потренероваться Цитировать
 
 
-2 #4 nekulin 2010-12-29 09:46 А он не может работать с однаковыми таблицами?
SELECT cat,(SELECT COUNT(*) FROM t INNER JOIN t ON cat.id = t.id) FROM t
ошибка
Not unique table/alias: 't'
Цитировать
 
 
0 #5 Piotr 2011-03-31 14:57 Dziękuję za bardzo jasne wyjaśnienie - bardzo pomogło. Pozdrowienia z Polski :) Цитировать
 
 
-3 #6 FilBV 2011-04-28 15:27 есть сложная задача которую ни как не могу решить:
пример: к таблице "Persons" добавим еще два поля "Date" и "Opis_OrderNo", в поле "Opis_OrderNo" заполняется текст с OrderNo который принадлежит таблице "Orders" (одной ячейке "OrderNo" может принадлежать несколько ячеек "Opis_OrderNo", задача:
присвоить каждой ячейке "OrderNo" таблицы "Orders" последнее по времени значение в поле "Opis_OrderNo" таблицы "Persons"
Цитировать
 
 
+3 #7 fibi 2012-02-23 20:22 А как будет выглядеть запрос если добавить 3 таблицу и тоже по ней сравнить какие-нибудь поля - как в примере? Цитировать
 
 
0 #8 zur4ik 2012-03-21 14:47 Thanks :)
It was very clear and understandable example :)
Цитировать
 
 
0 #9 Дмитрий 2012-05-12 20:43 Здравствуйте!
На примере этих таблиц у меня есть задача.
Мне нужно достать из таблицы "Persons" все записи и одновременно проверить,
Существует ли запись на данную персону во второй таблице по какому нибуть идентификатору.
Тоесть если существует хоть одна запись мне нужно как-то это определить, напр. получить true или false или достать значение или ничего не достать из второй таблицы если записи в ней нет.
На данный момент уменя выводится первая запись из "Persons" столько раз сколько есть записей во второй таблице по идентификатору.
Но мне этого ненадо.
Мне нужно достать все записи из "Persons" и проверить существование записи во второй таблице.

Если у меня 3 записи, то 3 записи мне и нужны, а из второй таблицы только "да" или "нет"

Вот такая у меня задача.
Возможно ли это решить одним запросом?
Заранее спасибо.
Цитировать
 

Авторизация

Nice Ajax Poll

Какое из моих расширений самое лучшее?

Статистика



Реклама