1、Visual FoxPro程序设计,第四章 结构化查询语言SQL,本章主要内容,1.SQL的中英文名称是什么?2.SQL的语言功能是什么?,-结构化查询语言-Structured Query Language,表4-1 SQL语言的9个命令动词,本节主要内容1、基本查询2、排序查询3、带特殊运算符的条件查询4、计算与分组查询5、嵌套查询6、利用空值查询7、查询中的特殊选项,selectfromwhere,查询内容(字段名),来自哪(表名),查询条件(表达式),1、单表无条件查询:,格式:SELECT FROM 例1:将“学生”表中的学号、姓名信息检索出来 select 学号,姓名 from 学
2、生例2:将“学生”表中的专业信息检索出来,并去掉重复元组。select 专业 from 学生,distinct,例3:查询“学生”表中的所有信息。方法一:select 学号,姓名,性别,出生日期,专业,家庭住址;from 学生方法二:select*from 学生,注意:,去掉重复元组,distinct,所有属性,*,,,Select后多字段名之间,2、单表条件查询格式:SELECT FROM WHERE 例1:查询成绩表中成绩大于80分的学号。select 学号 from score;where 成绩80注:distinct 短语的位置,distinct,例2:从成绩表中检索出选修了课程编号为
3、“02”的,并且成绩大于80分的所有信息。select*from 成绩;where 课程编号=02 and 成绩80,例3:检索出选修了课程编号为“02”或“05”的,并且成绩大于80分的所有信息。select*from 成绩;where(课程编号=02 or 课程编号=05);and 成绩80,例4:从学生表中检索出性别为“男”的学生的学号、姓名、性别、专业和年龄信息。select 学号,姓名,性别,专业,;year(date()-year(出生日期)as 年龄;from 学生;where 性别=“男”,2、单表条件查询:(1)条件中,涉及到字符型字段值,加定界符(“”)(2)多个条件之间用
4、and/or相连(3)一行书写不下,除最后一行,各行结尾加分号(;),注意,3、多表连接查询:格式:SELECT FROM 表1,表2,;WHERE 查询条件 and 连接条件例如学生表与成绩表连接条件为:学生.学号=成绩.学号,.=.,连接条件,例1:检索出成绩大于80分的学号、姓名、性别和成绩select 学生.学号,姓名,性别,成绩;from 学生,成绩;where 成绩80 and 学生.学号=成绩.学号,例2:检索学号为“200731001”的学生姓名以及所选修的课程名称和授课教师姓名。select 姓名,课程名称,教师姓名;from 学生,课程,成绩,教师;where 学生.学号=
5、成绩.学号 and;成绩.课程编号=课程.课程编号 and;课程.教师编号=教师.教师编号 and;学生.学号=“200731001,格式:注:Asc 表示升序 Desc 表示降序,selectfrom whereorder by 字段名1 asc|desc,字段名2asc|desc,例1:查询学生表中的全部信息,并按出生日期升序排序。select*;from 学生;order by 出生日期 asc,例2:查询学生信息,按学生的专业升序排序,若专业相同,则按学生的出生日期降序进行排序。select*from 学生;order by 专业 asc,出生日期 desc,1)order by对最终
6、结果进行排序,位置在最后2)asc/desc在排序的字段名后,默认为升序3)按多列排序时,各字段名之间用“,”相隔,注意,1、确定范围格式:BETWEENAND 表示在和之间包含界值NOT BETWEENAND 表示不在和之间,注意,例1:查询出生日期在1988年8月1日至1990年12月30日之间的学生的信息。select*from 学生;Where 出生日期 between 1988-08-01;and 1990-12-30select*from 学生;Where 出生日期=1988-08-01;and 出生日期=1999-12-30,2、确定集合格式:字段名 NOTIN(表达式1,表达式
7、2,)例2:查询选修了课程编号为“02”或“05”或“04”,并且成绩在80分以上的学生的学号、课程编号和成绩。select 学号,课程编号,成绩;From 成绩;where 课程编号 in(02,04,05);and 成绩=80,例3:查询没有选修课程编号为“02”或“05”并且成绩不及格的学生的学号、课程编号和成绩。select*from score;where 课程编号 not in(02,05)and 成绩60,3、部分匹配查询格式:字段名 like 字符型常量 通配符:%:0个或多个字符 _:一个字符 例4:查询所有姓“李”的同学的学号、姓名、性别、专业。select 学号,姓名,性
8、别,专业 from 学生;where 姓名 like 李%,例5:查询第二个汉字是“海”的学生的学号、姓名、性别、专业。select 学号,姓名,性别,专业 from 学生;where 姓名 like _海%,4、不等于(!=)例6:查询家庭住址在哈尔滨并且不是学商务英语专业的学生信息。select*from 学生;where 家庭住址=哈尔滨;and 专业!=“商务英语,1、简单的计算查询(用在select中,对查询结果中数值型字段值进行计算)注:as 新字段名:给结果指定字段别名,(1)count(distinct 字段名):统计数目 count():统计元组个数(2)sum(字段名):求
9、总和(3)avg(字段名):求平均值(4)max(字段名):求最大值(5)min(字段名):求最小值,例1:统计学生表中有多少个学生记录。select count(*)as 人数 from 学生例2:求学号为0104的学生的平均成绩。select avg(成绩)as 平均分 from 成绩;where 学号=200731001,例3:统计成绩表中的最高分和最低分。select max(成绩)as 最高分,min(成绩)as 最低分;from 成绩,用在select后count(*):计算关系中所含元组个数as 新字段名:给计算结果指定字段名,注意,2、分组与计算查询格式:GROUP BY HA
10、VING 例1:检索出每个学生的学号平均平均分。select 学号,avg(成绩)as 平均分;from 成绩;group by 学号,例2:检索出每个学生的学号、总分、平均分、最高分和最低分。select 学号,sum(成绩)as 总分,;avg(成绩)as 平均分,;max(成绩)as 最高分,;min(成绩)as 最低分;from 成绩;group by 学号,例3:在成绩表中查询选修课程在3门以上(含3门)的每个学生的学号和平均成绩,并按平均成绩升序排序,注意:order by后只能接字段名,不能接函数,select 学号,avg(成绩)as 平均成绩 from 成绩;group by
11、 学号 having count(*)=3;order by 平均成绩,select 学号,avg(成绩)as 平均成绩 from 成绩;group by 学号 having count(*)=3;order by 平均成绩,分组条件,select 学生.学号,avg(成绩)as 平均成绩 from 学生,成绩;where 学生.学号=成绩.学号 and;专业=“英语”;group by 学生.学号 having count(*)=3;order by 平均成绩 desc,查询条件,分组条件,连接条件,注意:先用where选择满足条件的元组,然后分组,再计算,最后去掉不满足分组条件的记录,例4
12、:检索英语专业的学生选修课程在3门以上(含3门)的每个学生的学号和平均成绩,并按平均成绩降序排序,例5:检索除“商务英语”专业之外的,选修课程在3门以上(含3门)的每个学生的学号、姓名和平均成绩,并按将结果按平均成绩降序排序,保存到表aa.dbf中,select 学生.学号,姓名,avg(成绩)as 平均成绩;from 学生,成绩;where 学生.学号=成绩.学号 and 专业!=”商务英语”;group by student.学号 having count(*)=3;order by 平均成绩 descinto table aa,(1)位置:where后,order by前(2)havin
13、g子句总是跟在group by子句之后,不可以单独使用(3)先where,再group by,然后计算,最后having.,注意,(查询结果出自一个表,条件涉及多个表)格式:SELECTFROM 表1 WHERE 字段名 in;(SELECT 字段名 FROM 表2 WHERE),本节所用的四个表,例1:检索没有授课的教师信息。例2:检索选修了课程的学生信息。例3:找出没有选课的学生的信息。,select*from teacher;where 教师编号 not in(select 教师编号 from course),select*from student;where 学号 not in(sel
14、ect 学号 from score),select*from student;where 学号 in(select 学号 from score),格式:IS NULL IS NOT NULL,例1:查询出还没有确定联系方式的学生记录。例2:查询已经确定了联系方式的学生信息。,select*from student where 联系方式 is null,select*from student where 联系方式 is not null,不能写成“=NULL”或“!=NULL”,注意,1、显示部分结果2、将结果存放在临时文件中 3、将结果存放在永久表中,1、显示部分结果(显示前几项)格式:top
15、 n percent位置:紧跟select后top短语要与order by 同时使用,例1:显示成绩最低的两名学生成绩信息。例2:显示成绩最高的那40%的学生成绩信息,select*top 2 from score order by 成绩 asc,select*top 40 percent from score order by 成绩 desc,2、将结果存放在临时文件中格式:into cursor 临时文件名注意:(1)文件关闭后,自动删除(2)位置:from短语后或最后,3、将结果存放在临时文件中例3:将teacher表中的信息保存在临时文件“教师”中。,select*from teach
16、er into cursor 教师,4、将结果存放在永久表中 格式:into table 表名注意:(1)查看结果可以使用下面的命令操作use 表名browse(2)通过该子句可实现表的复制。,例4:将所有课程信息按学分降序保存永久表“课程”中。,select*from course order by 学分 desc;into table 课程,Select.From 表名where 查询条件 and 联接条件group by.having.order by.into cursor|into table,字段名,as,函数,说明查询内容来自哪个些表,说明条件,按某列分组,分组条件,对查询结果排序,保存查询结果,本节主要内容,格式1:insert into 表名;values(表达式1,表达式2,表达式n)格式2:insert into 表名(字段名1,字段名2,);values(表达式1,表达式2,),例1:向score表中插入一条记录(1996468006,05,98)例2:向score表中插入一条记录(05,98)insert into score(课程编号,成绩);values(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1