SQL乐园(12):用SELECT语句计算
软件世界
朋友们看了我们上几期介绍的SELECT语句,可能会有这样一个误解,认为SELECT语句只能将数据从数据表中原样取出。其实,用SELECT语句我们还可以对数据进行处理,比如计算。
1.引例
启动SQL Server 2000的“服务管理器”,进入“查询分析器”,在窗口上方的下拉框中选择Northwind数据库,然后在查询窗口中输入以下语句:SELECT ProductID,Product Name,UnitPrice * UnitsInStock FROM Products
从字面上分析,上述语句的意思是从产品表中查询出每种产品的库存占用总金额。点击“执行查询”按钮查看结果,可以证明我们的猜测。在上面的语句中,“*”的意思是“乘”,而不是通配符。
2.运算符
SQL标准支持的运算符如右表所示。
有些DBMS也支持超出SQL标准的运算,如“%”和“^”,“%”的意思是“求模”,即求除法的整型余数,如13%4=1;“^”的意思是“求幂”,即求乘幂的值,如3^3=27。
3.高级计算
综合运用上面的运算符和以前学习的WHERE语句,我们可以进行更复杂的计算,如下面的例子:计算Northwind数据库“Order Details”表中ProductID为1的所有订单的总额。完成这个看似复杂的任务其实只须执行下面的语句:
SELECT SUM(UnitPrice * Quantity) FROM "Order De tails" WHERE ProductID=1
有两点需要说明:一是数据表名“Order Details”加了引号(英文状态),这是因为“Order Details”中间有空格,此举可以防止SQL解释器误解(感兴趣的朋友可以去掉引号实验一下);另一个是SUM(),它是求和函数,我们将在下期详细介绍。(吉林 李国海)
上期问题:从Northwind数据库Suppliers表中找出提供商公司名称(CompanyName)和所属国家(Country),其中Country按降序排列,CompanyName按升序排列。
参考答案:SELECT Country,CompanyName FROM Sup pliers ORDER BY Country DESC, CompanyName ASC
本期问题:按照Northwind数据库Products表中的订货量(U nitsOnOrder)和库存量(UnitsInStock)计算还要准备多少进货款。
本期的幸运读者是辽宁的李东,他将获得《多机互连必杀技》(含1CD)一本。请朋友们在答题的E-mail中注明通讯地址,以便邮寄奖品。
