Download presentation
Presentation is loading. Please wait.
1
SQL查询语句 蔡海洋
2
Select-SQL数据查询语言 SQL(Structured Query Language)是结构化查询语言。
3
SQL语言特点 类似于英语自然语言,简单易学 是一种面向集合的语言 可独立使用,也可嵌入到宿主语言中使用 具有查询、操纵、定义和控制功能
所使用的表无需打开和建立关联
4
SQL查询 基本查询 SELECT…FROM 带条件查询 WHERE 嵌套查询 多表查询 (JOIN…ON) 排序输出 ORDER BY
重定向输出 INTO | TO 分组统计查询 GROUP BY
5
SQL简单查询 格式: SELECT [ALL | DISTINCT]<选择项> FROM <表名> 说明:
DISTICT:显示无重复结果的记录 选择项:可以是字段名、常量或表达式 FROM后的查询来源可以是基本表或视图
6
基本查询举例 列出全部学生信息 Select * from student
7
基本查询举例 列出全部学生的姓名和年龄,去掉重名
Select distinct 姓名,year(date())-year(出生日期); as 年龄 from student
8
基本查询举例 求出所有学生的入学成绩平均分 Select avg(入学成绩) as 入学成绩平均分; from student
9
带条件查询 格式: SELECT … FROM … WHERE <条件> 常用运算符:
= <> != > >= < <= NOT AND OR BETWEEN…AND LIKE " " 通配符:%(任意个)_(一个) IN ( ) 在某一集合中 IS NULL 是否为空(未定义)
10
带条件查询举例 where 籍贯= "江苏" or 籍贯= "贵州" [ where 籍贯 in ("江苏" ,"贵州") ]
列出江苏籍和贵州籍的学生名单 Select 学号,姓名,籍贯 from student; where 籍贯= "江苏" or 籍贯= "贵州" [ where 籍贯 in ("江苏" ,"贵州") ]
11
带条件查询举例 列出入学成绩在560分到650分之间的学生名单 Select 学号,姓名,入学成绩 from student;
where 入学成绩>=560 and 入学成绩<=650 (where入学成绩 between 560 and 650)
12
带条件查询举例 列出所有姓赵的学生名单 Select 学号,姓名 from student;
where 姓名 like "赵%" (where 姓名= "赵")
13
带条件查询举例 列出所有成绩为空值的学生学号和课程号 Select 学号,课程号 from choose; where 成绩 is null
14
嵌套查询举例—返回单值的子查询 列出选修“数据库原理”的所有学生的学号 Select 学号 from choose where 课程号=;
(select 课程号 from course ; where 课程名= "数据库原理") Choose
15
嵌套查询举例—返回一组值的子查询 列出选修“01101”课的学生中成绩比选修“01102”的最低成绩高的学生的学号和成绩。
sele 学号,成绩 from choose where 课程号="01101" and; 成绩>any (sele 成绩 from choose where 课程号="01102") Choose Choose
16
嵌套查询举例—返回一组值的子查询 列出选修“01101”课的学生中成绩比选修“01102”的最高成绩高的学生的学号和成绩。
sele 学号,成绩 from choose where 课程号="01101" and; 成绩>all (sele 成绩 from choose where 课程号="01102") Choose Choose
17
嵌套查询举例—返回一组值的子查询 列出选修“数据库原理”或“软件工程”的所有学生的学号
Sele 学号 from choose where 课程号 in; (sele 课程号 from course where ; 课程名= “数据库原理” or 课程名= "软件工程" ) Choose
18
多表查询—等值联接 按对应字段的共同值将一个表中的记录与另一个表中的记录相联接。
例输出所有学生的成绩单,要求给出学号、姓名、课程号、课程名和成绩。 sele a.学号,a.姓名,b.课程号,c.课程名,b.成绩;from student a,choose b,course c; where a.学号=b.学号 and b.课程号=c.课程号
19
sele a.学号, a.姓名, b.课程号, c.课程名, b.成绩;
from student a inner join choose b; inner join course c; on c.课程号 = b.课程号 on a.学号 = b.学号
20
多表查询—非等值联接 例列出选修“01102”课的学生中,成绩大于学号为“200109”的学生该门课成绩的那些学生的学号及其成绩。
sele a.学号,a.成绩 from choose a,choose b; where a.成绩>b.成绩 and a.课程号=b.课程号and b.课程号= "01102" and b.学号= "200109"
21
sele a.学号,a.成绩 from choose a,choose b;
where a.成绩>b.成绩 and a.课程号=b.课程号and b.课程号= "01102" and b.学号= "200109" Choose Choose
22
排序查询 格式: ORDER BY <排序项> [ASC | DESC]
例按性别顺序列出学生的学号、姓名、性别、课程名及成绩,性别相同的再先按课程后按成绩由高到低排序。 sele a.学号,a.姓名,a.性别,c.课程名,b.成绩 ; from 学生 a,选课 b,课程 c; where a.学号=b.学号 and b.课程号=c.课程号; order by a.性别,c.课程名,b.成绩 desc
24
输出流向查询 格式: INTO ARRAY | CURSOR | TABLE | DBF TO <文件名> TO PRINTER
TO SCREEN
25
分组查询 格式: GROUP BY <组合列表> [HAVING <过滤条件>] 说明:
HAVING:设置过滤条件,与GROUP BY一起使用,指定结果中的组必须满足的条件
26
例 分别统计男女人数。 sele 性别, count(性别) from student ; group by 性别 例 分别统计男女中少数民族学生人数。 group by 性别 where 少数民族否 注:先where筛选,后分组统计。
27
sele 课程号,avg(成绩) from choose ; group by 课程号 having avg(成绩)>= 80
例列出成绩平均分大于80分的课程号 sele 课程号,avg(成绩) from choose ; group by 课程号 having avg(成绩)>= 80 注:先分组统计,后having筛选 。
28
SQL定义语句 定义基本表 CREATE TABLE <表名> (字段名1 类型 长度 ,字段名2 类型 长度 , ……)
(字段名1 类型 长度 ,字段名2 类型 长度 , ……) 修改表 增加字段:ALTER TABLE <表名> ADD 修改字段:ALTER TABLE <表名> ALTER 删除字段:ALTER TABLE <表名> DROP 删除表 DROP TABLE <表名>
29
SQL表记录操作语句 插入记录 INSERT INTO <表名> (字段序列) VALUES(记录具体值) 更新记录
UPDATE <表名> SET <字段名=值>[,……] 删除记录 DELETE FROM <表名> WHERE <条件>
30
实验作业 例6.6/ 6.7(2)/ 6.9/ 6.10/ 6.11/ 6.12 6.13/ 6.14(1)/ 6.15/ 6.17/ 6.20 6.21/ 6.23/ 6.24
Similar presentations