1、SQL语言(1)数据查询 SELECT(2)数据定义 CREATE、DROP、ALTER(3)数据修改 INSERT、UPDATE、DELETE(4)数据控制 GRANT、REVOKESELECTSELECT语句格式以及说明语句格式以及说明SELECT ALL|DISTINCT TOP|PERCENT, AS FROM ,WHERE GROUP BY HAVING ORDER BY ASC|DESCINTO ARRAY |INTO CURSOR |INTO DBF|TABLE |TO FILE ADDITIVE|TO PRINTERPROMPT一一. .简单查询简单查询( (对单表的查询对单表
2、的查询 )Select From From 后接表名,指定查询的信息来自于哪些表。例:From 学生 From 学生,选课,课程Select 后接*、字段名、表达式,用来指定查询结果包含那些列。例:Select * Select 学号,姓名 Select 性别,学号+姓名 女男女男性别性别21222223年龄年龄Bob004Bob003Alice002Tom001姓名姓名学号学号学生学生.dbf.dbf例1:Select * From 学生女男女男性别性别21222223年龄年龄Bob004Bob003Alice002Tom001姓名姓名学号学号Select 学号,姓名; From 学生Sel
3、ect 性别,学号+姓名; From 学生Bob004Bob003Alice002Tom001姓名姓名学号学号女男女男性别性别004Bob003Bob002Alice001TomExp_2Exp_2学号学号姓名姓名性别性别年龄年龄001Tom男23002Alice女22003Bob男22004Bob女21学生.dbf例:查询所有学生的学号和年龄信息Select 学号,年龄 From 学生学号学号年龄年龄00123002220032200421例:查询年龄大于22的学生的学号和年龄信息Select 学号,年龄 From 学生 Where 年龄22学号学号年龄年龄00123例:查询年龄大于22的男
4、生的学号和年龄信息Select 学号 From 学生 Where 性别=“男”and 年龄20 Where 学生.学号=选课.学号各种条件运算符含义举例=、=、=、!=、比较大小民族=汉AND、OR多重条件专业=外语 AND 入学成绩520BETWEEN AND 确定范围确定范围入学成绩入学成绩 BETWEEN 500 AND 520LIKE字符匹配姓名 LIKE 王%NOT否定运算符NOT 民族=汉like语句: “ab” like “a%” “ab” like “a_”Like函数: like(“a*”, “ab”) like(“a?”, “ab”)比较查询 查询“学生”表中汉族学生的姓名
5、、民族和入学成绩信息。SELECT 姓名,民族,入学成绩 FROM 学生 WHERE 民族=汉“ 查询“学生”表中少数民族学生的姓名、民族和入学成绩信息。SELECT 姓名,民族,入学成绩 FROM 学生 WHERE 民族!=汉 多重条件查询 在“学生”表中查询外语专业中入学成绩小于520分的学生的学号、姓名、和入学成绩信息。SELECT 学号,姓名,入学成绩 FROM 学生;WHERE 专业=外语 AND 入学成绩520范围查询 在“学生”表中查询外语专业中入学成绩小于520分的学生的学号、姓名、和入学成绩信息。SELECT 学号,姓名,入学成绩 FROM 学生;WHERE 专业=外语 AN
6、D 入学成绩520 查询入学成绩在500分到520分之间(包含500分和520分)的学生的学号、姓名和入学成绩信息。SELECT 学号,姓名,入学成绩 FROM 学生;WHERE 入学成绩 BETWEEN 500 AND 520字符串匹配查询 查询“学生”表中所有姓王的学生信息。SELECT * FROM 学生 WHERE 姓名 LIKE 王%“ 查询“课程”表中所有课程名中含有“大学”两个字的课程名。SELECT 课程名 FROM 课程 WHERE 课程名 LIKE %大学%逻辑型字段条件查询 查询“教师”表中所有党员教师的信息。SELECT * FROM 教师 WHERE 党员否=.T.S
7、ELECT * FROM 教师 WHERE 党员否虚拟字段条件查询 查询学生表中年龄小于19岁学生的学号、姓名和年龄信息。SELECT 学号,姓名,YEAR(DATE()-YEAR(出生日期) AS 年龄 FROM 学生;WHERE YEAR(DATE()-YEAR(出生日期)2020, Year(Date()-Year(生日生日) As 年龄年龄 ;用用orderorder关键字对查询结果排序关键字对查询结果排序SELECT ;FROM ;ORDER BY ASC|DESC , ASC|DESC , (注:字段名可以用字段序号代替)学号姓名性别年龄004Bob女21002Alice女2200
8、3Bob男22001Tom男23SELECT * FROM 学生;ORDER BY 年龄SELECT * FROM 学生;ORDER BY 年龄 DESC学号姓名性别年龄001Tom男23002Alice女22003Bob男22004Bob女2144用用order对多个关键字排序对多个关键字排序学号姓名性别年龄004Bob女21002Alice女22003Bob男22001Tom男23SELECT * FROM 学生;ORDER BY 年龄,学号 DESC例:先按年龄升序排列,年龄相同的再按学号降序排列SELECT TOP|PERCENT ;FROM ;ORDER BY;保留排序结果的前保留排
9、序结果的前n(百分之百分之n)条记录条记录SELECT TOP 10 *;FROM student;ORDER BY 英语 DESC;SELECT TOP 20 PERCENT *;FROM student;ORDER BY 英语;查询英语成绩前10名的学生记录。查询按英语成绩升序排序前百分之20名的学生记录。对查询结果排序使用ORDER BY语句按照一个或多个字段对查询结果进行升序(ASC)或降序(DESC)排列,默认为升序排列。 对于空值排序,升序时空值记录将最后显示,降序时将最先显示。ORDER BY语句只能对最终的查询结果进行排序,在子查询中不能使用。 ORDER BY语句后不能接任何
10、运算表达式,不能按某个表达式的运算结果进行排序。 使用TOP PERCENT语句可以只显示排序之后的前几条记录或前百分之多少条记录。 4.1 select 单表 前n项SELECT ;FROM ; INTO ARRAY 或INTO CURSOR 或 INTO DBF|TABLE 或TO FILE 设置查询去向设置查询去向 49.2 select 单表 存到文本文件二.联接查询(查询操作涉及到两个或两个以上的表时用连接查询)学生.dbf选课.dbf课程.dbf 教师.dbf 例:查询所有女学生体育课程的学号和成绩信息。学号学号 姓名姓名 性别性别 入学成绩入学成绩001 李小华 女 525002
11、 王艳芳 女 510003 吴海洋 男 508 学号学号_A 姓名姓名 性别性别 入学成绩入学成绩 学号学号_B 课程号课程号 成绩成绩 学号学号 课程号课程号 成绩成绩 001 C001 95 001 C004 85 002 C001 90 003 C001 92 003 C003 86学生学生 001 李小华 女 525 001 C001 95 001 李小华 女 525 001 C004 85 001 李小华 女 525 002 C001 90 001 李小华 女 525 003 C001 92 001 李小华 女 525 003 C003 86 002 王艳芳 女 510 001 C0
12、01 95 002 王艳芳 女 510 001 C004 85 002 王艳芳 女 510 002 C001 90 002 王艳芳 女 510 003 C001 92 002 王艳芳 女 510 003 C003 86 003 吴海洋 男 508 001 C001 95 003 吴海洋 男 508 001 C004 85 003 吴海洋 男 508 002 C001 90 003 吴海洋 男 508 003 C001 92 003 吴海洋 男 508 003 C003 86 selectselect * * fromfrom 学生学生, ,选课选课或或 selectselect 学生学生. .
13、学号学号, ,姓名姓名, ,性别性别, ,入学成绩入学成绩, ,选课选课. .学号学号, ,课程号课程号, ,成绩成绩 fromfrom 学生学生, ,选课选课选课选课1.无条件无条件联接查询联接查询 无意义!例:查询学生的学号、姓名、课程号和成绩的信息选课选课 学生学生 select * from 学生,选课select 学生.学号,姓名,课程号,成绩 from 学生,选课 where 学生.学号=选课.学号2.条件条件联接查询联接查询 where 学生.学号=选课.学号增加条件:增加条件:select 学生.学号,姓名,课程号,成绩 from 学生,选课 ;where 学生.学号=选课.学
14、号select 学生.学号,姓名,课程号,成绩 from 学生,选课 ;where 学生.学号=选课.学号and 成绩90例:查询学生的学号、姓名、课程号、课程名和成绩的信息。选课选课 学生学生 课程 select from where 学生.学号,姓名,选课.课程号,课程名,成绩;学生,选课,课程;学生.学号=选课.学号 and 选课.课程号=课程.课程号三个表条件三个表条件联接查询联接查询 29.1 select 双表 连接 31.1 select 双表 连接 简单查询(单表) 联接查询(多表)无条件联接查询条件联接查询超联接查询内联接查询左联接查询右联接查询全联接查询【超联接查询格式】S
15、ELECTFROM I INNER | LEFT | RIGHT | FULL JOIN ON WHERE超联接-内联接(满足条件就相连)select * from 学生 JOIN 选课 ON 学生.学号=选课.学号select * from 学生 INNER JOIN 选课 ON 学生.学号=选课.学号或select * from 学生 where 学生.学号=选课.学号 (就是内联结)超联接-左联接(内连记录+左表不满足条件的记录)select * from 学生 left JOIN 选课 ON 学生.学号=选课.学号超联接-右联接(内连记录+右表不满足条件的记录)select * fro
16、m 学生 right JOIN 选课 ON 学生.学号=选课.学号超联接-全联接(内连记录+左右表不满足条件的记录)select * from 学生 full JOIN 选课 ON 学生.学号=选课.学号返回select * from 学生,选课,课程统计查询(分组统计查询) COUNT( 字段名 或 *) 统计记录个数个数。 SUM(字段名) 计算某一列值的总和总和(字段必须是数值型)。 AVG( 字段名) 计算某一列的平均值平均值( (字段必须是数值型)。 MAX(字段名) 计算某一列值的最大值最大值。 MIN(字段名) 计算某一列值的最小值最小值。统计查询(最大值max( )、最小值mi
17、n()选课【例】查询分数最高的成绩Select max(成绩) As 最高分 From 选课【例】查询001学生的最低成绩Select min(成绩) From 选课 Where 学号=“001”统计查询(和求sum( )、求平均avg( )选课【例】查询学号为”001”的平均成绩Select avg(成绩) From 选课 where 学号=001【例】所有成绩的总分Select sum(成绩) From 选课统计查询(行数COUNT(* )选课【例】查询选课门数Select count(*) as From 选课选课门数查询“某某数”信息时,使用:Select count(*) as 某某
18、数 from 例如:选课门数、人数、金牌数、奖牌数、课程数、订单数分组统计查询(用Group by 分组,用筛选having分组结果)【例】统计各职称的人数Select 职称, count(*) as 人数 From 教师 Group by 职称 教师【例】统计各职称的人数,但只保留人数大于1的记录Select 职称, count(*) as 人数 From 教师;Group by 职称;Having 人数1【例】统计总人数Select count(*) as 人数 From 教师 或 Having count(*)1 但不允许 where人数1 或 where count(*)1 筛选条件中
19、有和(sum)、平均(avg)、最大(max)、最小(min)、行数(count)统计信息时,必须把筛选条件放到having中。having Group by A 则默认按A的升序排列。分组的默认顺序教师【例】统计各性别内每种职称的人员数Select 性别+职称,count(*) 人数 ;From 教师;Group by 性别+教师分组统计查询(用多个字段分组) 只要提干中涉及和(sum)、平均(avg)、最大(max)、最小(min)、行数(count)统计信息时,基本都需要分组。啥时候分组呢分组练习 48 max min avg 80 avg 分组筛选 43 count 金牌数 26 count 选课门数 51 sum(数量*单价)