Чем эти два оператора SQL отличаются? - PullRequest
1 голос
/ 30 марта 2011

1

$query = mysql_query("
SELECT table_one.row 
FROM table_one 
INNER JOIN table_two 
ON table_two.row = $id");

2

$query = mysql_query("
SELECT table_one.row 
FROM table_one, table_two 
WHERE table_two.row = $id");

Это просто два способа написания одного и того же?

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Они оба достигают одинаковых результатов, но с разными подходами. Хотя вы неправильно используете предложение ON.

Я бы предложил что-то вроде этого:

$query = mysql_query("
SELECT table_one.row 
FROM table_one 
INNER JOIN table_two 
ON table_one.id = table_two.id
WHERE table_two.row = $id");

Цитата с сайта MySQL:

Conditional_expr, используемый с ON, - это любое условное выражение формы, которое можно использовать в предложении WHERE. Как правило, вы должны использовать предложение ON для условий, которые определяют, как объединять таблицы, и предложение WHERE, чтобы ограничить, какие строки вы хотите в результирующем наборе.

0 голосов
/ 30 марта 2011

В первом запросе используется более новый синтаксис ANSI-92, а во втором - более старый синтаксис ANSI-89.Оба должны давать идентичные результаты.

Более того, прочитайте этот пост: Почему стандарт SQL ANSI-92 лучше не принят по ANSI-89?

Лично, и янадеюсь, большинство согласится, я предпочитаю ANSI-92, который использует синтаксис "JOIN".Как упоминалось в ссылочном посте, он позволяет вам отделить ограничения JOIN от ограничений WHERE или фильтра, что улучшает удобочитаемость.

0 голосов
/ 30 марта 2011

Да, запросы семантически одинаковы.

Хотя оба производят декартово произведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...