1、第四章SQL语言第四章 数据库查询语言SQL4.1 SQL语言概述 数据查询命令(SELECT) 数据定义命令(CREATE等) 数据操纵命令(INSERT等) 数据管理命令(GRANT等)可以独立完成数据库的全部操作,包括建立数据库、建表、查询、更新、维护数据、数据库的重新构造、数据库安全性等。注意:第三章讲的命令只适用于VF。SQL语言适合在任何语言(VB、VC等)中使用,应用更广泛,效率更高,是考试的重点(笔试和上机)。4.2查询功能难点:写出查询条件(逻辑表达式)。 查询命令的基本格式:SELECT ALL |DISTINCT 字段名 FROM 表名 WHERE 条件4.2.1 简单查
2、询例1:从学生表中检索所有学生的姓名。SELECT 姓名 FROM 学生例2:从学生表中检索所有学生姓名(不能重复)SELECT DISTINCT 姓名 FROM 学生 例3:从学生表中检索所有学生的姓名、年龄、出生日期。SELECT 姓名,年龄,出生日期FROM 学生例4:从学生表中检索所有学生(包括所有字段)SELECT FROM 学生例5:从学生表中检索所有年龄小于21的学生。SELECT FROM 学生 WHERE 年龄=21 AND 年龄=2 例3:求各个年龄值(年龄13)的学生人数。SELECT 年龄,COUNT()AS 人数 FROM 学生 GROUP BY 年龄 HAVING
3、年龄13 SELECT 年龄,COUNT()AS 人数 FROM 学生 WHERE 年龄13 GROUP BY 年龄例4:求各个年龄值(年龄13)的女生人数。SELECT 年龄,COUNT()AS 人数 FROM 学生 WHERE 性别=“女”GROUP BY 年龄 HAVING 年龄13 注意:HAVING短语必须与GROUP BY短语同时使用。 使用HAVING短语的同时能使用WHERE短语。先执行WHERE后的条件从表中过滤不符合条件的记录,再执行GROUP对剩下的记录分组,接着执行HAVING后的条件过滤不符合条件的分组,最后对每个分组执行SELECT后的函数计算。4.2.8 利用空值
4、查询(NULL)例1:学生表中所在学院为空值NULL的同学。SELECT 学号,姓名 FROM 学生 WHERE 所在学院 IS NULL例2:学生表中所在学院不为空值NULL的同学。SELECT 学号,姓名 FROM 学生 WHERE 所在学院 IS NOT NULL4.2.9 别名与自连接查询例1:查询学生赵明的所有课程的成绩。SELECT 学生.学号,姓名,课程编号,成绩FROM 学生,成绩 WHERE 姓名=“赵明”.AND. 学生.学号=成绩.学号SELECT X.学号,姓名,课程编号,成绩FROM 学生 X,成绩 C WHERE 姓名=“赵明”.AND. X.学号=C.学号例2:查
5、询学生赵明的班长。SELECT A.姓名,“的班长是”,B.姓名FROM 学生 A,学生 B WHERE A姓名=“赵明” .AND. A.班长=B.学号SELECT 姓名 FROM 学生 WHERE 学号 IN (SELECT 班长 FROM 学生 WHERE 姓名=赵明)4.2.10 内外层互相关联嵌套查询内层查询需要外层查询的值,外层查询需要内层查询的结果。例1:查询每个学生的最高成绩。SELECT FROM 成绩 a WHERE 成绩=(select max(成绩) from 成绩 b where a.学号=b.学号)(2) 查询已经选修了课程的学生信息。SELECT FROM 学生
6、a WHERE 学号 in ( select 学号 from 成绩 b where a.学号=b.学号)4.2.11 使用量词和谓词的查询例1:EXISTS用来检查子查询是否有结果 (1) 查询已经选修了课程的学生信息。SELECT FROM 学生 a WHERE EXISTS (select 学号 from 成绩 b where a.学号=b.学号)(2) 查询没有选修了课程的学生信息。SELECT FROM 学生 a WHERE NOT EXISTS ( select 学号 from 成绩 b where a.学号=b.学号)(3) 查询选修课程01的学生信息。SELECT FROM 学生
7、 a WHERE EXISTS ( select from 成绩 b where a.学号=b.学号 AND 课程编号=”01”)例2:ANY或SOME用来检查子查询是否有一个结果使条件为真。(1)查询其他院中比001学院某一学生年龄小的学生年龄、姓名。SELECT 姓名,年龄FROM 学生 WHERE 所在学院”001” AND 年龄 ANY ( select 年龄 from 学生 where 所在学院=”001”) (2)查询其他院中比001学院所有学生年龄都小的学生年龄、姓名。SELECT 姓名,年龄FROM 学生 WHERE 所在学院”001” AND 年龄 ALL ( select
8、年龄 from 学生 where 所在学院=”001”)等价于:SELECT 姓名,年龄FROM 学生 WHERE 所在学院”001” AND 年龄 ( select MIN(年龄) from 学生 where 所在学院=”001”)4.2.12 超连接查询(1) 普通连接(JOIN 或 INNER JOIN)(只有满足条件的记录出现在结果中)查询每个学生的选修课程情况SELECT a.学号,姓名,课程编号 FROM 学生 a JOIN 成绩 b ON a.学号=b.学号等价于:SELECT a.学号,姓名,课程编号 FROM 学生 a, 成绩 b WHERE a.学号=b.学号(2)左连接(
9、除满足条件的记录出现在结果中,第一个表中不满足条件的记录也出现在结果中)SELECT a.学号,姓名,课程编号 FROM 学生 a LEFT JOIN 成绩 b ON a.学号=b.学号(3)右连接(除满足条件的记录出现在结果中,第二个表中不满足条件的记录也出现在结果中)查询所有学生所在学院名称SELECT 学号,姓名,学院名称 FROM 学生 RIGHT JOIN 学院 ON 所在学院=学院编号(4)全连接(除满足条件的记录出现在结果中,两个表中不满足条件的记录也出现在结果中)查询所有学生所在学院名称SELECT 学号,姓名,学院名称 FROM 学生 FULL JOIN 学院 ON 所在学院
10、=学院编号4.2.13 集合的并运算例1:查询性别为女或年龄不大于19的学生。SELECT FROM 学生 WHERE 性别=“女” UNIONSELECT FROM 学生 WHERE 年龄0 ERROR “数据错误” DEFAULT 0(2)修改已有字段格式1:修改已有字段的类型、宽度,字段有效性规则。ALTER TABLE 表名 ALTER COLUMN 字段名 字段类型 宽度,小数位数 NULL | NOT NULL CHECK PRIMARY KEY | UNIQUE 例如:ALTER TABLE 职工 ALTER 工资 N(6,1) CHECK 工资500格式2:修改、删除已有字段的
11、有效性规则ALTER TABLE 表名 ALTER COLUMN 字段名 宽度,小数位数 NULL | NOT NULL SET CHECK DROP DEFAULT DROPCHECK例如:ALTER TABLE 职工 ALTER 工资 SET CHECK 工资100例如:ALTER TABLE 职工 ALTER 工资 DROP CHECK格式3:修改字段名称、删除已有字段ALTER TABLE 表名 RENAME COLUMN 字段名 TO 新的名称 DROP COLUMN 字段名例如:将字段“工资”改名为“月工资”ALTER TABLE 职工 RENAME COLUMN 工资 TO 月工
12、资例如:删除字段“出生日期”ALTER TABLE 职工 DROP COLUMN 出生日期4.4.4 视图的定义1、 概念:逻辑表、虚拟表,可以像使用表一样使用视图。用户一般只需看到视图,而不是全部的表。2、 建立视图格式:CREATE VIEW 视图名 AS SELECT语句例如:单表视图CREATE VIEW 男生 AS SELECT * FROM 学生 WHERE 性别=”男”例如:多表视图CREATE VIEW 赵明成绩 AS SELECT 姓名,课程编号,成绩 FROM 学生 a,成绩 b WHERE 姓名=”赵明” AND a.学号=b.学号例如:视图中的虚字段CREATE VIE
13、W 总成绩 AS SELECT 姓名, SUM(成绩) 总成绩FROM 学生 a, 成绩 b WHERE a.学号=b.学号 GROUP BY b.学号3. 删除视图DROP VIEW 视图名例如:DROP VIEW 男生注意:使用视图的好处: 简化了查询操作 视图中并不真正存放数据,保证了数据安全 每个用户只能看到自己需要的数据 视图对插入、更新、删除操作有限制注意:索引名与索引表达式的区别:按索引表达式建立索引文件。按索引名区分一个索引文件中的不同索引。索引表达式只在建立索引文件时起作用。以后要使用某个索引必须通过命令SET ORDER to索引名 设置当前索引。 通过SQL命令建立候选索引:ALTER TABLE 职工 ADD UNIQUE 职工编号 TAG 职工编号 通过非SQL命令建立普通索引:INDEX ON 职工编号 TAG 职工编号 通过非SQL命令建立候选索引:INDEX ON 职工编号 TAG 职工编号 CANDIDATE 通过非SQL命令建立唯一索引:INDEX ON 职工编号 TAG 职工编号 UNIQUE使用连接查询:查询结果涉及多个表。使用嵌套查询或连接查询:查询结果涉及一个表。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2