2011-12-21 3 views
2

, если у меня есть SQL заявление, как:SQL с условием

Select * from Order, OrderDetail 
where Order.ID = OrderDetail.OrderID and OrderDetail.Amount > 5 

означает цикл во всех подряд, когда заказ союз с OrderDetail найти строки отвечают условию Сумму> 5 ??

Пожалуйста, помогите мне.

Мой вопрос: если после соединения 2 таблицы, выполните цикл базы данных во всех строках, созданных для поиска условия соответствия строки.

ответ

4

Этот запрос соединяет две таблицы через Order.ID = OrderDetail.OrderID. Независимо от того, фильтрует ли результирующие строки во время или после ввода/вывода до базы данных. Если у вас есть индекс на Amount, то возможно, что он будет искать соответствующие строки , затем join. Лучше всего посмотреть на вопрос EXPLAIN.

Но ваш запрос будет лучше выражен как:

select * 
from Order 
join OrderDetail on Order.ID = OrderDetail.OrderID 
where OrderDetail.Amount > 5 

Этот синтаксис делает его очень ясно, каковы критерии присоединиться, и каковы условия фильтрации строк. И форматирование его, как это, облегчает чтение!

Обычно таблицы приведены псевдонимы, что делает его еще проще читать:

Select * 
from Order o 
join OrderDetail od on o.ID = od.OrderID 
where od.Amount > 5 
+0

I второй эта .. – Vineeth

3

переписано как ...

Select * 
from Order, OrderDetail 
where Order.ID = OrderDetail.OrderID 
and OrderDetail.Amount > 5 

... этот запрос использует старый синтаксис эквисоединения (от Заказ, OrderDetail). Это то же самое, делая объединение таких как:

Select * 
from Order 
join OrderDetail ON ID=OrderId 
where OrderDetail.Amount > 5 

так, как я хотел бы написать это, вероятно, будет:

SELECT * 
FROM Order o 
JOIN OrderDetail od ON o.ID = od.OrderId AND od.Amount > 5 

Этот запрос получает все записи из ордена, которые имеют запись соответствия в OrderDetail с суммой больше 5.


Вы упомянули UNION, и я хочу, чтобы сделать точку, что JOIN и UNION разных вещей. UNION объединит строк в один комплект, тогда как JOIN объединит столбцы в один комплект.

Смежные вопросы