版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1页/共26页OracleOracle数据库数据库 SQLSQL编程及高级查询编程及高级查询SQL (结构化查询语言结构化查询语言)对数据库进行操作对数据库进行操作能够熟练运用能够熟练运用Oracle常用函数常用函数能够熟练运用子查询能够熟练运用子查询能够熟练运用连接查询能够熟练运用连接查询能够熟练运用查询实现分页显示功能能够熟练运用查询实现分页显示功能本章目标点点重重点点难难点点难难点点重重点点难难第2页/共47页讲解:SQL 简介SQL 是是 Structured Query Language(结构化(结构化查询语言)的首字母缩写词查询语言)的首字母缩写词SQL 是数据库语言,是数据库语
2、言,Oracle 使用该语言存储和检使用该语言存储和检索信息索信息表是主要的数据库对象,用于存储数据表是主要的数据库对象,用于存储数据SELECT ename FROM Emp;发送 SQL 查询Oracle 服务器enameBLAKESMITH ALLEN DAVID MARTIN发送命令输出到用户端用户通过 SQL可以可以实现与Oracle 服务器的通信服务器的通信第3页/共47页讲解:SQL 简介SQL包括了所有对数据库数据库的操作,主要是由4个部分组成:数据定义语言(DDL): 全称是Data Definition Language,主要用来操纵Oracle数据库的结构。可以使用DDL
3、语句定义、修改和删除在Oracle中存在的每种类型的对象数据操纵语言(DML): 全称是data manipulation language,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作事务控制语言(TCL):全称是transaction Control Language,事务控制语句数据控制语言(DCL):全称是data Control Language,对用户访问数据的控制有基本表和视图的授权数据定义语言 CREATEALTERDROP数据操纵语言 INSERTSELECTDELETEUPDATE事务控制语言COMMITSAVEPOINTROLLBACK
4、数据控制语言 GRANTREVOKESQL (SQL (结构化查询语言结构化查询语言) )操操作作讲解:数据操纵语言DML 数据操纵语言用于检索、插入和修改、删除数据数据操纵语言是最常见的SQL命令数据操纵语言命令包括:INSERTUPDATEDELETESELECT串讲:INSERT 命令CREATE TABLE stuInfo ( stuNo CHAR(6) NOT NULL, -学号,非空学号,非空 stuName VARCHAR2(20) NOT NULL , -学员姓名,非空学员姓名,非空 stuAge NUMBER(3,0) NOT NULL, -年龄,非空年龄,非空 score
5、NUMBER(3,2) not null - 成绩成绩 非空非空 beginDate DATE -开始学习时间,日期类型开始学习时间,日期类型) ;/oracle中插入日期时间有以下几种格式:insert into stuInfo values(1002,张三,20,90,sysdate); / sysdate: oracle获取系统日期时间的关键字insert into stuInfo values(1003,张三,20,90,to_date(2014-5-4,yyyy-MM-dd);日期的格式化字符串转换为日期,通过to_date将字符串日期转换为oracle所能识别的date类型日期in
6、sert into stu values(1005,张三,20,90,to_date(2014-5-4 11:20:30,yyyy-mm-dd hh:mi:ss);/日期和时间一起格式化,如果时间是日期和时间一起格式化,如果时间是12小时制,则小时制,则hh后默认为后默认为12,12可缺失,如果时间是可缺失,如果时间是24小时制,则小时制,则hh后面需要跟后面需要跟24插入数据插入数据已知学生信息表已知学生信息表stuInfo,如何向表中存入学生信息?如何向表中存入学生信息?讲解: UPDATE 命令- UPDATE单列单列update stuInfo set age=20 where t.s
7、no=1003update stuInfo set sdate=to_date(2014-10-21,yyyy-mm-dd) where t.sno=1003- UPDATE多列多列update stuInfo t set age=20, t.sdate=to_date(2014-10-21,yyyy-mm-dd) where t.sno=1003修改数据修改数据如何修改年龄和开始学习时间?如何修改年龄和开始学习时间?update : 对表中的数据做出修改对表中的数据做出修改 语法:语法:update 表名表名 set 列名列名1=新值新值,列名,列名2=新值新值, where 条件表达式条件
8、表达式解释:解释:where : WHERE 子句用于规定选择的标准(即条件),后面跟表达式内容讲解: DELETE 命令-删除学号为删除学号为035的学生记录的学生记录DELETE FROM stuInfo WHERE stuNo = 035;删除数据删除数据如何删除学号为如何删除学号为035的学生记录?的学生记录?delete : 删除表中的数据删除表中的数据 语法:语法: delete from 表名表名 where 条件表达式条件表达式解释:解释:where : WHERE 子句用于规定选择的标准(即条件),后面跟表达式内容注意与drop的区别第9页/共26页讲解:SELECT命令数据
9、查询数据查询 :select select 命令命令SQLSQL是一种查询功能很强的语言,只要是数据库存在的数据,总是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。能通过适当的方法将它从数据库中查找出来。SQLSQL中的查询语句中的查询语句只有一个:只有一个:SELECTSELECT,它可与其它语句配合完成所有的查询功能,它可与其它语句配合完成所有的查询功能语法:语法:SELECT SELECT 字段字段1 1,字段,字段2 2 FROM FROM 表名或视图名表名或视图名WHEREWHERE条件表达条件表达式式GROUP BYGROUP BY列名集
10、合列名集合HAVINGHAVING组条件表达式组条件表达式ORDER BYORDER BY列名列名集合集合整个语句的语义如下:从整个语句的语义如下:从FROMFROM子句中列出的表中,选择满足子句中列出的表中,选择满足WHEREWHERE子句中给出的条件表达式的元组,然后按子句中给出的条件表达式的元组,然后按GROUPBYGROUPBY子子句句( (分组子句分组子句) )中指定列的值分组,再提取满足中指定列的值分组,再提取满足HAVINGHAVING子句中组子句中组条件表达式的那些组,按条件表达式的那些组,按SELECTSELECT子句给出的列名或列表达式求子句给出的列名或列表达式求值输出。值
11、输出。ORDERORDER子句子句( (排序子句排序子句) )是对输出的目标表进行重新排序,是对输出的目标表进行重新排序,并可附加说明并可附加说明ASC(ASC(升序升序) )或或DESC(DESC(降序降序) )排列排列第10页/共26页在WHERE子句中的条件表达式中可出现下列操作符,用来实现更加灵活的查询算术比较运算符:,=,=,(或!=)。逻辑运算符: AND:两个或多个条件结合起来,且条件必须都成立 OR:两个或多个条件结合起来,有一个条件为真即可 NOT:对条件取反 特殊判别式: between:取值范围 in :集合成员测试 like:模糊查询 is null :空值判断 all
12、,some,any :数量判断 exists:存在性判断 讲解:条件表达式如何查询所有学生记录?如何查询所有学生记录?如何选择指定的学号、姓名列?如何选择指定的学号、姓名列?如何筛除重复的行?如何筛除重复的行?distinct 可以过滤查询字段中所有记录相同的元组可以过滤查询字段中所有记录相同的元组讲解:SELECT 命令SELECT * FROM stuInfo as t;SELECT stuNo,stuName FROM stuInfo; select distinct sname,t.* from stuInfo t 基本查询基本查询: 无条件查询无条件查询 第12页/共26页带条件查询
13、之:算术比较运算符与逻辑运算符:小于运算,可用于数值型,日期型:大于运算,可用于数值型,日期型=:小于等于运算,可用于数值型,日期型=:等于运算,可用于数值型,日期型(或!=):不等于运算,可用于数值型,日期型逻辑运算符: AND:两个或多个条件结合起来,且条件必须都成立 OR:两个或多个条件结合起来,有一个条件为真即可 NOT:对条件取反 讲解:讲解:算术比较运算符与逻辑运算符算术比较运算符与逻辑运算符 如何查询学号为如何查询学号为035的记录?的记录?如何查询年龄如何查询年龄20并且成绩大于并且成绩大于70分的学生?分的学生?如何查询年龄如何查询年龄20或者成绩大于或者成绩大于70分的学生
14、?分的学生?如何对条件取反查询?如何对条件取反查询?如何查询日期大于如何查询日期大于2015-02-24的数据?的数据?SELECT * FROM stuInfo WHERE stuNo = 035; 基本查询基本查询: 带条件查询带条件查询 select * from stuInfo t where t.age20 and t.score70select * from stuInfo t where not t.score60 select * from stuInfo t where t.age20 or t.score70select * from stu t where t.sdate
15、to_date(2015-02-24,yyyy-mm-dd)如何对结果集排序如何对结果集排序?按照学号升序按照学号升序/降序排列降序排列?如何利用现有的表如何利用现有的表(stuInfo)创建新表创建新表如何使用列别名?如何将多列合并?如何使用列别名?如何将多列合并?串讲:SELECT 命令CREATE TABLE stuInfoBAK as SELECT * FROM stuInfo;SELECT * FROM stuInfo ORDER BY stuAge DESC,stuNo ASC; select t.sno|t.sname|t.age as 学籍 from STU t order b
16、y age desc其中两个字符串拼接用其中两个字符串拼接用|符号符号第15页/共26页带条件查询之: 特殊判别式 between between:取值范围,用于判断某个值是否在另外两个值之间,两个值之间用and连接,查询结果包含两值举例: 查询年龄介于18-20岁学生 select * from stu t where t.age between 18 and 20说明: t.age between 18 and 20 是查询条件 in in :集合成员测试,用于判断某个值是否是一个集合的成员举例: 查询 学号是否在指定集合中学生 select * from stu t where t.sn
17、o in (1001,1002,1003,1004) ;说明: t.sno in (1001,1002,1003,1004) 是查询条件 讲解:条件表达式第16页/共26页带条件查询之: 特殊判别式 like like:模糊查询,通常使用通配符%,表示为任何长度,任何字符组成的字符串举例:查询所有名字以张姓开头的学生? select * from stu t where t.sname like 张%说明: like 张%表示以张开头,其后为任何长度,任何字符组成的字符串 查询名字中间含有三的学生? select * from stu t where t.sname like %三%说明: l
18、ike %三%表示前面为任何长度,任何字符组成的字符串,中间内容含有三,其后为任何长度,任何字符组成的字符串 查询所有名字以三字结尾的学生? select * from stu t where t.sname like %三说明: like %三表示以任何长度,任何字符组成的字符串开始,结尾是三的字符串 讲解:条件表达式第17页/共26页带条件查询之: 特殊判别式 is null is null :在逻辑判断中,对于列值为空的判断,不能使用=,oracle对与空值的判断提供了专门的判别式-is null举例:查询信息资料不全的学生? select * from stu t where t.sn
19、ame is null or age is null or score is null all,some,any :数量判断,all 表示记录集合中的所有记录,some表示记录集合中的一些记录,any 表示记录集合中的任意记录其中,all 判别式等价于逻辑运算符中 的 and 运算,some和any是等价的,他们又等价于逻辑运算符中的or运算。这三个判别式主要用于子查询中,后面的知识点会涉及。 讲解:条件表达式第18页/共26页带条件查询之: 特殊判别式 exists:存在性判断,in 判断用于判断表的列值是否存在于集合中,而 exists则可用于判断查询结果集合是否为空,常配合子查询去使用,
20、后面的知识点会涉及。 讲解: SQL 函数Oracle Oracle 提供了大量的内置函数,以处理各种形式的提供了大量的内置函数,以处理各种形式的运算。运算。以下是以下是oracleoracle中内置函数中内置函数的分类:的分类:SQL 函数函数单行函数单行函数聚合函数聚合函数第19页/共47页讲解:单行函数分类单行函数对于从表中查询的每一行单行函数对于从表中查询的每一行只操作并返回只操作并返回一个值一个值可以出现在可以出现在 SELECT SELECT 子句中和子句中和 WHERE WHERE 子句中子句中 单行函数可以大致划分为单行函数可以大致划分为:日期函数数学函数字符串函数转换函数其他
21、函数第20页/共47页讲解:日期函数单行函数单行函数-日期函数:oracle提供常用的日期函数,可以灵活的对日期进行运算1、to_date() :函数,将字符串转换为日期型,被转换的字符串必须符合特定的日期格式语法: to_date(2014-02-12,yyyy-mm-dd)举例:insert into stuInfo values(1003,张三,20,90,to_date(2014-5-4,yyyy-MM-dd);2、add_months() 函数,为日期加上特定月份举例:其中sysdate:获取系统日期insert into stu values(1008,张三,20,90,add_m
22、onths(sysdate,2);第22页/共26页单行函数单行函数-日期函数:oracle提供丰富的日期函数,可以灵活的对日期进行运算3、current_date() 函数,返回当前会话时区的当前日期,该日期和时间是根据时区转换过的,这与sysdate获取当前服务器日期不同,但默认情况下是一样的,除非是修改了当前服务器的时区,重启服务器后将显示原来默认的时区 alter session set time_zone=est; /修改时区 select sessiontimezone,to_char(current_date,yyyy-mm-dd hh:mi:ss) from dual解释:se
23、ssiontimezone :时区名称 dual是一张系统虚拟表,绝大部分的操作都可基于该表实现,起到一种辅助作用,实际开发用不到,可用其查看当前用户,查看系统日期时间等4、current_timestamp () 函数,返回当前会话时区的当前时间戳,该日期和时间是根据时区转换过的,用法和current_date() 是一样的讲解:数学函数单行函数单行函数-数学函数:oracle提供常用的数学函数,可以灵活的对数学进行运算1、abs ()函数:取绝对值举例: select abs(t.score) from stuinfo t2、round()函数:四舍五入举例:select round(t.
24、score) from stuinfo t3、ceil( )函数:向上取整举例: select ceil(t.score) from stuinfo t4、floor()函数:向下取整举例: select floor(t.score) from stuinfo t5、mod()函数:取模操作举例: select mod(t.score,2) from stuinfo t讲解:数学函数单行函数单行函数-数学函数:oracle提供常用的数学函数,可以灵活的对数学进行运算6、sign()函数:返回数字的正负性,返回1,代表该数大于0,返回-1,代表该数小于0,返回0,代表该数等于0;举例: sele
25、ct sign(t.score) from stuinfo t7、to_number( ) 将字符串转换为数值类型,注意,该字符串必须符合数值类型格式,否则将报错举例:select to_number(t.sname) from stuinfo t讲解:字符串函数单行函数单行函数-字符串函数:oracle提供常用的字符串函数,可以灵活的对字符串进行运算1、lower()函数,返回小写字符串举例: select lower(t.sname) from stuInfo t2、upper()函数,返回大写字符串举例: select upper(t.sname) from stuInfo t3、sub
26、str( 列名,1,长度) 函数,截取字符串,注意该函数有三个参数,第一个列名,第二个:oracle中字符位置从1 开始,(Java中从0开始),第三个参数是你要截取的长度。举例: select substr(t.sname,1,1) from stuInfo t讲解:字符串函数单行函数单行函数-字符串函数:oracle提供常用的字符串函数,可以灵活的对字符串进行运算4、instr( ) 函数:获得字符串出现的位置,即获取子字符串在父字符串中出现的位置,不存在返回0举例: select instr(t.sname,三) from stu t5、ltrim()函数: 删除字符串首部空格,l:代表
27、 left举例: select ltrim(t.sname) from stu t6、rtrim()函数:删除字符串尾部空格,r:代表 right7、trim()函数:删除字符串首尾空格举例: select trim(t.sname) from stu t8、to_char()函数:主要将数值型,日期型转化为字符类型举例:对于数值型,该函数有两个参数,第一个:列名,第二个:转换格式select to_char(t.score,999.0) from stu t第27页/共26页单行函数单行函数-字符串函数:oracle提供常用的字符串函数,可以灵活的对字符串进行运算select to_char
28、(t.score,999.0) from stu t解释说明: to_char(t.score,999.0) 将列值score转为字符串“999.0”的格式,其中9 代表 0-9 之内的任意数值,999代表长度为3的字符串,当实际位数不足时,将不会进行填充,后面的.0代表保留的小数位举例:对于日期型,也有两个参数,第一个是列值,第二个是日期格式 select to_char(t.sdate,yyyy-mm-dd) from stu t解释说明:将日期格式的日期按照指定格式转换为字符串格式的日期。讲解:字符串函数讲解:转换函数单行函数-转换函数,就是前面学习的TO_CHARTO_DATETO_N
29、UMBER这三个函数,将值从一种数据类型转换为另一种数据类型第28页/共47页演示示例:演示示例: 函数函数- -转换函数转换函数讲解:聚合函数聚合函数聚合函数基于一组行来返回结果基于一组行来返回结果为每一组行返回一个值为每一组行返回一个值AVGMINMAXSUMCOUNTSELECT SUM(sal) FROM emp ; SELECT AVG(sal) FROM emp WHERE job=CLERK;SELECT MAX(sal) FROM emp;SELECT COUNT(*) FROM emp;SELECT COUNT(comm) FROM emp; SELECT COUNT(DIS
30、TINCT job) FROM emp;聚合聚合函数函数第29页/共47页讲解: GROUP BY和HAVING子句group bygroup by子句子句用于将信息划分为更小的组每一组行返回针对该组的单个结果通常配合聚合函数使用注意事项: 在select后指定的字段要么包含在group by语句的后面作为分组的依据,要么就要被包含在聚合函数中举例举例1: 查询员工表中每个部门的工资总额?查询员工表中每个部门的工资总额?分析:首先确定分组条件为分析:首先确定分组条件为 部门编号,其次部门编号,其次 计算工资总额计算工资总额 利用利用聚合函数中的聚合函数中的 sum()()所以语句如下:所以语句
31、如下: select t.deptno, sum(sal) as maxsal FROM emp t group by deptno; 讲解: GROUP BY和HAVING子句举例举例2: 查询员工表中每个部门的工资最高的工资?查询员工表中每个部门的工资最高的工资?分析:首先确定分组条件为分析:首先确定分组条件为 部门编号,其次部门编号,其次 计算工资最高利用聚合函数中的计算工资最高利用聚合函数中的 max()()所以语句如下:所以语句如下: select t.deptno, max(sal) as maxsal FROM emp t group by deptno;举例举例3:查询员工表中
32、入职日期大于:查询员工表中入职日期大于1981-2-20每个部门的工资总额每个部门的工资总额分析:首先对表中的数据按条件检索,在检索的基础上进行分组分析:首先对表中的数据按条件检索,在检索的基础上进行分组 select t.deptno ,sum(sal)as maxsal FROM emp t where t.hiredateto_date(1981-2-20,yyyy-mm-dd) GROUP BY deptno 提问?查询员工表中每个部门的工资最高的工资的员工信息?提问?查询员工表中每个部门的工资最高的工资的员工信息?使用下面的代码能否实现?使用下面的代码能否实现?select t.em
33、pno,t.ename MAX(sal)as maxsal FROM emp t GROUP BY deptno原因:原因:select 后的查询字段要么出现在后的查询字段要么出现在 group by中,要么出现在聚合函数中,所以无中,要么出现在聚合函数中,所以无法实现,需要使用子查询,后面将涉及子查询法实现,需要使用子查询,后面将涉及子查询第32页/共26页举例:查询员工表中每个部门的工资总额举例:查询员工表中每个部门的工资总额9000 的工资总额的工资总额select t.deptno ,sum(sal)as maxsal FROM emp t GROUP BY deptno having
34、 sum(sal)9000having having 子句子句 由于where 子句是对查询结果进行分组前将不符合where条件的行去掉,那么如何在分组后进行条件筛选呢? 使用 having 实现 通过 having筛选满足条件组,即在分组之后过滤条件,条件中经常包含聚合函数讲解:子查询为什么使用子查询?是表达查询最自然的方式使编写SELECT语句变得更加简单有些查询如果不使用子查询就无法用SQL表达出来 子查询主要划分为两类:嵌套子查询和相关子查询子查询主要划分为两类:嵌套子查询和相关子查询 1 1、嵌套子查询的执行不依赖于外部的查询,它出现的位置一般为条件、嵌套子查询的执行不依赖于外部的查
35、询,它出现的位置一般为条件语句,如语句,如 where where 条件。条件。嵌套子查询执行过程:(1)执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。(2)执行外部查询,并显示整个结果。讲解:嵌套子查询实例一EMPEMP表中,查询与表中,查询与“SCOTTSCOTT”在同一个部门的雇员在同一个部门的雇员信息信息SELECT * FROM empWHERE deptno IN (SELECT deptno FROM emp WHERE ename=SCOTT);如果将如果将ININ换成换成NOTNOT IN IN又如何?又如何?第34页/共47页讲解:嵌套子查询实例二
36、stuInfostuInfo表中,查询比李四年龄大的所有学生表中,查询比李四年龄大的所有学生select * from stuInfo where age(select age from stuInfo where name=李四)讲解:子查询2、相关子查询的执行依赖于外部查询。多数情况下是子查询的where子句中引用了外部查询的表(即子查询和父查询有无建立联系)。相关子查询执行过程:(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。(2)执行内层查询,得到子查询操作的值。(3)外查询根据子查询返回的结果或结果集得到满足条件的行。(4)然后外层查询取出下一个元组重复做步骤1-3,直
37、到外层的元组全部处理完毕。 讲解:相关子查询实例三EMPEMP表中,找出每个雇员超过他所在部门平均工资表中,找出每个雇员超过他所在部门平均工资的雇员编号、雇员名称、薪水、部门编号的雇员编号、雇员名称、薪水、部门编号返回第一步SELECT empno,ename,sal,deptnoFROM emp e1WHERE sal (SELECT AVG(sal) FROM emp e2 WHERE e1.deptno=e2.deptno );实例 第37页/共47页讲解:子查询实例四查询其他部门中比查询其他部门中比3030号部门某一雇员薪水少的雇号部门某一雇员薪水少的雇员信息员信息SELECT emp
38、no,ename,sal,deptnoFROM emp e1WHERE salANY (SELECT sal FROM emp WHERE deptno=30 ) AND deptno30;实例 返回多值时可用返回多值时可用ANYANY或或ALLALL修饰符修饰符其中,其中,=ANY=ANY等价于等价于ININ,ANYANY等价于等价于MAX,ALLMAX,ALL等等价于价于NOT INNOT IN,ALLALL等价于等价于MIN3000);实例 (1)首先取外层查询中表的第一个记录,根据它与内层查询相关的属)首先取外层查询中表的第一个记录,根据它与内层查询相关的属性值(性值(deptno)处
39、理内层查询,若)处理内层查询,若where子句返回值为真,则取外子句返回值为真,则取外层查询中该记录放入结果表层查询中该记录放入结果表(2)再取外层查询的下一个记录,重复这一过程,直到外层查询全部)再取外层查询的下一个记录,重复这一过程,直到外层查询全部检查完为止检查完为止由于带由于带EXISTS的相关子查询只关心内层查询是否有返回值,并不需的相关子查询只关心内层查询是否有返回值,并不需要查具体值,有时是高效的方法要查具体值,有时是高效的方法第40页/共47页小结:子查询的分类子查询的分类不相关子查询不相关子查询子查询的查询条件不依赖于父查询属于较简单的一类查询,通常说的嵌套查询属于此类相关子
40、查询相关子查询子查询的查询条件依赖于父查询第41页/共47页演示示例:查询演示示例:查询- -子查询子查询第42页/共26页连接:在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常。因此,连接(Join)就是一种把多个表连接成一个表的重要手段连接用于指定多数据源(表,视图)之间如何组合,以形成最终的数据源。Oracle中主要包含以下几种连接,如图所示多表联查现有学生表,课程表,如何在一个视图窗口中展示这两现有学生表,课程表,如何在一个视图窗口中展示这两张表的所有信息?张表的所有信息?常用的多表联
41、接查询连接分类连接分类内连接内连接外连接外连接连接连接左连接左连接右连接右连接等值连接等值连接不等值连接不等值连接自然连接自然连接第44页/共26页笛卡尔积:在数学中,两个集合X和Y的笛卡儿积(Cartesian product),又称直积,表示为X Y。举例:使用集合A中元素的每个元素和集合B中的每个元素组成的有序对,我们把这样的有序对组成的集合称为A和B的笛卡尔积。假设集合A=a, b,集合B=0, 1, 2,则两个集合的笛卡尔积为(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)。笛卡尔积在sql 中的应用就是把两个(多个)表的结果集相乘。执行过
42、程: R表中的每一条数据与S表中的每一条数据匹配并呈现,数量级就是两表的乘积,属性为列相加。笛卡尔积第45页/共26页笛卡尔积:如何实现 R * S (表示R和S 连接 ,也就是两个关系的笛卡尔积) 关系R为 关系S为 a b 1 2 c d 3 4R*S a b 1 2 a b 3 4 c d 1 2 c d 3 4笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,在实际应用中,笛卡尔积本身大多没有什么实际用处,只有在两个表连接时加上限制条件,才会有实际意义笛卡尔积第46页/共26页内连接:内连接: 内连接也叫连接,是最早的一种连接。还可
43、以被称为普通连接,用法需要在from 子句中使用连接条件,而且,用户也可以自行指定所要连接的各数据源的列。 内连接可以看做先对两个表进行了交叉连接后,再通过加上限制条件(SQL中通过关键字on)剔除不符合条件的行的子集,得到的结果就是内连接了,根据该条件内连接可以划分为等值连接等值连接和不等值不等值连接。连接。等值连接:等值连接:是条件连接的运算符为是条件连接的运算符为“=”=”号时的连接,它是从关系号时的连接,它是从关系R R与与S S的笛卡尔积中选取的笛卡尔积中选取A A,B B属性值相等的那些元组。表示属性值相等的那些元组。表示 R.A = S.BR.A = S.B不等值连接:不等值连接
44、:是条件连接的运算符为是条件连接的运算符为“”号时的连接,它是从关号时的连接,它是从关系系R R与与S S的笛卡尔积中选取的笛卡尔积中选取A A,B B属性值不相等的那些元组。表示属性值不相等的那些元组。表示 R.A R.A S.BS.B 内联接第47页/共26页内连接:内连接: 内连接使用关键字内连接使用关键字 inner join inner join 或者使用或者使用wherewhere关键字用于指定连关键字用于指定连接接的列。的列。语法: /使用inner join的等值连接与不等值连接select * from 表1 inner join 表2 on 表1.列名=表2.列名 wher
45、e 条件select * from 表1 inner join 表2 on 表1.列名表2.列名 where 条件 /使用 where关键字指定连接列select * from 表1 , 表2 where 表1.列名=表2.列名 and 条件n;/注意 :列名是多表通用列。内联接第48页/共26页内连接:内连接: 举例:查询所有学生所有课程的成绩(使用等值内连接的两种写法)select select * * from stu s inner join kc k on s.sno=k.sno; from stu s inner join kc k on s.sno=k.sno;select se
46、lect * * from stu,kc where stu.sno=kc.sno; from stu,kc where stu.sno=kc.sno; 比较举例:查询所有学生所有课程的成绩(使用不等值内连接的两种写法)select select * * from stu s inner join kc k on s.snok.sno; from stu s inner join kc k on s.snok.sno;select select * * from stu,kc where stu.snokc.sno; from stu,kc where stu.snokc.sno;内联接第49页/共26页内连接:内连接: 举例:查询张三的所有课程的成绩select * from stu inner join kc on kc.stuid=stu.stuid where name=张三内联接第50页/共26页自然连接:自然连接: 自然连接将两个数据源中具有相同名称的列具有相同名称的列进行连接,用户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《保险中介》课件
- 《修改棘皮》课件
- 突发性聋的健康宣教
- 输尿管癌的临床护理
- 继发性痛风的健康宣教
- 单纯性外阴阴道念珠菌病的健康宣教
- 孕期肛门疼痛的健康宣教
- 《迎驾贡酒团购培训》课件
- 风湿病性贫血的健康宣教
- 幼年型皮肌炎的临床护理
- 肛肠科常见疾病中医诊疗规范诊疗指南2023版
- 水环境综合治理服务方案(技术标)
- 2023《机械制造基础》机考真题库附答案
- 银屑病教学查房课件
- 基于Java技术的酒店管理系统设计
- 全国职业院校技能大赛中职组法律实务比赛试题附答案
- 滑坡监测方案
- 人工智能引论智慧树知到课后章节答案2023年下浙江大学
- 歌曲演唱 万疆
- 消防工程竣工验收自评报告【精】
- 影像科与临床科室定期沟通制度
评论
0/150
提交评论