《《结构化查询语言—SQL(1)》-精选课件(公开PPT)》由会员分享,可在线阅读,更多相关《《结构化查询语言—SQL(1)》-精选课件(公开PPT)(16页珍藏版)》请在金锄头文库上搜索。
1、1,结构化查询语言SQL,一、 SQL概述,二、 SQL查询语句的基本结构,三、 简单查询,四、 连接查询,2,一、 SQL概述,SQL是结构化查询语言(Structured Query Language)的缩写。是目前最流行的关系查询语言,也是数据库的标准语言。 用户可以通过SQL语言建立或删除数据库对象,插入、更新、删除数据库中的数据,并且可以对数据库进行各种管理。 SQL语言是一种一体化的语言。按功能可分为3类: 数据定义语言( Data Definition Language,DDL) CREATE、ALTER、DROP、RENAME等 数据操纵语言(Data Manipulation
2、,DML) SELECT、 INSERT、UPTATE、DELETE、CALL、COMMIT、ROLLBACK等 数据控制语言( Data Control Language,DCL ) GRANT、REVOKE SQL语言可以直接以命令方式交互使用,又可以嵌入程序设计语言中以程序方式使用。,返 回,3,查询功能是SQL的核心,SQL的查询命令又称为SELECT语句。其语法格式如下: SELECT DISTINCT , FROM , WHERE | ORDER BY 子句 GROUP BY 子句HAVING 子句 这条命令看起来很复杂,但其基本形式由SELECT-FROM模块构成,其余多为可选项
3、,要根据查询的需求去选用。其具体含义在下面的讲解中逐步介绍。,二、 SQL查询语句的基本结构,返 回,4,返 回,XSB(学生表)结构,CJ(成绩表)结构,假设有如下三个表,其结构如下:,5,返 回,KCB(课程表)结构,6,简单查询是基于一个表的查询,也称为单表查询。 1、 查询指定列 在很多情况下,用户只对表中的一部分属性列(字段)感兴趣,可以用SELECT子句来指明要查询的字段,并且可以根据需要改变输出列显示的先后顺序。 【例1】 从学生表(xsb)中检索所有学生的学号,姓名和高考分数值。 SELECT 学号,姓名,高考分数 FROM xsb; 【例2】查询课程表(kcb)中的所有记录。
4、 SELECT * FROM kcb; 需要说明:命令中的AS可以省略。 3、 去掉重复值 在数据库表中不可能出现两个完全相同的记录,但由于查询时经常涉及表的部分字段,这样就有可能出现重复行,用短语DISTINCT则可以避免之。 【例4】 从学生表(xsb)中检索所有学生的专业。 SELECT DISTINCT 专业 FROM XSB 可以看到,100多名同学其实只有5个专业。,返 回,8,4、 条件查询 在SELECT语句中,查询条件用WHERE子句来描述。主要有以下几种情况: (1)比较大小 用于比较的运算符包括:=,=,。 【例5】 从XSB表中检索出高考分数多于600的学号、姓名和高考
5、分数。 SELECT 学号,姓名,高考分数 FROM xsb WHERE 高考分数600; (2)确定范围 BETWEENAND和NOT BETWEENAND分别用来描述宇段值在或不在指定范围的条件。其中,AND的左端给出查询范围的下限,AND的右端给出的是查询范围的上限。 【例6】在XSB表中查询高考分数在550600之间的学生的学号、姓名、专业和高考分数。 SELECT 学号,姓名,专业, 高考分数 FROM xsb WHERE 高考分数 BETWEEN 550 AND 600;,返 回,9,(3)确定集合 这里所说的集合是相同类型的常量所组成的集合。谓词IN用来描述字段的值属于指定的集合
6、,NOT IN则描述字段值不属于指定的集合。 【例7】从XSB表查询工业工程或市场营销专业的同学的学号,姓名,性别,专业。 SELECT 学号,姓名,性别,专业 FROM XSB WHERE 专业 IN(工业工程,市场营销); (4)字符匹配 LIKE是字符匹配运算符,进行匹配运算时可以使用通配符“”和下划线“_”,其中,“”表示0个或多个任意字符,“_”表示1个任意字符。例如,第2个字符为B的字符串可以表示为“_B”。 【例8】从XSB表查询所有姓“王”的同学的全部信息。 SELECT * FROM XSB WHERE 姓名 LIKE 王%;,返 回,10,(5)涉及空值(NULL)的查询
7、在SQL中可以查询某字段取值为空(NULL)的记录。 为实现这类查询,我们修改KCB(课程表)的结构,允许其“先修课号”字段可以取“空值”(NULL) 【例9】在KCB中查询没有先修课的课程记录。 SELECT * FROM KCB WHERE 先修课号 IS NULL 注意,命令中的“IS不能用“=”代替。,返 回,11,(6)复合条件查询 使用逻辑运算符AND、NOT和OR可以进行复合条件查询。 【例10】在XSB中查询工业工程和信息管理专业,并且高考分数在550700之间的学生的学号、姓名、专业和高考分数。 SELECT 学号,姓名,专业,高考分数 FROM xsb WHERE 高考分数
8、 BETWEEN 550 AND 700 AND (专业=工业工程 OR 专业=市场营销) ; 说明:AND 后面的条件还可以为: 专业 IN (工业工程 ,信息管理) 5、 对查询结果进行排序 利用ORDER BY子句可以对查询的结果按指定字段进行排序。其中,ASC表示升序,DESC表示降序,缺省时表示升序。另外,利用该子句还可以实现多重排序。 【例11】 在XSB表中查询全体男学生情况,要求结果按出生日期降序排列。 SELECT * FROM XSB WHERE 性别=男 ORDER BY 出生日期 DESC,返 回,12,6 、 使用库函数 SQL提供了许多库函数,可以进一步增强检索功能
9、,这些函数主要有: COUNT(DISTINCT*) 统计记录个数 COUNT(DISTINCT) 统计一列中值的个数 SUM(DISTINCT) 计算一列值的总和 AVG(DISTINCT) 计算一列值的平均值 MAX(DISTINCT) 求一列值中的最大值 MIN(DISTINCT) 求一列值中的最小值 如果指定DISTINCT,则表示在计算时要取消指定行或列中的重复值。使用SUM,AVG,MAX,MIN函数时,指定列必须是数值型。另外,在标准SQL中只能在SELECT子句和HAVING短语中使用库函数。 【例12】 查询学生总人数。 SELECT COUNT(*) as 总人数 FROM
10、 XSB 【例13】 统计XSB中专业的总数。 SELECT COUNT(DISTINCT 专业) as 专业数 FROM XSB,返 回,13,7、 分组查询 GROUP BY 子句可以将查询结果按一列或多列值分组,列值相等的为一组,还可以利用HAVING短语按一定的条件对分组后的数据进行筛选。GROUP BY子句一般应跟在 WHERE子句之后,没有WHERE子句时,跟在FROM子句后。如果对分组有要求的话,则可以用HAVING短语指定筛选条件。该短语必须与GROUP BY配合使用。需要强调的是,HAVING短语与WHERE子句之间并不矛盾,WHERE子句用于表的选择运算,HAVING短语用
11、于设置分组的筛选条件,即满足该条件的分组数据才被输出。 【例14】 统计XSB中每个专业的学生人数。 SELECT 专业,COUNT(学号) AS 学生数 FROM XSB GROUP BY 专业;,返 回,14,【例15】 统计输出XSB表中各专业高考平均分并按降序排列。 SELECT 专业,AVG(高考分数) AS 平均分 FROM XSB GROUP BY 专业 ORDER BY 2 DESC; 该语句对查询结果按专业分组,每个专业的记录为一组,然后计算每一组的高考平均分,再按照平均分的降序排列显示。 由于AVG()函数不能作为字段名,因此排序是用:ORDER BY 2,2表示为第二个字
12、段,也可以写作:ORDER BY 平均分。 【例16】 统计输出人数多于3的各专业高考平均分并按降序排列。 SELECT 专业,count(*) as 人数,AVG(高考分数) AS 平均分 FROM XSB GROUP BY 专业 HAVING COUNT(*)3 ORDER BY 3 DESC; 可以看到,只有1个专业多于3人。,返 回,15,如果查询涉及两个或两个以上的表,则需要将相关的表按某个字段连接起来,这种查询称为连接查询。 1、 等值连接查询 连接查询中用来连接两个表的条件称为连接条件。等值连接的格式为: = 其中,引用不同表中的同名字段需在字段名前加表名和 “.”。 【例17】
13、从学生表(xsb)和成绩表(cjb)两个表中,检索所有成绩多于85分的学号、姓名、课程号、学期和成绩。 SELECT xsb.学号,姓名,课程号,学期,成绩 FROM xsb, cjb WHERE (成绩85) AND ( xsb.学号=cjb.学号); 或 SELECT a.学号,姓名,课程号,学期,成绩 FROM xsb a, cjb b WHERE (成绩85) AND ( a.学号=b.学号); 注意:本例中,既有查询条件(成绩85),又有连接条件(xsb.学号=cjb.学号)。,返 回,四、连接查询,16,2、 内连接查询 命令格式如下: FROMINNER JOIN ON 可以看出,内连接查询是通过FROM短语给出连接类型,用ON短语给出连接条件进行的。只有满足连接条件的记录才会出现在查询结果中。 【例18】 从XSB和CJB表中查询所有有考试成绩的同学的学号、姓名、专业、课程号、学期和成绩,按学号排序 。 SELECT XSB.学号,姓名,专业,课程号,学期,成绩 FROM XSB INNER JOIN CJB ON XSB.学号=CJB.学号 ORDER BY XSB.学号; 或 SELECT a.学号,姓名,专业,课程号,学期,成绩 FROM XSB a INNER JOIN CJB b ON a.学号=b.学号 ORDER BY a.学号;,返 回,