设为首页 加入收藏

TOP

SQL语句简单语法(二)
2014-11-23 23:56:13 来源: 作者: 【 】 浏览:33
Tags:SQL 语句 简单 语法

数据库表名:SellRecord;字段名:ListNumber
分析:
这是查询语句,需要使用SELECT语句,需要用到ORDER BY进行排序,并重新计算出排序的数字来。
前半部分的数字,可以从先找到“-”符号的位置,然后取其左半部分,最后再使用Convert函数将其转换为数字。
Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1))
后半部分的数字,可以先找到“-”符号的位置,然后把从第一个位置到该位置的全部字符替换为空格,最后再使用Convert函数将其转换为数字。
Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))
完整的T-SQL语句是:
SELECT ListNumber
FROM SellRecord
ORDER BY Convert(int,Left(ListNumber,CharIndex('-',ListNumber)-1)),Convert(int,Stuff(ListNumber,1,Charindex('-',ListNumber),''))
使用LIKE进行模糊查询
LIKE运算符用于匹配字符串或字符串的一部分(称为子串),由于该运算符只用于字符串,所以仅与Char或Varchar数据类型联合使用。
在数据更新、删除或者查询的时候,依然可以使用LIKE关键字来进行匹配查找,例如:
SELECT * FROM Students WHERE SName LIKE '张%'
使用BETWEEN在某个范围内进行查询
使用关键字BETWEEN可以查找那些介于两个已知值之间的一组未知值。要实现这种查找必须知道开始查找的初值和终值,这个最大值和最小值用单词AND分开,例如:
SELECT * FROM SCore WHERE Score BETWEEN 60 AND 80
此外,BETWEEN查询日期范围的时候使用得比较多,例如:查询不在1992年8月1号到1993年8月1号之间订购的 读书列表。
SELECT * FROM Sales WHERE ord_date NOT BETWEEN '1992-8-1' AND '1993-8-1'
提示:使用NOT来对限制条件“取反”操作
使用IN在列举值内进行查询
查询的值是指定的某些值之一,可以使用带列举值的IN关键字来进行查询。
例如:列举值放在圆括号里,用逗号分开。
SELECT SName AS 学员姓名 FROM Students WHERE SAddress IN ('北京','广州','上海') ORDER BY SAddress SQL Server中的聚合函数
在查询中还会经常碰到的要求是取某些列的最大值、最小值、平均值等信息,有时候还需要计算出究竟查询到多少行数据项。这个时候就可以使用聚合函数了,聚合函数能够基于列进行计算,并返回单个值。
SQL Server提供了以下几个聚合函数:
1.SUM
SUM返回表达式中所有数值的总和,它只能用于数字类型的列。
例如:在Pubs数据库中,要得到商务付款的总数,执行以下查询语句。
SELECT SUM(ytd_sales) FROM titles WHERE type = 'business'
注意:这种查询只返回一个数值,因此,不能够直接与可能返回多行的列一起使用来进行查询。
2.AVG
AVG函数返回表达式中所有数值的平均值,也只能用于数字类型的列。
例如:要查询及格线以上的学员的平均成绩。
SELECT AVG(SCore) AS 平均成绩 FROM Score WHERE Score >=60
3.MAX和MIN
MAX返回表达式中的最大值,MIN返回表达式的最小值,它们都可以用于数字型、字符型以及日期/时间类型的列。
例如:查询平均成绩、最高分、最低分的语句如下。
SELECT AVG(SCore) AS 平均成绩,MAX(Score) AS 最高分,MIN(Score) AS 最低分 FROM Score WHERE Score >=60
4.COUNT
COUNT返回提供的表达式中非空值的计数,COUNT可以用于数字和字符类型的列。
例如:查询及格人数的语句如下。
SELECT COUNT(*) AS 及格人数 FROM Score WHERE Score >= 60 分组查询
使用Group By进行分组查询
成绩表中存储了所有课程的成绩,在这种情况下,可能就需要统计不同课程的平均成绩。也就是说,需要对不同的成绩首先按照课程来进行分组,分组以后再进行聚合计算,得到累计信息。
采用分组查询实现的SQL语句如下:
SELECT CourseID, AVG(Score) AS 课程平均成绩 FROM Score GROUP BY CourseID
使用HAVING子句进行分组筛选
如果查询内部测试的成绩,只显示“补考过的学员”的成绩怎么处理呢?这个时候,牵涉到分组统计后的条件限制。限制条件为COUNT(Score)>1,也就是相同的学员编号列和内部测试成绩列,至少出现过两次。这时候使用WHERE子句是不能满足查询要求的,必须使用HAVING子句。例如:
SELECT StudentID AS 学员编号,CourseID AS 内部测试,AVG(Score) AS 内部测试平均成绩 FROM Score GROUP BY StudentID,CourseID
HAVING COUNT(Score)>1 多表联接查询
多表联接查询实际上是通过各个表之间共同列的关联性来查询数据,它是关系数据库查询最主要的特征,联接可分为内联接、外联接及交叉联接等类型。
内联接查询可以通过两种方式实现
1.在WHERE子句中指定联接条件
SELECT Students.SName,Score.CourseID,Score.Score FROM Students,Score WHERE Students.SCode = Score.StudentID
上面这种形式的查询,相当于FROM后面紧跟了两个表名,然后在字段列表中用“表名.列名”来区分列,再在WHERE条件子句中加判断,要求学员编号信息相等。
2.在FROM子句中使用JOIN...ON
上面的查询也可以通过以下的JOIN...ON子句来实现。
SELECT S.SName,C.CourseID,C.Score FROM Students AS S INNER JOIN Score AS C ON (S.SCode = C.StudentID)
外联接查询
与内部联接相对的方式称为外部联接,外部联接又分为左外部联接和右外部联接。
1.左外联接查询
例如:要统计所有学员的考试情况,要求显示所有参加考试学员的每次考试分数,没有参加考试的学员也要显示出来。这时候,是以学员信息表为主表、学员成绩表为从表的左外联接查询。
SELECT S.SName,C.CourseID,C.Score FROM Students AS S LEFT OUTER JOIN Score AS C ON S.SCode = C.StudentID
2.右外联接查询
右外联接查询与左外联接查询类似,中不过要包含右表中所有匹配的行。
SELECT Titles.Title_id,Titles.Title,Publishers.Pub_name FROM titles RIGHT OUTER JOIN Publishers ON T
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇T-SQL 语句插入中文数据时数据库.. 下一篇c#链接mongDB集群实战开发2

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: