SQL基礎回顧系列一 單表查詢(select語句)

來源:互聯網
上載者:User

  很久沒有寫部落格了,最近一直忙於找工作,心都沒辦法安靜下來。通過最近的面試,也給自己暴露了不少問題,其中很重要的一塊就是資料庫,因為項目的原因,最近兩年在文思的香港馬會的項目組都沒有使用過資料庫,所以資料庫這一塊也成了我的短板,所以也借離職在家這段時間,系統地回顧一下資料庫的知識,我會寫成一個系列並堅持寫下去。

  先從select語句寫起,因為它是學習T-SQL的基礎。首先總結一下select語句邏輯處理順序,如下,下面按照邏輯順序來總結。

  from

  where

  group by

  having

  select

    over

    distinct

    top

  order by

from子句

  from子句是在邏輯處理階段第一個要處理的查詢子句。它是用來指定要查詢的表名,以及對錶進行操作的表運算子。下面的例子是對Sales資料庫結構描述中的Orders表進行查詢,看sql語句:

SELECT orderid,custid,empid,orderdate,freightFROM Sales.Orders;

  執行結果:

 

  注意:1> 應該總是用資料庫結構描述來限定代碼中的對象名稱,如Sales.Order。
     2> 應該顯示指定要查詢的列,避免一些額外的代價。
     3> select出的結果看起來是以特定的順序返回(以orderid的升序排列)的, 但不能保證絕對這樣。
     4> Sql server分隔識別碼使用方括弧,如[Order Details]

where子句

  它的作用是過濾由from階段返回的行,可以指定一個謂詞或邏輯運算式。如where階段只保留id為71的客戶下的訂單,sql代碼如下:

SELECT orderid,custid,empid,orderdate,freightFROM Sales.OrdersWHERE custid=71;

  程式輸出結果為:

group by子句

  group by階段可以將前面邏輯查詢處理階段返回的行按“組”進行組合,每個組由在group by子句中指定的各元素決定。如對於where階段返回的資料中出現的每個僱員id和訂單年份值的唯一組合,sql代碼如下:

SELECT  empid ,        YEAR(orderdate) AS orderyear ,        SUM(freight) AS totalfreight ,        COUNT(*) AS numordersFROM    Sales.OrdersWHERE   custid = 71GROUP BY empid ,        YEAR(orderdate);

  程式輸出結果為:

  注意:1,group by階段之後的所有階段(包括having,select以及order by)的操作對象都是組。比如這裡是select。
     2,一個元素如果不在group by列表中出現,就只能作為彙總函式(Count,Sum,Avg,Min以及Max)的輸入,比如這裡的Sum和Count函數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.