參考:https://www.douban.com/note/518373959/
一、select 1 from 的作用
1、select 1 from mytable 與 select anycol(目的表集合中的任意一行)from mytable、select * from mytable 作用上來說是沒有差別的,都是查看是否有記錄。 --雖然說沒有區別,但還是好奇到底為什么用select 1 from
2、select 1 from 中的1是一常量,查到的所有行的值都是它,但從效率上來說,1>anycol>*,因為不用查字典表。 --這里所說的查到滿足篩選條件的記錄,會生成一個臨時列,而且值是1,這里有個性能點,就是執行效率1>anycol>*,執行效率是最快的;有數據就返回1,沒數據返回null
3、查看記錄條數可以用select sum(1) from mytable;等價於select sum(*) from mytable。
4、例如select top 1 1 from mytable 用來判斷表是否有記錄,如有記錄則顯示一個 1,沒有則不顯示。
二、什么時候適用?
一般用來當做判斷子查詢是否成功(即是否有滿足條件的時候使用),常用於exists,子查詢中,
比如
select * from ta where exists (select 1 from ta.id = tb.id)
這個判斷就是(select 1 from ta.id = tb.id)這個查詢如果有返回值的話表示當前查詢滿足條件,一般來說就簡單話的用select 1
這種查詢寫法,在性能調優的時候,可能會經常用到,執行效率比較快。