mysql查詢語句

來源:互聯網
上載者:User

標籤:

在mysql資料庫中,主要包括的字句有select子句、from子句、where子句、group by子句、order by子句、having子句。當資料庫管理系統執行一條SQL語句時,以上的子句執行順序為1、執行from子句,將from子句中的表作為中間表;2、如果有where子句,則根據其中的過濾條件,從中間表中去掉不滿足過濾條件的行;3、根據group by子句中指定的分組列,對中間表中的資料進行分組;4、為每個組計算select子句彙總函式的值,並為每組產生查詢結果中的一行;5、如果有having子句,則根據having子句的過濾條件,分組計算彙總計算的結果再次過濾;6、如果有order by子句,則根據order by子句中的列,對結果進行排序。在上面所學的6個語句中,where和having都是過濾條件,但可以看到,他們有執行時間的先後不同,同時還有having是對彙總計算的結果再次過濾,而where則是對原資料表進行過濾。
當我們在一個表中使用查詢語句,往往會有各種各樣的條件。比如,已知有emp員工表,要“查詢表中每個部門(depno)中工資(sal)最高的人的資訊”。那麼我們可以寫select * from emp where (sal,depno) in (select max(sal),depno from emp group by depno)。這整句話就是一個子查詢的例子,外面的select語句是要查詢的內容,裡面的select語句是所要求的條件。這裡是使用where條件先執行,我們再來看一個例子要“查詢比20部門人數多得部門",SQL語句為select deptno from emp group by deptno having count(*) >(select count(*) from emp where deptno=20); 這裡我們為什麼用having而不用where呢,是因為有一個執行的順序問題,where作為過濾條件要先於分組group by執行,但彙總函式count(*)要後於group by執行,這顯然就發生了矛盾,而having的出現就完美地解決了這個問題。

mysql查詢語句

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.