2013-03-24 48 views
-1

我必須構造這些查詢,因此它們是完美的SQL。查詢需要爲SQL Server數據庫,我有一個數據庫StoresDB,一個表items_table如何構建這些SQL查詢以使它們成爲完美的SQL?

我需要此表

  • 那裏的價格高於或低於等於項的編號£10內檢索項的

    1. 總數 - 列名是量

    2. 計算機類別中的項目列表 - 列名='comp_id'按減少的數量排序。

    對於上述要求我曾嘗試以下:

    1. SELECT COUNT(*) FROM items_table

    2. Select * from items_table where amount >= 10

    3. Select * from items_table where comp_id = ’electronics’ desc

    我對SQL很陌生,不確定是否已經正確地嘗試了這一點。

  • +0

    完美的SQL究竟是什麼?你的三個查詢看起來不錯。第一個查詢是正確的。第二個查詢:用金額替換價格。第三個查詢,加入comp表。 – RAS 2013-03-24 19:23:05

    +0

    您可以通過使用'SELECT COUNT(1)FROM items_table'來改進a)。這樣服務器不需要查找硬盤上的所有數據。如果你不想用1來更清晰的代碼,請選擇主鍵列而不是*。 – 2013-03-24 19:26:27

    +0

    @RAS好的謝謝,但問題c沒有說明有一個表只是表明計算機類別中的項目列表和列名稱是comp_id? – Sam 2013-03-24 19:26:56

    回答

    0

    a)外觀正確。

    b)您正在被要求計數,但正在查詢一個列表。

    SELECT COUNT(*) FROM items_table WHERE price >= 10 
    

    C)這一個看起來不錯,但你缺少一個ORDER BY聲明。

    SELECT * FROM items_table WHERE catID='electronics' ORDER BY price DESC 
    
    1

    也許是好寫這類查詢時,需要了解幾件事情:

    一)SELECT COUNT(*) FROM items_table

    此查詢正確寫入。

    B)SELECT COUNT(*) FROM items_table WHERE amount >= 10

    查詢是確定的,但選擇創建覆蓋WHERE子句,在這種情況下,是件好事,對amount列非聚集索引的索引

    C)SELECT * FROM items_table WHERE comp_id = 'electronics' ORDER BY price DESC

    有了這最後一個查詢,你有一個問題,搜索結果中的所有列,SELECT * ...這被認爲是在生產中的不好的做法,所以你需要把真正需要列的SELECT列表,而不是所有的列。您也可以在comp_id列上創建非聚集索引,並從SELECT列表中包含列。