资源预览内容
第1页 / 共99页
第2页 / 共99页
第3页 / 共99页
第4页 / 共99页
第5页 / 共99页
第6页 / 共99页
第7页 / 共99页
第8页 / 共99页
第9页 / 共99页
第10页 / 共99页
亲,该文档总共99页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Visual FoxPro程序设计,第四章 结构化查询语言SQL,本章主要内容,1.SQL的中英文名称是什么?2.SQL的语言功能是什么?,-结构化查询语言 -Structured Query Language,数据查询 : select 数据定义 : create 、drop、 alter 数据操纵 : insert、 update、 delete 数据控制 : grant、 revoke,表4-1 SQL语言的9个命令动词,本节主要内容 1、基本查询 2、排序查询 3、带特殊运算符的条件查询 4、计算与分组查询 5、嵌套查询 6、利用空值查询 7、查询中的特殊选项,selectfromwhere,查询内容 (字段名),来自哪 (表名),查询条件 (表达式),1、单表无条件查询:,格式: SELECT FROM 例1:将“学生”表中的学号、姓名信息检索出来select 学号,姓名 from 学生 例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:从成绩表中检索出选修了课程编号为“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)多个条件之间用and/or相连 (3)一行书写不下,除最后一行,各行结尾加分号(;),注 意,3、多表连接查询: 格式: SELECT FROM 表1,表2, ;WHERE 查询条件 and 连接条件例如学生表与成绩表连接条件为:学生.学号=成绩.学号,.=.,连接条件,例1:检索出成绩大于80分的学号、姓名、性别和成绩 select 学生.学号,姓名,性别,成绩; from 学生,成绩; where 成绩80 and 学生.学号=成绩.学号,例2:检索学号为“200731001”的学生姓名以及所选修的课程名称和授课教师姓名。 select 姓名,课程名称,教师姓名; from 学生,课程,成绩,教师 ; where 学生.学号=成绩.学号 and ;成绩.课程编号=课程.课程编号 and ; 课程. 教师编号=教师.教师编号 and ;学生.学号=“200731001“,格式:注:Asc 表示升序Desc 表示降序,selectfrom where order by 字段名1 asc|desc,字段名2asc|desc,例1:查询学生表中的全部信息,并按出生日期升序排序。 select * ; from 学生 ; order by 出生日期 asc,例2:查询学生信息,按学生的专业升序排序,若专业相同,则按学生的出生日期降序进行排序。select * from 学生 ;order by 专业 asc , 出生日期 desc,1)order by对最终结果进行排序,位置在最后 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 出生日期=80,例3:查询没有选修课程编号为“02”或“05”并且成绩不及格的学生的学号、课程编号和成绩。select * from score; where 课程编号 not in (“02“,“05“) and 成绩=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:检索英语专业的学生选修课程在3门以上(含3门)的每个学生的学号和平均成绩,并按平均成绩降序排序,例5:检索除“商务英语”专业之外的,选修课程在3门以上(含3门)的每个学生的学号、姓名和平均成绩,并按将结果按平均成绩降序排序,保存到表aa.dbf中,select 学生.学号,姓名,avg(成绩) as 平均成绩; from 学生,成绩; where 学生.学号=成绩.学号 and 专业!=”商务英语”; group by student. 学号 having count(*)=3; order by 平均成绩 desc into table aa,(1)位置:where后,order by前 (2)having子句总是跟在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 (select 学号 from score ),select * from student;where 学号 in (select 学号 from score ),格式: IS NULLIS NOT NULL,例1:查询出还没有确定联系方式的学生记录。例2:查询已经确定了联系方式的学生信息。,select * from student where 联系方式 is null,select * from student where 联系方式 is not null,不能写成“=NULL”或“!=NULL”,注意,1、显示部分结果 2、将结果存放在临时文件中 3、将结果存放在永久表中,1、显示部分结果(显示前几项) 格式:top 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 teacher into cursor 教师,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号