關於在SQL語句中ON和WHERE中條件使用的差異
create
table customers |
查詢情況
select
* from customers |
在SQLServer2005中的查詢中,SQLServer對查詢語句的解析順序如下:
1. SQLServer先按照From表進行笛卡爾乘積
即對customer和order做笛卡爾乘積,得到一個28行的虛擬表,以上兩條SQL語句是完全一致的。
2. 然後按照ON的順序校驗True/False
對笛卡爾乘積的結果進行True/False判斷,即對on c.customerid=o.customerid 和on c.customerid=o.customerid and c.city='Madrid',實際上從結果上看這兩條語句沒什麼不同,主要是後者的c.city=’Madrid’未起到任何作用。
3. 然後進行Left Outer操作
在Left Outer環節中,因為都是使用customer為基表,在此結果中又把客戶MRPHS加了回來,這就是第一條語句會多出來一條記錄的原因。
4. 然後進行Where條件解析
第一條語句沒有where條件,而第二條語句繼續進行where語句解析,又把客戶MRPHS刪除了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-439084/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 替代SQL語句WHERE條件中OR關鍵詞SQL
- 關於外連線和where條件
- SQL中on條件與where條件的區別[轉]SQL
- Oracle中where子句中條件的物理執行順序Oracle
- T-SQL——關於Join on的的連線條件和where的篩選條件的區分SQL
- SQL中 where 子句和having子句中的區別SQL
- SQL 語句中關於 NULL 的那些坑SQLNull
- 【SQL】SQL中if條件的使用SQL
- sql語句中where一定要放在group by 之前SQL
- Python 提取出SQL語句中Where的值的方法PythonSQL
- SQL優化] 避免在WHERE子句中對列使用函式SQL優化函式
- 子查詢包含where ..or在Corelated Subquery 中語句中問題
- SQL中的where條件,在資料庫中提取與應用淺析SQL資料庫
- where語句中多條件查詢欄位NULL與NOT NULL不確定性查詢Null
- MyBatis的使用三(在sql語句中傳值)MyBatisSQL
- sql語句中JOIN ON 的使用SQL
- 在ORACLE SQL語句中,單引號和雙引號的使用OracleSQL
- SQL分組中WHERE和HAVING的異同SQL
- LINQ系列:LINQ to SQL Where條件SQL
- 資料庫SQL語句中關於explain關鍵字的用法資料庫SQLAI
- 在sql語句中替換Not In 的方法SQL
- sql語句中#{}和${}的區別SQL
- sql語句中as的用法和作用SQL
- 關於在SAP中SQL語句的效能SQL
- SQL語句中 left join 後用 on 還是 where,區別大SQL
- MyBatis在SQL語句中取list的大小MyBatisSQL
- 【SQL】Oracle SQL join on語句and和where使用區別SQLOracle
- SQL語句中exists和in的區別SQL
- SQL語句中not in 和not exist的區別SQL
- switch拼接where條件
- oracle只有當where子句中所有條件都使用"=:"才認為是使用繫結變數麼?Oracle變數
- SQL Server 2008中SQL增強之三:Merge(在一條語句中使用Insert,Update,Delete)SQLServerdelete
- php中條件語句的使用整理PHP
- sql語句中as的用法SQL
- 建表時的約束的語法在informix和oracle中的差異ORMOracle
- SQL中where和on的區別SQL
- 在Python中捕獲finally語句中異常訊息Python
- ORACLE sql merge into update where條件位置與效能消耗OracleSQL