(8)select语句的用法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


SQL语句中也有一个特殊的 BETWEEN 运算符, 用于检查某个值是否在两个值之间(包括等于两 端的值) 教师表(T) TNO TN PROF SAL DEPT (系别)

(教师编号) (姓名) (职称) (工资)

例7 查询工资在1000至1500之间的教师的教师号、 姓名及职称。
SELECT TNO,TN,PROF FROM T WHERE SAL BETWEEN 1000 AND 1500




例16 查询选修C2,C3,C4或C5课程的学生 学号,课程号和成绩,查询结果要求按照学号 升序排列,若学号相同,再按成绩降序排列。
select SNO , SCORE from SC where CNO IN ( ‘C2’ , ’C3’ , ’C4’ , ’C5’ ) order by SNO, SCORE DESC
Transact-SQL语言基础
SELECT语句的使用
SELECT语句

Select语句主要被用来对数据库进行查询并返 回符合用户查询标准的结果数据。 Select语句不以任何方式修改数据,它们只是 用来查看存放在单个表或多个相关表中的数据 的一种方法。

Select语句的主要语法

模糊查询

当不知道完全精确的值的时候,还可以使用 LIKE 或者NOT LIKE进行部分匹配查询(模 糊查询)
例11 查询所有姓张的教师的教师号和姓名 Select TNO,TN from T where TN LIKE ‘张%’




例12 查询姓名中第二个汉字是“力”的教 师号和姓名。 select TNO,TN from T where TN LIKE ‘_力%’
பைடு நூலகம்
例10 查询没有选修C1,也没有选修C2的 学生的学号、课程号和成绩 Select SNO,CNO,SCORE from SC where CNO not in( ‘C1’ , ’C2’ ) 上面的语句还可以写成:



Select SNO,CNO,SCORE from SC where CNO!= ‘C1’ and CNO!= ‘C2’
基本select语句


1 投影查询
基本的select语句组成:
要返回的列和这些列源于的表

查询时不使用where子句的无条件查询,就称为投影 查询。
如果希望查询表中所有的信息,可以使用*来表示 如果需要指定特定的列,应该用逗号分隔列表中需要显 示的列


例如现在有两张表,结构如下: 学生信息表(S)






例23 按学号sno对平均成绩进行分组,并 且只包含那些平均成绩大于87的分组 Select sno, AVG(score) as Avgscore from sc Group by sno Having AVG(score) >87


(同时使用where、group by和having子句) 例24 查询选课在三门以上并且各门课程均 及格的学生的学号及其总成绩,查询结果 按降序排列 select sno ,sum(score) as totalscore from sc Where score >=60 Group by sno Having count(*)>=3 Order by sum(score) desc
SNO SN AGE DEPT
选课表(SC)
SNO SCORE CNO

例1 查询全体学生的学号、姓名和年龄。 SELECT SNO, SN, AGE FROM S
或者可以用*表示全部列名:
SELECT * FROM S
例2 查询选修了课程的学生号 SELECT distinct SNO from SC

例22 在分组查询中使用where条件,查询 没有标明院系的学生学号及平均成绩。
select sno,AVG(score) as Avgscore From sc Where sno=(select sno from s where dept is null) Group by sno Order by sno

例如现在有两张表,结构如下: 学生信息表(S)
SNO SN AGE
选课表(SC)
SNO SCORE CNO
空值查询

如果某个字段中没有填入值(即为空值null), 空值不同于零和空格,它不占用任何存储空间。
例14 查询没有考试成绩的学生的学号和相应 的课程号 Select SNO,CNO from SC where SCORE is null

其中通配符“_”表示任意单个字符。


例13 使用NOT运算符,找到所有名字以M 开头,但姓氏不以A开头的员工。 Worker:
firstname lastname emailaddress
ID
Select ID , firstname , lastname , emailaddress from workers where (firstname like ‘M%’ ) and (lastname not like ‘A%’ )

上面SQL语句等价于以下语句: SELECT TNO,TN,PROF FROM T WHERE SAL>=1000 AND SAL<=1500

例8 查询工资不在1000至1500之间的教师 的教师号、姓名及职称。
SELECT TNO,TN,PROF FROM T
WHERE SAL NOT BETWEEN 1000 AND 1500 或者可以写成 SELECT TNO,TN,PROF FROM T
select select_list [into new_table_name] from table_list [where search_conditions] [group by group_by_list] [having search_ conditions] [order by order_list[DESC|ASC]]

注意:函数SUM和AVG只能对数值型字段 进行计算。

例18 通过查询求选修C1号课程的最高分、 最低分及之间相差的分数
SELECT MAX(SCORE) AS MaxScore, MIN(SCORE) AS MinScore, MAX(SCORE)- MIN(SCORE) AS Diff FROM SC WHERE CNO = 'C1'


例21 利用特殊函数COUNT(*)求计算机系学生的
总数。 SELECT COUNT(*) FROM S WHERE DEPT=‘计算机’
Group by 和where子句,having子句



可以在包含group by子句的查询中使用 where子句。 如果要在分组后继续按一定的条件进行筛选, 则需要使用having子句。 Where 和 having子句的区别: ⒈where子句作用于基本表或视图 ⒉having子句则作用于组,且having子句中 可以包含聚合函数。
分组查询

聚合函数和Group by子句 Group by子句可以用来查询结果按属性列或 者属性列组合在行方面上进行分组。
常用的聚合函数有: MIN,MAX,SUM,AVG,COUNT, COUNT(*)


例17 通过查询求学号为200801学生的总 分和平均分。
SELECT SUM(SCORE) AS TotalScore, AVG(SCORE) AS AveScore FROM SC WHERE SNO = ‘200801'

例19 通过查询求管理系学生的总数。 SELECT COUNT(SNO) FROM S WHERE DEPT=‘管理’
例20 通过查询求学校中共有多少个系。 SELECT COUNT(DISTINCT DEPT) AS DeptNum FROM S 注意:加入关键字DISTINCT后表示消去重 复行,可计算字段“DEPT“不同值的数目。 COUNT函数对空值不计算,但对零进行计 算。


查询的排序

当需要对查询的结果排序时,就应该 在 select语句中使用order by 子句, 其中DESC为降序,ASC为升序。
例15 查询选修C1的学生的学号和成绩,并 按成绩降序排列。 select SNO , SCORE from SC where CNO = ‘C1’ order by SCORE DESC

利用投影查询还可以控制列名的顺序,并 且可以通过指定别名来改变所查询的结果 的列标题的名称。
例3 查询所有的学生的姓名、学号和年龄 Select SN NAME,SNO,AGE from S 在结果窗口显示的结果为:

SNO
SN
AGE
NAME
SNO
AGE
条件查询

当需要在表中找出满足某些特定要求的行时, 就需要使用where子句。 Where子句中,条件通常用3部分来描述


S中数据如下:
现在根据dept字段进行分组
思考以下问题中那一条语句是正确的:



1.利用sc表,分别显示出每位同学所选 修的每门课程的分数 (1)select sno,score from sc group by sno (2)select sno,score from sc order by sno



2.分别显示出每位同学所选修的课程的 平均分 (1) Select sno,avg(score) from sc Group by sno
WHERE SAL < 1000 or SAL>1500
Select中可以利用IN操作来查询属性值属于 指定集合的元组,利用 NOT IN可以查寻指 定集合以外的元组。 例9 查询选修C1或C2学生的学号、课程号和 成绩。 Select SNO,CNO,SCORE from SC where CNO IN( ‘C1’ , ’C2’ ) 该语句也可以使用运算符OR来实现: Select SNO,CNO,SCORE from SC where CNO= ‘C1’ or CNO= ‘C2’


(2) Select * from sc Group by sno


3. 在S表中,分别显示出每个院系的学生的平 均年龄及相关信息 (1) Select avg(age) , dept from s Group by dept (2) Select sno , avg(age) , dept from s Group by dept
比较运算符 列名



列名、常数
常用的比较运算符



=:等于 >:大于 <:小于 >=:大于等于 <=:小于等于 <>或!=:不等于 LIKE:字符匹配

例4 查询选修课程号为‘C1’的学生的学号和成绩。 SELECT SNO,SCORE FROM SC WHERE CNO=’C1’

例5 查询成绩高于85分的学生的学号、课程号和 成绩。 SELECT SNO,CNO,SCORE FROM SC WHERE SCORE>85



如果需要编写多条件的查询语句,则需要 使用逻辑运算符and、or或者not将其连接 成复合的逻辑表达式。 其优先级由高到低为:not and or
例6 查询选修C1或C2且分数大于等于85分学生的 的学号、课程号和成绩。 SELECT SNO,CNO,SCORE FROM SC WHERE(CNO=’C1’ OR CNO=’C2’ ) AND SCORE>=85
相关文档
最新文档