SQL数据库数据查询SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来
SQL中的查询语句只有一个:SELECT,它可与其它语句配合完成所有的查询功能
SELECT语句的完整语法,可以有6个子句
完整的语法如下:SELECT 目标表的列名或列表达式集合FROM 基本表或(和)视图集合〔WHERE条件表达式〕〔GROUP BY列名集合〔HAVING组条件表达式〕〕〔ORDER BY列名〔集合〕…〕简单查询,使用TOP子句查询结果排序order by 默认ASC升序,使用关键词DESC降序
带条件的查询where,使用算术表达式,使用逻辑表达式,使用between和in关键字
模糊查询like整个语句的语义如下:从FROM子句中列出的表中,选择满足WHERE子句中给出的条件表达式的元组,然后按GROUPBY子句(分组子句)中指定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出
ORDER BY子句是对输出的目标表进行重新排序,并可附加说明ASC(升序)或DESC(降序)排列
在WHERE子句中的条件表达式F中可出现下列操作符和运算函数:算术比较运算符:<,<=,>,>=,=,<>,!=
逻辑运算符:AND,OR,NOT
集合运算符:UNION(去重合并),UNION ALL(不去重合并),INTERSECT(交),MINUS(差)
集合成员资格运算符:IN,NOT IN谓词:EXISTS(存在量词),ALL,ANY,SOME,UNIQUE
聚合函数:AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(计数)
其中运算对象还可以是另一个SELECT语句,即SELECT语句可以嵌套
上面只是列出了WHERE子句中可出现的几种主要操作,由于WHERE子句中的条件表达式可以很复杂,因此SELECT句型能表达的语义远比其数学原形要复杂得多
下面,我们以上面所建立的三个基本表为例,演示一下SELECT的应用:1.无条件查询例:找出所有学生的的选课情况SELECT st_no,su_noFROM score例:找出所有学生的情况SELECT*FROM student“*”为通配符,表示查找FROM中所指出关系的所有属性的值
2.条件查询条件查询即带有WHERE子句的查询,所要查询的对象必须满足WHERE子句给出的条件
例:找出任何一门课成绩在70以上的学生情况、课号及分数SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.scoreFROM student,scoreWHERE score.score>=70 AND score.stno=student,st_no这里使用UNIQUE是不从查询结果集中去掉重复行,如果使用DISTINCT则会去掉重复行
另外逻辑运算符的优先顺序为NOT→AND→OR
例:找出课程号为c02的,考试成绩不及格的学生SELECT st_noFROM scoreWHERE su_no=‘c02’ AND score<603.排序查询排序查询是指将查询结果按指定属性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明
例:查找不及格的课程,并将结果按课程号从大到小排列SELECT UNIQUE su_noFROM scoreWHERE score<60ORDER BY su_no DESC4.嵌套查询嵌套查询是指WHERE子句中又包含SELECT子句,它用于较复杂的跨多个基本表查询的情况
例:查找课程编号为c03且课程成绩在80分以上的学生的学号、姓名SELECT st_no,st_nameFROM studentWHERE stno IN (SELECT st_noFROM scoreWHERE su_no=‘c03’ AND score>80 )这里需要明确的是:当查询涉及多个基本表时用嵌套查询逐次求解层次分明,具有结构程序设计特点
在嵌套查询中,IN是常用到的谓词
若用户能确切知道内层查询返回的是单值,那么也可用算术比较运算符表示用户的要求
5.计算查询计算查询是指通过系统提供的特定函数(聚合函数)在语句中的直接使用而获得某些只有经过计算才能得到的结果
常用的函数有:COUNT(*) 计算元组的个数
COUNT(列名) 对某一列中的值计算个数,并且自动忽略空值
SUM(列名) 求某一列值的总和(此列值是数值型)
AVG(列名) 求某一列值的平均值(此列值是数值型)
MAX(列名) 求某一列值中的最大值
MIN(列名) 求某一列值中的最小值
例:求男学生的总人数和平均年龄SELECT COUNT(*),AVG(st_age)FROM studentWHERE st_sex=‘男’例:统计选修了课程的学生的人数SELECT COUNT(DISTINCT st_no)FROM score注意:这里一定要加入DISTINCT,因为有的学生可能选修了多门课程,但统计时只能按1人统计,所以要使用DISTINCT进行过滤
以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。