日期:2011-05-02 15:22:00 来源:本站整理
跟我学MS SQL Server(2)[MSSQL防范]
本文“跟我学MS SQL Server(2)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
(二) SELECT语句选项
跟我学SQL分为三部份,此中涵盖了有关SQL尺度的基本知识.在上一篇文章里我们谈论了一些数据库术语和4种最基本的数据查询范例.此外,我们还注释了WHERE子句和条件语句的用法,同时我们供应了各类查询的具体示例.
在这篇文章里,我们将就其他一些SQL函数和子句举行阐述,供你用于基本的SELECT数据查询中.
SELECT选项精制后果
正如我们从上一篇文章中所读到的那样,SELECT语句具有种类繁多的各类选项,这些选项可以用来掌握数据返回的方法.这些选项以子句、关键词和函数的情势存在.
子句是一种改正后果的语句.子句不是必要的语句但它对数据的内容及其显示举行了提炼.WHERE子句就是这样的子句.
关键词触发数据库的内涵功效.这些关键词在有时乃至是查询所必须的.比方"INSERT INTO table_name (column1) VALUES (‘data1’);"语句中的INTO和VALUE就是如此.我们将理解DISTINCT关键词,它能触发一些非常有效的可选功效.
下面总结了一些最常用的子句、关键词和函数.然后我会对每一部份举例阐明.
ORDER BY – 按照指定列排序返回后果的子句
DISTINCT – 只返回后果调集内唯一行的关键词
COUNT -- 返回匹配查询的数据行总数数值的函数
AVG – 该函数返回指定列的平均值
SUM –该函数把指定的列中的数字加起来
MIN – 该函数返回列中最小的非NULL值
MAX –该函数返回列中的最大值
GROUP BY – 按列堆积查询函数后果的子句
用ORDER BY对查询后果排序
ORDER BY子句让数据库对查询后果排序,这样你就无须自己编写利用程序举行"手工"排序了.ORDER BY子句必须放在查询语句的末尾.其基本用法以下:
SELECT * FROM Contacts ORDER BY first_name;
你可以随便在任何挑选语句中利用ORDER BY 子句返回多列后果.你还可以用它衔接其他子句:
SELECT first_name, last_name FROM Contacts WHERE first_name BETWEEN ‘a’ AND ‘k’ ORDER BY last_name;
你可以对多列数据排序.优先次序按从左到右顺次降低,所以查询语句中各列的布列次序很重要.
SELECT * FROM Contacts ORDER BY company, last_name, first_name;
查询后果默许按数字大概字母的升序排序.你可以在ORDER BY 子句背面加上DESC关键词改成降序布列.在下面的例子中,最高的net_amount排在最早(降序).假定两行大概两行以上数据都包含了一样的net_amount值,那么同行中last_name值在字母表中最早呈现的排先,因为last_name一列还是按照升序排序的.
SELECT * FROM Sales ORDER BY net_amount DESC, last_name, first_name;
在按照定义的列名排序今后,大大都数据库随后将按照数据表内的第一列排序然后次序向右再排序.具体的实现各有改变,因此,假如排序在利用中对比重要那么你应当明确地定义所要排序的列.
别的一值得注意的问题是,采取ORDER BY子句(以及WHERE子句),你正在用来排序后果的数据列并不一定得是返回后果调集的一部份.只要全部引用的列都在数据表内存在则下例完好有效:
SELECT company, first_name, net_amount FROM Sales ORDER BY start_date, last_name;
DISTINCT返回不反复后果
DISTINCT关键词只返回后果调集内不反复的数据行.比方,有时你大概需求找出Sales表内的公司,但是你又不想瞥见每个条目.于是你可以用DISTINCT对应每一公司名返回一行数据:
SELECT DISTINCT company FROM Sales;
在利用DISTINCT时,它实用于全部的恳求列.假如你打算列出表内的全部贩卖人员和他们所代表的公司而非每一贩卖记录,那么你可以利用下列语句.注意,这样操作还大概返回同一公司的若干条目等等.
SELECT DISTINCT company, last_name, first_name FROM Sales;
你还可以在对后果缩小范围和举行排序时结合SELECT语句利用DISTINCT.为了肯定显示的内容,数据库首先会证实精练的恳求能否匹配数据行,然后利用DISTINCT功效.在全部后果调集都得以肯定之后即处理ORDER BY子句.以下例所示,只有net_amount大于100的数据行才被返回.由于DISTINCT保存碰见的第1个匹配查询条件的数据行而丢弃其他匹配行,所以ORDER BY语句所引用的net_amount看起来就好象产生了随机的后果.
SELECT DISTINCT company, last_name, first_name FROM Sales WHERE net_amount > 100 ORDER BY company, net_amount;
函数利用逻辑
返回单一值的函数称做堆积函数(aggregate function).通过利用程序拜候下列堆积函数的后果时,包含后果的"字段名"就是你所利用的实际函数.比方,在解析你的数据库后果时,后果数组的键值大概以下所示:
$keyname = "COUNT(*)";
$resultkey = "AVG(net_amount)";
COUNT
COUNT函数计算出后果调集合的数据行数.和其他函数一样它承受一个参数.以下的基本示例能奉告你数据表内的行数:SELECT COUNT(*) FROM Sales;
你也可以用它来计算任何后果调集合的行数.
SELECT COUNT(*) FROM Sales WHERE net_amount > 100;
假如你想看看某特定列有多少行包含非空值,那你无妨对该列利用COUNT函数.注意,除非数据库设置为字段为空时缺省填充NULL不然将返回表内数据行的总数.别的,列出的列在超越一个的情形下会惹起错误.
SELECT COUNT(company) FROM Sales;
COUNT还可以用来计算DISTINCT后果调集合的行数.
SELECT COUNT(DISTINCT company, last_name) FROM Sales;
COUNT语句普通用在程序中肯定FOR循环的循环次数.
AVG
AVG返回某列全部字段的平均值,该列必须是数字数据范例.该函数用列的名字作为其参数,假如列字段数据范例是非数字范例的则函数返回"0".SELECT AVG(net_amount) FROM Sales;
你可以结合子句限制该函数的利用范围.
SELECT AVG(net_amount) FROM Sales WHERE company LIKE ‘%ABCD Co%’;
就象全部堆积函数一样,ORDER BY语句将被忽视.
SUM
SUM的工作方法和AVG差不多,只不过该函数返回后果调集合全部字段值的和.
SELECT SUM(net_amount) FROM Sales WHERE net_amount > 100;
AVG、SUM、MIN和MAX函数在没有指定列的情形下城市返回错误,所以你不能利用"*"通配符.
MIN
MIN返回指定列中最小的非空值.假如指定列是数字数据范例则后果将是最小的数字.假如它是一种字符串数据范例则函数将返回按字母表次序呈现的第1个值.SELECT MIN(net_amount) FROM Sales WHERE last_name = "Smith";
SELECT MIN(last_name) FROM Sales;
MAX
MAX的工作方法和MIN函数一样,只不过该函数返回最大的非空值.该函数也可以用于字符串大概数字列
SELECT MAX(net_amount) FROM Sales;
SELECT MAX(company) FROM Sales WHERE net_amount > 100;
MAX函数有时还用在包含自动递增键字段的列上肯定下一条目的键ID.除非你正在运行一个非公开的数据库,不然在利用这一信息插入下一条目时务必谨严,以防其他用户先你履行数据操作.
GROUP BY 令函数更有效
固然以上提到的全部这些函数都能供应相当有效的信息,但是,假若有GROUP BY子句帮忙的话更能让你在列的字段子集合利用这些函数.不要对你的Sales表中每一家公司一次又一次地履行MAX函数查询——你完好可以带GROUP BY子句得到一样的后果:
SELECT company, MAX(net_amount) FROM Sales GROUP BY company;
这样做可以得到每家公司net_amount的的最大值.在挑选多列名的时刻也可以采取该语句,你还可以用多列来对函数后果分组.
下面的例子演示了以上各种方法.首先,包含GROUP BY子句可以令你指定要显示的其他列.但是,你得知道这个例子将返回在组中碰到的第1个last_name值;Sum( net_amount )将显示全部公司的后果而不但仅针对匹配姓氏的数据行.这是因为,我们只利用了Company字段来定义我们的组.
SELECT company, last_name, SUM(net_amount) FROM Sales GROUP BY company;
在上面的例子中,last_name列实际上并没有供应什么有效的信息,但这样做是为了在下一个例子中要用到的功效做预备.你可以成立多列定义的组.这样便可以在后果调集合产生针对特定行的函数后果,而后果调集则是由全部指定的GROUP BY列结合起来成立的:
SELECT company, AVG(net_amount), last_name FROM Sales GROUP BY company, last_name;
上面的例子给每家公司中每一姓氏给出了平均的net_amount.你列出GROUP BY列的次序掌握着后果的排序,但是实际的函数值后果是一样的.
下面的例子表明若何组织后果而不显示分组的列.在有些场所这样做是很有效的,比方,假如要显示个人的贩卖量但却不显示姓名就可以用上下面的例子了:
SELECT company, COUNT(sale_id) FROM Sales GROUP BY company, last_name;
限制利用GROUP BY的查询
如你在以上示例中所看到的那样,你可以结合WHERE字句操纵以上的概念限制查询的范围.WHERE子句会首先被计算,然后履行函数.在利用组的时刻就是这样的.
SELECT company, AVG(net_amount), FROM Sales WHERE net_amount > 100 GROUP BY company;
上面的例子只对那些满意WHERE限制条件的数据行实用AVG函数.注意,WHERE子句必须放在GROUP BY子句之前.你还可以用HAVING语句对分组计算之后限制返回的后果调集.
SELECT company, AVG(net_amount), FROM Sales WHERE last_name BETWEEN ‘a’ AND ‘m’ GROUP BY company HAVING AVG(net_amount) > 500;
上面的语句计算每家公司net_amount的平均值,并且只计算那些姓氏满意限制条件的贩卖人员的贩卖量,同时只显示大于500的后果
以上是“跟我学MS SQL Server(2)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论