ImageVerifierCode 换一换
格式:DOC , 页数:37 ,大小:828KB ,
资源ID:7827576      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7827576.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(初级SQL开发指南.doc)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

初级SQL开发指南.doc

1、初级SQL开发指南 Select语句概要 数据库中数据的提取(查询)使用select 语法,主要有以下几点作用 l 提取的数据(搜索) l 提取的数据进行排序(排序) l 执行计算或汇总 Select文表达方法 Select 列名1,列名2 ← 查询要显示的列结果 From 表名 ← 数据库中表名 Where 查询条件 ← 条件表达式 SQL文处理Select 语句顺序步骤 我们将说明数据库在处理查询的时候,不同阶段都会产生中间结果表.这些产生出来的中间结果表都是在数据库后台运

2、行的我们无法观察到.我们最终看到的数据就是最后的中间结果表.从句from从数据库中检索出来第一个中间结果表开始,到select从句结束.分为以下几步 From 指定查询的表 1通过from关键字将要查询的表中的所有数据读 取到中间结果表。(包括表中所有数据行与列,行 数不变,列数不变) Where选择满足条件的行 2在where关键字后面加上要读取数据的条件,生 成一个新的中间结果表。 Group by分组 3 如果业务需要分组,可以通过Group by 将视图进 行分组,在次生成一个新的中间结果表。 having 分组条件 4 使用hav

3、ing关键字为分组后的逻辑视图进行条件 筛选,来生成一个中间结果表。 select 选择列 5 通过select语句在最终的中间结果表中选择列。 查询数据时,数据库后台中间结果表变化过程 我们将从数据库在执行SQL查询计划的时候,数据库内部的变化与运行的原理来理解SQL语句执行过程.(数据库中分为2种视图,1为物理视图通过create view 语句创建,2为逻辑视图,就是我们提到的中间结果表) (人员信息表) 编号 名称 部门 职务 年龄 性别 电话 122 李晶晶 人力 职员 26 女 2234555 123 张金 人力 职员

4、 29 男 3322123 124 王力 机材 经理 35 男 2245553 125 李心 机材 职员 21 女 3332233 例:给出所有职务为职员的用户名称,部门,电话. 步骤一 执行from 表名称(人员信息表),数据库会在(人员信息表)表中进行一个全表扫描,将所有表信息放入一个逻辑视图中, 逻辑视图包括表中的全部的行于列的数据. 步骤一 产生的中间结果表 122 李晶晶 人力 职员 26 女 2234555 123 张金 人力 职员 29 男 3322123 124 王力 机材 经理 3

5、5 男 2245553 125 李心 机材 职员 21 女 3332233 步骤二 通过where职务=职员 的判断条件将步骤一中产生的逻辑视图的数据进行过滤,将满足条件的行产成一个新的逻辑视图. 步骤二 产生的中间结果表 122 李晶晶 人力 职员 26 女 2234555 123 张金 人力 职员 29 男 3322123 125 李心 机材 职员 21 女 3332233 步骤三 通过select 名称,部门,电话 语句把步骤二的逻辑视图中,名称,部门,电话列的数据取出生成一个新视图.select 语句指定那些

6、列必须出现在最终逻辑视图中. 步骤三 产生的中间结果表 李晶晶 人力 2234555 张金 人力 3322123 李心 机材 3332233 步骤四 将产生的逻辑视图发送到客户端.完成本次SQL查询计划. SQL编写顺序与逻辑视图生成过程. Select 名称,部门,电话 ← 步骤三 生成最终逻辑视图 From 员工信息表 ← 步骤一 生成全表逻辑视图 Where 职务=职员 ← 步骤二 生成符合条件的逻辑视图 多表信息查询表达方法

7、 Select 表1.列名, 表2.列名 ← 选择要表示的列 From 表1, 表2 ← 要合并查询的表 Where 表1.ID1=表2.ID1 ← 多表连接条件 当多个表进行联合查询的时候,会发生一张表(A)中的数据行乘以别一张表(B)中的数据行,也就是A*B=所有查询数据.该结果产生的合并表数据被我们称为笛卡儿积.通常笛卡儿积会产生很多重复行的数据,我们要使用连接条件也就是A表和B表中指定的连接列来过滤掉重复和多余的笛卡儿积. A 表 B表 笛卡儿积 A*B中间结果表 WHERE 选择

8、符合条件的行,生成中间结果表 SELECT 选择列 生成最终结果 1 通过from关键字后的表名称,到数据库中将 表A和表B两个表中所有表数据取出到两个对应 的中间结果表中. 2 数据库会将两个中间结果表合成一个中间结果表, 而生成的这个中间结果表就是我们说的笛卡儿积.它 的数据内容就是A表的中间结果*B表的中间结果.为 A*B的数学关系 3 在笛卡儿积中间结果表中通过where关键字选择符 合列连接条件或者满足条件的行,将符合条件的行再 生成一个中间结果表. 4 在中间结果表中通过select关键字选择列,生成最终 中间结果

9、表,把它传给客户端. 多表合并查询时数据库后台中间结果表变化过程 (人员信息表) 编号 名称 部门ID 年龄 性别 电话 122 李晶晶 1 26 女 2234555 123 张金 1 29 男 3322123 124 王力 2 35 男 2245553 125 李心 3 21 女 3332233 ( 部门信息表) 部门ID 部门名称 部门简称 1 人力资源部 人力 2 运行维护部 运维 3 财务部 财务 例:查询部门简称为财务的人员信息,信息包括人员名称,部门简称, 部门名称,

10、性别,电话 步骤一 执行from 人员信息表,部门信息表.数据库对(人员信息表), ( 部门信息表)2张表进行一个全表扫描.然后将2个表的数据生成一个笛卡儿积的逻辑视图.执行这个(select * from人员信息表,部门信息表 )SQL不加连接列条件我们就可以看到一个笛卡儿积数据. 步骤一 产生的中间结果表的笛卡儿积 编号 名称 部门ID 年龄 性别 电话 部门ID 部门名称 部门简称 122 李晶晶 1 26 女 2234555 1 人力资源部 人力 122 李晶晶 1 26 女 2234555 2 运行维护部 运

11、维 122 李晶晶 1 26 女 2234555 3 财务部 财务 123 张金 1 29 男 3322123 1 人力资源部 人力 123 张金 1 29 男 3322123 2 运行维护部 运维 123 张金 1 29 男 3322123 3 财务部 财务 124 王力 2 35 男 2245553 1 人力资源部 人力 124 王力 2 35 男 2245553 2 运行维护部 运维 124 王力 2 35 男 2245553 3 财务部 财务 125 李心

12、 3 21 女 3332233 1 人力资源部 人力 125 李心 3 21 女 3332233 2 运行维护部 运维 125 李心 3 21 女 3332233 3 财务部 财务 步骤二 通过连接列条件取出步骤一逻辑视图中符合条件的行,生成一个新的逻辑视图. 连接列条件为 where人员信息表.部门ID=部门信息表. 部门ID 步骤二产生的中间结果表 编号 名称 部门ID 年龄 性别 电话 部门ID 部门名称 部门简称 122 李晶晶 1 26 女 2234555 1 人力资源部 人力

13、 123 张金 1 29 男 3322123 1 人力资源部 人力 124 王力 2 35 男 2245553 2 运行维护部 运维 125 李心 3 21 女 3332233 3 财务部 财务 步骤三 通过判断条件 and 部门信息表.部门简称=财务 取出上一个逻辑视图中符合条件的行.生成一个新的逻辑视图 步骤三 产生的中间结果表 编号 名称 部门ID 年龄 性别 电话 部门ID 部门名称 部门简称 125 李心 3 21 女 3332233 3 财务部 财务 步骤四 通过sele

14、ct 人员信息表.人员名称,部门信息表.部门简称,人员信息表.部门信息表.部门名称, 人员信息表.性别, 人员信息表.电话 选择要列,生成一个最终逻辑视图. 步骤四 最终中间结果表 名称 部门名称 部门简称 性别 电话 李心 财务部 财务 女 3332233 步骤五 将产生的逻辑视图发送到客户端.完成本次SQL查询计划. SQL编写顺序与逻辑视图生成过程. Select 人员信息表.人员名称, ← 步骤四 选择列 部门信息表.部门简称, 人员信息表.部门名称, 人员信息表.性别, 人员信息

15、表.电话 From 人员信息表,部门信息表 ← 步骤一 合并表数据 Where 人员信息表.部门ID=部门信息表. 部门ID ← 步骤二 选择部门ID相等行 And 部门信息表.部门简称=财务 ← 步骤三 选择部门名称为财务的行 总结 通过上面的介绍,我们知道了数据库在执行查询SQL计划时逻辑视图变化过程.我们在编写查询计划的时候,需要按照逻辑视图变化过程来编写,先写from 再写where最后select这个顺序.在多表的时候,需要wh

16、ere 来指定表的接合条件来过滤笛卡儿积. 多表合并查询时候的内连接与外连接 在上面我们使用多表查询的时候,对笛卡儿积的处理是使用where 加列连接条件.这种方法也被称为隐性连接.在SQL标准语句中有一种from 从句的扩展方法可以直接完成上面的功能. 这种从句的扩展方法也被成为显性内连接.关键字为 inner join on后边指定连接条件。 Inner join 表达方法 Select 表1.列名, 表2.列名 ← 要选择的列 From 表1 inner join 表2 on 表1.ID1=表2.ID1 Wh

17、ere 行选择条件 数据库中有以下2张表 (人员信息表) 编号 名称 部门ID 年龄 性别 电话 122 李晶晶 1 26 女 2234555 123 张金 1 29 男 3322123 124 王力 2 35 男 2245553 125 李心 3 21 女 3332233 ( 部门信息表) 部门ID 部门名称 部门简称 1 人力资源部 人力 2 运行维护部 运维 3 财务部 财务 运行以下SQL文 SELECT * FROM 人员信息表 i

18、nner join 部门信息表 on人员信息表.部门ID=部门信息表.部门ID -获得结果- 编号 名称 部门ID 年龄 性别 电话 部门ID 部门名称 部门简称 122 李晶晶 1 26 女 2234555 1 人力资源部 人力 123 张金 1 29 男 3322123 1 人力资源部 人力 124 王力 2 35 男 2245553 2 运行维护部 运维 125 李心 3 21 女 3332233 3 财务部 财务 From 可以通过内连接直接获得到要得到的数据结果,而不产生

19、笛卡儿积现象. SELECT * FROM 人员信息表,部门信息表 WHERE 人员信息表.部门ID=部门信息表.部门ID 我们也可以通过上面WHERE 列连接条件的方法得到一个与内连接(inner join on) 相同的数据结构.可以说WHERE 列连接条件和(inner join on)都是内连接.Where是隐性连接, (inner join on)为显性连接,大家可以根据个人习惯来选择那种方式来进行多表连接. 内连接分为2种连接方法 1 显性连接,FROM INNER JOIN ON

20、2 隐性连接,where 列的关联条件。 在低版本数据库中,显性连接和隐性连接执行效率上会有差别,在现在的数据库中基本没有区别了。完全根据个人习惯或者项目要求来选择使用哪种连接方式。 外连接 虽然我们学会使用了内连接,但是还有很多复杂情况内连接无法解决.SQL还给我们提供了一种连接方法叫外连接.在外连接的表合并过程中,我们要定义一个驱动表,以驱动表为基础与其他表进行多表合并的过程叫外连接. 外连接分为左连接和右连接, 显性连接 from (LEFT JOIN ON 列连接条件 ,RIGHT JOIN ON列连接条件) 隐性连接 where 列连接条件(+)=列连接条件,列连接条

21、件=列连接条件(+) 表示. SQL表达方式 显性连接 SELECT * FROM 表1 (left or right) join 表2 on 表1.ID1=表2.ID1 WHERE 选择行条件 隐性连接 SELECT * FROM 表1,表2 WHERE 表1.ID1=表2.ID1(+) and 选择行条件 或者 表1.ID1(+)=表2.ID1 and 选择行条件 如果你想以表1为驱动表就在 where 表1=表2(+) 为左

22、表连接 如果你想以表2为驱动表就在 where 表1(+)=表2 为右表连接 数据库有以下3张表 (人员信息表) 编号 名称 部门ID 年龄 职务ID 性别 电话 122 李晶晶 1 26 1 女 2234555 123 张金 1 29 null 男 3322123 124 王力 2 35 1 男 2245553 125 李心 3 21 2 女 3332233 126 鲁兰 null 232 null 女 3486443 ( 职务信息表) 职务ID 职务名称 1 职员 2 经理

23、 ( 部门信息表) 部门ID 部门名称 1 人力资源部 2 运行维护部 3 财务部 执行以下SQL时 SELECT * FROM 人员信息表 left join 职务信息表 on 人员信息表.职务ID=职务信息表.职务ID 或者 SELECT * FROM 人员信息表 ,职务信息表 WHERE 人员信息表.职务ID=职务信息表.职务ID(+) -获得结果- 编号 名称 部门ID 年龄 职务ID 性别 电话 职务ID 职务名称 122 李晶晶 1

24、26 1 女 2234555 1 职员 123 张金 1 29 null 女 3322123 null null 124 王力 2 35 1 男 2245553 1 职员 125 李心 3 21 2 女 3332233 2 经理 126 鲁兰 null 232 null 女 3486443 null null 我们以人员信息表为驱动表进行多表合并查询. 驱动表所有信息全部显示,和职务表没有关联条件人员信息也将被查询出来.如果我们使用内连接,和职务表没有关联的那条信息将无法被查询出来。上面的结果粉色部分数据在

25、内连接的时候不能被查询出来。只有我们以人员信息表为驱动表进行外连接才可以得到上面的数据。 例:查询出部门名称不能为空的所有女性的员工名称, 部门名称,职务名称信息. SQL执行过程如下图所示 部门信息表 职务信息表 人员信息表 部门ID为内连接条件 人员信息表与 部门信息表内连接中间结果表 职务ID为外连接条件 人员与部门的中间结果表和职务信息表外联合并中间结果表 在中间结果表中选择所有性别为女性的行,生成新的中间结果表 在中间结果表中选择列

26、 隐性连接SQL文 SELECT 人员信息表.名称, 部门信息表.部门名称, 职务表.职务名称 FROM 人员信息表 ,部门信息表, 职务表 WHERE 人员信息表.部门ID=部门信息表.部门ID 人员表与部门表进行内连接 AND 人员信息表 .职务ID=职务表.职务ID(+) 与职务表进行外连接 AND 人员信息表.性别=女 显性连接SQL文 SELECT 人员信息表.名称, 部门信息表.部门名称, 职务表.职务名称 FROM 人员信息表 inner join 部门信息

27、表 on 人员信息表.部门ID=部门信息表.部门ID left join 职务表 on 职务表.职务ID=人员信息表 .职务ID WHERE 人员信息表.性别=女 步骤一 在(人员信息表)与 (部门信息表)表中执行一个内连接,内连接会将人员表中部门ID为空的人员信息从中间结果表中过滤掉. 步骤一 产生的中间结果表 编号 名称 部门ID 年龄 职务ID 性别 电话 部门ID 部门名称 122 李晶晶 1 26 1 女 2234555 1 人力资源部 123 张金 1 2

28、9 女 3322123 运行维护部 124 王力 2 35 1 男 2245553 1 运行维护部 125 李心 3 21 2 女 3332233 2 财务部 步骤二 中间结果表于( 职务信息表) 执行一个外连接,中间结果表为驱动表. 驱动表中即使职务id为空,新生成的中间结果表也会这条信息保存下来. 步骤二 产生的中间结果表 编号 名称 部门id 年龄 职务id 性别 电话 部门id 部门名称 职务id 职务名称 122 李晶晶 1 26 1 女 2234555 1 人力资源部 1 职员

29、 123 张金 1 29 女 3322123 运行维护部 124 王力 2 35 1 男 2245553 1 运行维护部 1 职员 125 李心 3 21 2 女 3332233 2 财务部 2 经理 步骤三 选择性别为女的所有行生成中间结果表.虽然职务有空值出现,但是通过外联它还是可以不被过滤掉. 步骤三 产生的中间结果表 122 李晶晶 1 26 1 女 2234555 1 人力资源部 1 职员 123 张金 1 29 女 3322123 运行维护部

30、125 李心 3 21 2 女 3332233 2 财务部 2 经理 步骤四 选择要显示的列,生成最终中间结果表,将显示给客户端. 步骤四 产生的中间结果表 名称 部门名称 职务名称 李晶晶 人力资源部 职员 张金 运行维护部 李心 财务部 经理 Select 表达式 select表达式也是一种常量,它会对应某种数据类型.如数字,字符串,日期,时间等.这些有自己属性类型的表达式,也叫标量表达式.除了标量表达式之外,还有行表达式和表表达式.行表达式是由一组标量表达式组成的,每个行表达式都有一个或多个标量表达式.有多个或者一个行表达式组

31、成的表达式为表表达式也叫表值. 表达式的分类 l 标量表达式 l 行表达式 l 表表达式 ( 人员工资表) 人员名称 基本工资 奖金 罚款 补助 张淋淋 1200 750 50 120 马越 800 200 10 120 李洋 900 350 40 120 SELECT 人员名称(标量表达式),基本工资(标量表达式),奖金(标量表达式),补助(标量表达式) FROM 人员工资表 Select 关键字选择的列部分就是一个标量表达式.你可以将中间结果表每个列单元格看成为一个标量表达式. 每个行中的列单元就是一个标量表达式

32、 -获得结果- 人员名称 基本工资 奖金 补助 张淋淋 1200 750 120 马越 800 200 120 李洋 900 350 120 由多个标量表达式组成的一行数组,为行表达式 张淋淋 1200 750 120 这4个标量表达式组成了一个行表达式 由一个或多个行表达式构成了表表达式 张淋淋 1200 750 多个行表达式组成 120 马越 800 200 120 李洋 900 350 120 我们对行表达式和表表达式也可以叫做复合行表达式. 标量表达式操作

33、 标量表达式就是select关键字后面的列要表达的信息部分.如果2个标量表达式类型相同可以进行运算,合并或者拼接成字符串.如果标量表达式类型不一样,也可以将它们拼接成字符串.注意select后面的列不可以出现复合行(行表达式,表表达式) 例 给出所有人员名称和他们当月工资总合. SQL文 SELECT 人员名称 ,(基本工作+奖金+补助) 三个标量表达式相加计算生成一个新的标量表达式 FROM 人员工资表 步骤一 from关键字将人员工资表中的信息,取到一个中间结果表中. 步骤一 产生的中间结果表 人员名称 基本工资 奖

34、金 罚款 补助 张淋淋 1200 750 50 120 马越 800 200 10 120 李洋 900 350 40 120 步骤二 SELECT关键字表示了我们要生成一个有人员名称和基本工资列+奖金列+补助列总和为一列的最终结果表.首先数据库会把中间结果表中的每个行表达式中基本工资列上的数据,奖金列上的数据,补助列上的数据进行相加.把相加的结果放在一个新列中.生成一个新的中间结果表。 步骤二 产生的中间结果表 人员名称 基本工资 奖金 补助 产生的新列 张淋淋 1200 750 120 2070 马越 800 200

35、 120 1120 李洋 900 350 120 1370 3个列相加的和等于新列的值 步骤三 在新的中间结果表中抽取人员名称列和新产生的列为最终结果表。发送给客户端。 -获得结果- 人员名称 (基本工资+奖金+补助) 张淋淋 2070 马越 1120 李洋 1370 大家可以清楚的明白了每个行中的标量表达式之间是可以进行运算的。也可以通过SELECT关键字中间结果表中的行表达式中创建新的列。 例 给出人员名称和他们当月工资总合(减去罚款金额),将它们生成在一个新列中表示. SELECT 人员名称 ||‘’||(基本工作+奖金

36、补助)-罚款 (使用||‘’||可以 将2个标量表达式合并成一个字符串属性的表量表达式) FROM 人员工资表 步骤一 from关键字将人员工资表中的信息,取道一个中间结果表中. 步骤一 产生的中间结果表 人员名称 基本工资 奖金 罚款 补助 张淋淋 1200 750 50 120 马越 800 200 10 120 李洋 900 350 40 120 步骤二 通过SELECT关键字,中间结果表中的每行上面的(基本工作列+奖金列+补助列)-罚款列生成一个总和数。人员名称列上的数据要和新生成

37、的总和数据合并成一个新列(新的标量表达式),直接合并是不可以的,因为2个列的属性(也叫常量)是不一样的 。我们要使用(人员名称||‘’||新列)方法来合并它,因为 ||‘’||会将两边的表量表达式默认成为字符串类型。2个字符串类型的表量表达式可以合并成一个新的表量表达式。 步骤二 产生的中间结果表 人员名称 基本工资 奖金 罚款 补助 产生的新列 张淋淋 1200 750 50 120 张淋淋2020 马越 800 200 10 120 马越1110 李洋 900 350 40 120 李洋1330 运算出工资结果 人员名称与运

38、算结果合并 步骤三 在新的中间结果表中抽取新产生的列为最终结果表。发送给客户端 -获得结果- 人员名称||’’||… 张淋淋2020 马越1110 李洋1330 现在我们只展示了标量表达式的列合并和列运算过程,它的作用范围就在行表达式中. 在SQL最终结果表中只支持标量表达式 现在的SQL数据库中最终结果表(最后传到客户端中的表),列单元中只能存放标量表达式.但是在中间结果表列单元中是可以出现复合行(行表达式,表表达式)的.有很多情况我们需要在中间结果表的列中的存放复合行信息.但是这些信息被传到最终结果表会出现异常,不会被识别.所以我们就要使用到聚

39、合函数将中间结果表有复合行的列转换成标量表达式,传给最终结果表.保证最终结果表的列中不会出现复合行,发送给客户端. 例 给出所有人员名称和本人工资总合和全体人员的工资总和 SELECT 人员名称 ,基本工资, (SELECT 基本工资 FROM 人员工资表) ← 查询所有人的工资总和(表表达式) FROM 人员工资表 ( 人员工资表) 人员名称 基本工资 张淋淋 1200 马越 800 李洋 900 步骤一 取得人员工资表中间结果表. 步骤一 产生的中间结果表 人员名称 基本工资 张淋淋

40、 1200 马越 800 李洋 900 步骤二 select关键字会生成一个新中间结果表,中间结果表中每行都创建出一个新列.新列单元格中装入一个(SELECT 基本工资 FROM 人员工资表)语句生成的表表达式.中间结果表 工资 2020 1110 1330 中有几行就要执行几次SQL(SELECT 基本工资 FROM 人员工资表)语句,每次执行都要走一次SELECT生成过程. 工资 2020 1110 1330 步骤二 产生的中间结果表 人员名称 基本工资 工资 2020 1110 1330 新生成列 张淋淋 1

41、200 马越 800 列中的数据结构 李洋 900 步骤三 将中间结果表生成最终结果表,生成过程中数据库执行出现异常 在执行这条SQL查询计划时出现错误 ,因为在最终结果表列部分有一个表表达式出现,SQL不支持在传给客户端的最终结果表中有复合行信息出现在列部分.我们为了得到正确的结果,需要将这个复合行(表表达式)转换成为标量表达式,它才能在SQL的列中正确执行. SELECT 人员名称 , (基本工作+奖金+补助)-罚款, 表表达式数据 (SELECT (基本工作+奖金+补助) - 罚款 FROM 人员工作表) ← 表表达式不可

42、以出现在列部分 工资 2020 1110 1330 From 人员工作表 我们使用SUM()函数将表表达式中的数据转换成标量 表达式,我们这么做的目的就是将表表达式存在的多个 数据行数据结构,变成一个数据行和列的数据结构. SELECT 人员名称 ,(基本工作+奖金+补助)-罚款, (SELECT SUM((基本工作+奖金+补助) - 罚款) FROM 人员工作表) ← 将表表达式转换成标量表 达式 FROM 人员工资表 正确的SQL 工资 2020 1110 1330

43、 所有人工资总和 4460 SUM() 函数 步骤一 取得人员工资表中间结果表. 步骤一 产生的中间结果表 人员名称 基本工资 张淋淋 1200 马越 800 李洋 900 步骤二 select关键字会生成一个新中间结果表,中间结果表中每行都创建出一个新列.新列单元格中装入一个(SELECT 基本工资 FROM 人员工资表)语句生成的表表达式.中间结果表 中有几行就要执行几次SQL(SELECT 基本工资 FROM 人员工资表)语句,每次执行都要执行一次SELECT生成过程.通过SUM函数将表表达式转换成一个标量表达式. 步骤二

44、 产生的中间结果表 人员名称 基本工资 工资 2020 1110 1330 新生成列 张淋淋 1200 4460 马越 800 SUM函数将表表达式合并成标量表达式 4460 李洋 900 4460 步骤三 将中间结果表生成最终结果表,传给客户端. -获得结果- 人员名称 工资 所有人工资总和 张淋淋 2070 4460 马越 1120 4460 李洋 1370 4460 通过上面的介绍我们现在知道了在SQL查询计划中 SELECT 列部分只能以标量表达式的形式传送给客户端.如果有复合行情况出现,我们要

45、使用函数或者其他手段将它变成一个标量表达式.不同标量表达式都有自己的属性,相同属性的标量表达式可以进行运算或者合并. 表达式常量类型 数字常量 字符串常量 日期常量 时间常量 时戳常量 布尔常量 十六进制常量 不同数据库为处理结果表中列的标量表达式都提供了功能强大的函数,这些函数如何的使用和学习不在本次学习的范围. 表表达式与子查询 我们已提及每个表表达式的值都是有一组行构成.如果我们将表表达式放入到From中在又from生成一个表表达式.而这个重新生成的过程叫做子查询.

46、 (人员信息表) 编号 名称 部门 职务 年龄 性别 电话 122 李晶晶 人力 职员 26 女 2234555 123 张金 人力 职员 29 男 3322123 124 王力 机材 经理 35 男 2245553 125 李心 机材 职员 21 女 3332233 例 给出年龄小于30的女性人员名称. SELECT 人员表1.人员名称 FROM ( select 名称,性别 ← 生成一个年龄小于30中间结果表(表表达式) From 人员信息表

47、 Where 年龄<30 ) 人员表1 ← 上面的表表达式可以在放入一个FROM中进行处理 Where 人员表1.性别=女 步骤一 通过from关键字 将人员信息表中的所有信息放入一个中间结果表中. 步骤一 产生的中间结果表 编号 名称 部门 职务 年龄 性别 电话 122 李晶晶 人力 职员 26 女 2234555 123 张金 人力 职员 29 男 3322123 124 王力 机材 经理 35 男 2245553 12

48、5 李心 机材 职员 21 女 3332233 步骤二 使用where 判断将年龄大于30的人员信息行选择出来,生成一个新的中间结果表. 步骤二 产生的中间结果表 122 李晶晶 人力 职员 26 女 2234555 123 张金 人力 职员 29 男 3322123 125 李心 机材 职员 21 女 3332233 步骤三 通过select 关键字 选择每行要保留的列部分,生成一个中间结果表.这个select 选择了名称和性别2个列. 步骤三 产生的中间结果表 李晶晶 女 张金 男 李心 女

49、步骤四 中间结果表结构=表表达式数据结构,我们将这个表表达式再传给一个from 让它重新生成一个中间结果表.这个传递重新生成的过程就叫子查询.产生的2个中间结果表内容都是一样的,但是在数据库下步操作中无法区分要操作那个中间结果表.为了解决这个问题我们需要给其中的一个中间结果表起一个别名,通过操作这个别名数据库就知道要处理那个中间结果表中的数据了. 步骤四 子查询产成的中间结果表别名为(人员表1) 李晶晶 女 张金 男 李心 女 步骤五 使用where人员表1.性别=女 为条件别名为人员表1的中间结果表中,选择符合条件的行.生成一个中间结果表. 步骤五 产生的

50、中间结果表 李晶晶 女 李心 女 步骤六 再通过select 关键字 选择名称列在生成一个最终结果表.发送给客户端 -获得结果- 人员名称 李晶晶 李心 从上面的例子我们可以看到, 表表达式也可包含其他的表表达式, 表表达式是可以嵌套的. 表表达式是在FROM 中进行从新定义和处理的. SELECT * FROM ( SELECT * FROM ( SELECT * FROM( SELECT * FROM 人员信息表) AS A3) AS A2 )AS A1 表表达式允许这样嵌套下去. 表表达式可以成为判断条件 表表达式也可以成为whe

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服