当前位置:文档之家› SQL查询语句用法及实例

SQL查询语句用法及实例


Top
• 指定只返回前面一定数量的数据。当查询到的数 据量非常庞大,但没有必要对所有数据进行浏览 时,使用Top关键字可以大大减少查询花费的时 间。 Select [Top integer|Top integer Percent] column_name[,…n] From tablename Select Top 5 sno, sname, sex From S Select Top 5 percent sno, sname, sex From S
Create Table C( cno varchar(10) Primary Key, cname varchar(100) not null, teacher varchar(10) ) Create Table SC( sno varchar(10), cno varchar(10), grade smallint, Primary Key(sno, cno) )
HAVING
• 用于组或者聚合函数的搜索条件。它常用 于GROUP BY子句后,用于搜索条件必须 在结果分组之后测试的情况。如果没有 GROUP BY子句,则HAVING仅在选择列 表用于聚合函数。 语法结构为: HAVING <search_condition> 在 HAVING 子句中不能使用 text、image 和 ntext 数据类型。
BETWEEN AND
• 规定一个范围,在搜索条件中测试,如果 测试表达式的值在范围中返回TRUE;若前 置NOT,则返回否定的结果。
• 查询成绩在60-100分之间的学生学号。
• 查询成绩在60-100分之间的学生学号。 Select sno From SC Where Grade Between 60 and 100
Group By
• 查询组数据的属性,Group By子句为数据 分组,然后按每组数据返回查询结果。 Select Sex, Count(*) From S Group By Sex 使用Group By子句后,Select子句的列名 列表只能出现分组属性和集函数。 比如:Select sno,cno From SC Group By cno 是错误的。
Select sno as 学号, sname as 姓名, sex as 性别 From S Order By sex Asc, sno Desc
• 列出表S中学生的学号和出生年份情况。
• 列出表S中学生的学号和出生年份情况。 Select sno, year(birthday) as '出生年份' From S Order By '出生年份' Asc year()返回日期所对应的年份。
• 查询有三门以上课程是90分以上的学生的 学号及课程数。
• 查询有三门以上课程是90分以上的学生的 学号及课程数。 Select sno, Count(*) as '课程数' From SC Where Grade >= 90 Group By sno Having Count(*)>=3
IN
聚合函数查询
• 常用的聚合函数有:Sum、Avg、Count、 Max、Min Select Count(*) From S Select Count(distinct sdeptartment) From S
• 查询选修了课程的学生人数
• 查询选修了课程的学生人数
• Select Count(Distinct sno) From SC
• 列出表S中“汉语言文学”系年龄小于27岁 的学生的学号和出生年份情况。 Select sno, year(birthday) From S Where sdeptartment='汉语言文学' and (year(getdate())-year(birthday))<27
函数getdate()返回当前机器日期
Like
• Like关键字指示在搜索条件中相匹配的模式,Like前也可 以前置Not,返回不匹配的所有行。语法形式为: match_expression [Not] Like pattern 如果模式表达式match_expression匹配模式pattห้องสมุดไป่ตู้rn,则返 回True,否则返回False。模式pattern通常被定义为字符 串和通配符,通配符主要有: %:匹配0个或多个字符的字符串 _:匹配任何单个的字符 [ ]:排列通配符,匹配任何在范围或集合中的单个字符。 如[a-z],a~z的所有单个字符。 [^]:排除通配符,匹配不在范围或集合中的单个字符。如 [^q-t],除q~t的任何字符。
• 查询90分以上的学生的学号及课程数。
• 查询90分以上的学生的学号及课程数。 Select sno, Count(*) as '课程数' From SC Where Grade >= 90 Group By sno
• 列出选修课程超过3门的学生学号及选修门 数
• 列出选修课程超过3门的学生学号及选修门 数 Select sno, count(*) From SC Group By sno Having count(*) > 3
比较运算符
• =、<、 <=、>、>=、!=、!<、!> • 列出表SC中成绩在大于等于87分的学生学 号和其选修的课程号。 Select sno,cno From SC Where Grade>=87 或 Select sno,cno From SC Where Grade!<87
• 列出表S中“汉语言文学”系年龄小于27岁 的学生的学号和出生年份情况。
一般查询
• 格式: Select column_name [,…n] From <tablename>
例如:从学生表中输出学号、姓名和性别。 使用语句:
例如:从学生表中输出学号、姓名和性别。 使用语句: Select sno, sname, sex From S
通过这个查询可以看出SQL语句操作的是 数据集合。
• 查询SC表中学号为“00011101”的同学的 成绩为最高的课程号。
• 查询SC表中学号为“00011101”的同学的 成绩为最高的课程号。 Select Top 1 sno, cno, grade From SC Where sno='00011101' Order By grade Desc
• 查询叶芬琴同学的学号及所选修的课程号。 • Select sno, cno From SC Where sno in(Select sno From S Where sname=„叶芬 琴’) • 这里in可用=代替
• 查询没有选修C02课程的学生姓名。
• 查询没有选修C02课程的学生姓名。 • Select sname From S Where sno not in(Select sno From SC Where cno=„C02‟)
Order By
• 让输出的结果以一定的顺序排序,可以给输出的 列重新指定列名,使用的Select语句为: Select column_name As new_ column_name[,…n] From <tablename> [Order By < column_name> [Asc|Desc] [,…n]]
• 查询选修了 “C01”号课程的学生学号和姓 名。
• 查询选修了 “C01”号课程的学生学号和姓 名。 Select sno, sname From S Where sno in( Select sno From SC Where cno='C01')
• 查询叶芬琴同学的学号及所选修的课程号。
• 求选修了各课程的学生人数
• 求选修了各课程的学生人数 • Select cno, count(*) From SC • Group By cno
条件查询
• 一般的条件查询。 Select column_name [,…n] From tablename [Where <search_condition>] Select * From S Where Sex='女'
• 用于搜索条件判定所给的测试表达式是否 与子查询或者值列表中的任何值匹配,如 果在子查询或者值列表中发现了与测试表 达式匹配的结果,则返回TRUE值,NOT IN返回IN的否定结果。
• 查询“数学与应用数学”与“计算机科学 与技术”系的学生名单。
• 查询“数学与应用数学”与“计算机科学 与技术”系的学生名单。 Select sno, sname From S Where sdeptartment in('数学与应用数学',' 计算机科学与技术')
• 查询所有选修了“C01”号课程的学生姓名。 Select sname From S Where sno in ( Select sno From SC Where cno='C01')
• 检索没有选修课程“数据库”的学生姓名 和年龄。
• 检索没有选修课程“数据库”的学生姓名和年龄。 Select sname,year(getdate()) - year(birthday) From S where not Exists( Select * From SC Where S.sno = SC.sno and o=(Select cno From C where cname='数据 库'))
EXISTS
• 用来测试跟随的子查询中现有的行。如果 某些行满足子查询,则返回TRUE。
• 查询所有选修了“C01”号课程的学生姓名。 Select sname From S Where Exists ( Select * From SC Where sno=s.sno and cno='C01')
相关主题