(8)select(9)distinct(11)top 1(6)table1.id,count(table1.name) as namecount(1)from table1(3)inner join table2(2)on table1.id=table2.id(4)where table1.id<4(5)group by table1.id(7)h**ing table1.id<3(10)order by table1.id desc序號給出了執行的順序:
(1)from:對table1和table2執行笛卡爾積,也就是兩個表的行的各種組合,共5*5=25行,生成虛擬表vt1
(2)on:選擇vt1中的那些table1.id=table2.id的所有行,生成虛擬表vt2。
(3)inner join:這裡是內部連線,直接就是vt2,如果是outer join,如left join、right join、full join,那麼還需要按照外部連線的規則,把vt1中沒有匹配的行新增到vt2,生成vt3.
(4)where:選出vt3中table1.id<4的**,給虛擬表vt4.
(5)group by:按照table1.id進行分組。
(6)count:執行聚合函式,選出對應table1.id的行數,生成的結果給虛擬表vt5
(7)h**ing:選擇vt5中table1.id<3的所有結果,給虛擬表vt6
(8)select:選擇vt6中相應的列,給虛擬表vt7
(9)distinct:將vt7中重複的行去除,生成vt8
(10)order by:將vt8的結果按照table1.id進行排序,這裡沒有生成乙個新的表vt9,而是生成游標vc9。
(11)top:從游標vc9的開始處選擇指定的行數,這裡是1行,生成虛擬表vt10.
經過上面的過程,最終的sql語句將vt10返回給使用者使用。
SQL循序漸進 24 嵌入SQL
嵌入 sql為了更好的理解嵌入 sql,本節利用乙個具體例子來說明。嵌入 sql允許程式連線資料庫並且包括 sql 到程式中,這樣在程式中就可以對資料庫進行使用 操作以及處理資料等等。以下是用c語言編寫的使用嵌入 sql的例程,它將列印乙個報告 這個程式必須在普通的編譯之前先預編譯 sql語句。嵌入...
yield和send的執行循序徹底搞清
yield 對於yield方法和generator的send同時使用時的執行順序一直搞不清,今天看到這篇 理解php中的generator 加上測試,終於搞清了。總結一下上文中的結論 幾個經典的例子幫助理解!1.經典的例子熱身 function xrange start,end,step 1 for...
SQL循序漸進 17 JOIN子句
join 子句不知你有沒有發現直到現在我們利用select語句來檢索的時候只能從乙個表中進行。如果你想從兩個表或者更多的表中進行檢索,該怎麼辦呢?好在我們可以使用sql和關係資料庫系統的乙個很有用的特性,即 join 為了簡單說明,實際上 join 就是使得關係資料庫系統相關的東東。join 允許你...