2013-03-24 23 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列表中包含列。