




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL培训 2013年3月 内容简介 SQL指令 SQL如何被用来储存 读取 以及处理数据库之中的资料 表格处理 SQL如何被用来处理数据库中的表格 进阶SQL 介绍SQL进阶概念 以及如何用SQL来执行一些较复杂的运算 SQL实例 介绍一些典型的实例 以及与大规划相关的语句 SELECTSELECT 栏位名 FROM 表格名 DISTINCT找出表格内的不同资料值的情况SELECTDISTINCT 栏位名 FROM 表格名 例如 selectdistinctregion namefromGEOGRAPHYt WHERESELECT 栏位名 FROM 表格名 WHERE 条件 SQL指令 AND ORSELECT 栏位名 FROM 表格名 WHERE 简单条件 AND OR 简单条件 IN NOTINSELECT 栏位名 FROM 表格名 WHERE 栏位名 IN 值一 值二 例 SELECT FROMStore InformationWHEREstore nameIN LosAngeles SanDiego BETWEEN AND SQL指令 SELECT 栏位名 FROM 表格名 WHERE 栏位名 BETWEEN 值一 AND 值二 例 SELECT FROMStore InformationWHEREDatesBETWEEN Jan 06 1999 AND Jan 10 1999 LIKE字符筛选 注意 区分大小写 SELECT 栏位名 FROM 表格名 WHERE 栏位名 LIKE 模式 例 SELECT FROMStore InformationWHEREstore nameLIKE An SQL指令 ORDERBY排序SELECT 栏位名 FROM 表格名 WHERE 条件 ORDERBY 栏位名 ASC DESC ASC 默认 代表结果会以由小往大的顺序列出 而DESC代表结果会以由大往小的顺序列出例 SELECTstore name Sales DatesFROMStore InformationORDERBYSalesDESCGROUPBY分组SELECT 栏位1 SUM 栏位2 FROM 表格名 GROUPBY 栏位1 SQL指令 SELECTstore name SUM Sales FROMStore InformationGROUPBYstore nameALIAS别名SELECT 表格别名 栏位1 栏位别名 FROM 表格名 表格别名 selectt store name sum sales 合计fromSTORE INFORMATIONtgroupbystore name 函数AVG 平均 COUNT 计数 MAX 最大值 MIN 最小值 SUM 总合 SQL指令 SELECT 函数名 栏位名 FROM 表格名 selectcount store name 计数fromSTORE INFORMATIONt HAVING对函数产生的值来设定条件SELECT 栏位1 SUM 栏位2 FROM 表格名 GROUPBY 栏位1 HAVING 函数条件 SELECTstore name SUM sales FROMStore InformationGROUPBYstore nameHAVINGSUM sales 1500表格链接左连接 leftjoin 又称内部连接 innerjoin 在这个情况下 要两个表格内都有同样的值 那一笔资料才会被选出 SQL指令 selectg s fromgeographyg store informationswhereg store name s store name笛卡儿连接selectg s fromgeographyg store informations外部连接 outerjion 列出一个表格中每一笔的资料 无论它的值在另一个表格中有没有出现 在要选出所有资料的那个表格之后加上一个 selectg store name sum s sales salesfromgeographyg store informationswhereg store name s store name groupbyg store name 请注意 当第二个表格没有相对的资料时 SQL会传回NULL值 SQL指令 CONCATENATE连接字符串有的时候 我们有需要将由不同栏位获得的资料串连在一起 每一种数据库都有提供方法来达到这个目的MySQL CONCAT Oracle CONCAT SQLServer CONCAT 的语法如下 CONCAT 字符串1 字符串2 字符串3 注意 Oracle的CONCAT 只允许两个参数 换言之 一次只能将两个字符串串连起来 不过 在Oracle中 我们可以用 来一次串连多个字符串 例 selectg region name g store namefromgeographyg SQL指令 SUBSTRING抓出一个栏位资料中的其中一部分MySQL SUBSTR SUBSTRING Oracle SUBSTR SQLServer SUBSTRING 最常用到的方式如下 在这里我们用SUBSTR 为例 SUBSTR str pos 由中 选出所有从第位置开始的字符 请注意 这个语法不适用于SQLServer上 SUBSTR str pos len 由中的第位置开始 选出接下去的个字符 selectsubstr store name 3 6 fromgeographywherestore name LosAngeles SQL指令 TRIM移除SQL中的TRIM函数是用来移除掉一个字符串中的字头或字尾 最常见的用途是移除字首或字尾的空白 这个函数在不同的数据库中有不同的名称 MySQL TRIM RTRIM LTRIM Oracle RTRIM LTRIM SQLServer RTRIM LTRIM 各种trim函数的语法如下 TRIM 位置 要移除的字符串 FROM 字符串 位置 的可能值为LEADING 起头 TRAILING 结尾 or 起头及结尾 这个函数将把 要移除的字符串 从字符串的起头 结尾 或是起头及结尾移除 如果我们没有列出 要移除的字符串 是什么的话 那空白就会被移除 SQL指令 LTRIM 字符串 将所有字符串起头的空白移除 RTRIM 字符串 将所有字符串结尾的空白移除 selectrtrim store name fromgeographyg 删除头和尾空白selecttrim store name fromgeographyg 删除头和尾字母 o selecttrim BOTH o fromstore name fromgeographyg 在起头处添加字段 lpad tab month 2 0 月份格式改为 MM 2位selectlpad 7 2 0 fromdual SQL指令 内容简介 SQL指令 SQL如何被用来储存 读取 以及处理数据库之中的资料 表格处理 SQL如何被用来处理数据库中的表格 进阶SQL 介绍SQL进阶概念 以及如何用SQL来执行一些较复杂的运算 SQL实例 介绍一些典型的实例 CREATETABLE建表语法是 CREATETABLE 表格名 栏位1 栏位1资料种类 NOTNULL 栏位2 栏位2资料种类 CreatetablecreatetableGEOGRAPHY region nameVARCHAR2 20 store nameVARCHAR2 20 NOTNULL 表格处理 CREATETABLE建表语法是 CREATETABLE 表格名 栏位1 栏位1资料种类 NOTNULL 栏位2 栏位2资料种类 注意 字段类型char和varchar2区别CHAR的长度是固定的 而VARCHAR2的长度是可以变化的 比如 存储字符串 abc 对于CHAR 20 表示你存储的字符将占20个字节 包括17个空字符 而同样的VARCHAR2 20 则只占用3个字节的长度 20只是最大值 当你存储的字符小于20时 按实际长度存储 表格处理 表格处理 添加注释 AddcommentstothetablecommentontableGEOGRAPHYis 商店所属地理位置 AddcommentstothecolumnscommentoncolumnGEOGRAPHY region nameis 地区名称 commentoncolumnGEOGRAPHY store nameis 商店名称 CONSTRAINT约束限制NOTNULLUNIQUECHECK主键 PrimaryKey 外来键 ForeignKey 表格处理 UNIQUE唯一性UNIQUE限制是保证一个栏位中的所有资料都是有不一样的值 举例来说 在以下的语句中 CREATETABLECustomer SIDintegerUnique Last Namevarchar 30 First Namevarchar 30 SID 栏位不能有重复值存在 而 Last Name 及 First Name 这两个栏位则是允许有重复值存在 请注意 一个被指定为主键的栏位也一定会含有UNIQUE的特性 相对来说 一个UNIQUE的栏位并不一定会是一个主键 表格处理 CHECK核对CHECK限制是保证一个栏位中的所有资料都是符合某些条件 举例来说 在以下的语句中 CREATETABLECustomer SIDintegerCHECK SID 0 Last Namevarchar 30 First Namevarchar 30 SID 拦只能包含大于0的整数 注意 CHECK限制目前尚未被执行于MySQL数据库上 表格处理 主键主键 PrimaryKey 中的每一笔资料都是表格中的唯一值 换言之 它是用来独一无二地确认一个表格中的每一行资料 主键可以是原本资料内的一个栏位 或是一个人造栏位 与原本资料没有关系的栏位 主键可以包含一或多个栏位 当主键包含多个栏位时 称为组合键 CompositeKey 注意 在用ALTERTABLE语句来添加主键之前 我们需要确认被用来当做主键的栏位是设定为 NOTNULL 也就是说 那个栏位一定不能没有资料 Oracle CREATETABLECustomer SIDintegerPRIMARYKEY Last Namevarchar 30 First Namevarchar 30 Oracle ALTERTABLECustomerADDPRIMARYKEY SID 表格处理 外来键外来键是一个 或数个 指向另外一个表格主键的栏位 外来键的目的是确定资料的参考完整性 referentialintegrity 换言之 只有被准许的资料值才会被存入数据库内 举例来说 假设我们有两个表格 一个CUSTOMER表格 里面记录了所有顾客的资料 另一个ORDERS表格 里面记录了所有顾客订购的资料 在这里的一个限制 就是所有的订购资料中的顾客 都一定是要跟在CUSTOMER表格中存在 在这里 我们就会在ORDERS表格中设定一个外来键 而这个外来键是指向CUSTOMER表格中的主键 这样一来 我们就可以确定所有在ORDERS表格中的顾客都存在CUSTOMER表格中 换句话说 ORDERS表格之中 不能有任何顾客是不存在于CUSTOMER表格中的资料 表格处理 表格处理 在以上的例子中 ORDERS表格中的customer SID栏位是一个指向CUSTOMERS表格中SID栏位的外来键 表格处理 CREATEVIEW视图视观表 Views 可以被当作是虚拟表格 它跟表格的不同是 表格中有实际储存资料 而视观表是建立在表格之上的一个架构 它本身并不实际储存资料 建立一个视观表的语法如下 CREATEVIEW VIEW NAME AS SQL语句 createviewv geographyasselectregion name trim store name v store namefromgeographyg 表格处理 CREATEVIEW视图视观表 Views 可以被当作是虚拟表格 它跟表格的不同是 表格中有实际储存资料 而视观表是建立在表格之上的一个架构 它本身并不实际储存资料 建立一个视观表的语法如下 CREATEVIEW VIEW NAME AS SQL语句 createviewv geographyasselectregion name trim store name v store namefromgeographyg 删除视图dropviewv geography 表格处理 CREATEINDEX索引如果一个表格没有索引的话 数据库系统就需要将整个表格的资料读出 这个过程叫做 tablescan 若有适当的索引存在 数据库系统就可以先由这个索引去找出需要的资料是在表格的什么地方 然后直接去那些地方抓资料 这样子速度就快多了 语法 CREATEINDEX INDEX NAME ON TABLE NAME COLUMN NAME createindexidx store info store nameonstore information store name 索引的命名并没有一个固定的方式 通常会用的方式是在名称前加一个字首 例如 IDX 来避免与数据库中的其他物件混淆 另外 在索引名之内包括表格名及栏位名也是一个好的方式 删除 修改索引 表格处理 ALTERTABLE修改表结构ALTERTABLE语句的语法形式 ALTERTABLEtable MODIFYcolumn name new data type precision scale NULL NOTNULL ADD n DROPCOLUMN drop colum name n 在以上语法形式中 column name 要修改的列名 new data type 要修改列的新数据类型 precision 是指定数据类型的精度 表格处理 scale 是指定数据类型的小数位数 add column name 要添加到表中的列名 add data type 要添加到表中的列的数据类型 drop colum name 要从表中删除的列名 n 可以有多个列 加一个栏位 ADD 栏位1 栏位1资料种类 altertablecustomeraddaddresschar 30 删去一个栏位 DROPcolumn 栏位1 altertablecustomerdropcolumnaddress 改变栏位的资料种类 MODIFY 栏位1 新资料种类 altertablecustomermodifyaddrschar 50 修改栏位名RENAME TO altertablecustomerrenamecolumnaddrtoaddrs 表格处理 DROPTABLE清除表格DROPTABLE 表格名 droptablecustomer TRUNCATETABLE清除表格中所有资料TRUNCATETABLE 表格名 truncatetablecustomer DELETEFROM删除表数据DELETEFROM 表格名 WHERE 条件 deletefromstore informationtwherestore name LosAngeles 表格处理 INSERTINTO插入INSERTINTO 表格名 栏位1 栏位2 VALUES 值1 值2 insertintostore information store name sales dates values losangeles 900 jan 10 1999 INSERTINTO 表格1 栏位1 栏位2 SELECT 栏位3 栏位4 FROM 表格2 insertintostore information store name sales dates selectstore name sales datesfromv store informationwheredateslike 1998 表格处理 UPDATE修改表格资料UPDATE 表格名 SET 栏位1 新值 WHERE 条件 updatestore informationsetsales 800wherestore name losangeles 内容简介 SQL指令 SQL如何被用来储存 读取 以及处理数据库之中的资料 表格处理 SQL如何被用来处理数据库中的表格 进阶SQL 介绍SQL进阶概念 以及如何用SQL来执行一些较复杂的运算 SQL实例 介绍一些典型的实例 UNION求合集将两个SQL语句的结果合并在一起 SQL语句1 UNION SQL语句2 selectdatesfromstore informationunionselectdatesfrominternet salesUNIONALLUNIONALL和UNION不同之处在于UNIONALL会将每一笔符合条件的资料都列出来 无论资料值有无重复 SQL进阶 INTERSECT交集和UNION指令类似 INTERSECT也是对两个SQL语句所产生的结果做处理的 不同的地方是 UNION基本上是一个OR 如果这个值存在于第一句或是第二句 它就会被选出 而INTERSECT则比较像AND 这个值要存在于第一句和第二句才会被选出 UNION是合集 而INTERSECT是交集 INTERSECT的语法如下 SQL语句1 INTERSECT SQL语句2 SQL进阶 MINUSMINUS指令是运用在两个SQL语句上 它先找出第一个SQL语句所产生的结果 然后看这些结果有没有在第二个SQL语句的结果中 如果有的话 那这一笔资料就被去除 而不会在最后的结果中出现 如果第二个SQL语句所产生的结果并没有存在于第一个SQL语句所产生的结果内 那这笔资料就被抛弃 MINUS的语法如下 SQL语句1 MINUS SQL语句2 注意 在MINUS指令下 不同的值只会被列出一次 SQL进阶 子查询我们可以在一个SQL语句中放入另一个SQL语句 当我们在WHERE子句或HAVING子句中插入另一个SQL语句时 我们就有一个子查询 subquery 的架构 子查询的作用是什么呢 它可以被用来连接表格 有的时候子查询是唯一能够连接两个表格的方式 子查询的语法如下 SELECT 栏位1 FROM 表格 WHERE 栏位2 比较运算素 SELECT 栏位1 FROM 表格 WHERE 条件 selectsum sales fromstore informationtwherestore namein selectstore namefromgeographywhereregion name East SQL进阶 在这个例子中 我们并没有直接将两个表格连接起来 然后由此直接算出每一间东区店面的营业额 我们做的是先找出哪些店是在东区的 然后再算出这些店的营业额总共是多少 在以上的例子 内部查询本身与外部查询没有关系 这一类的子查询称为 简单子查询 SimpleSubquery 如果内部查询是要利用到外部查询提到的表格中的栏位 那这个字查询就被称为 相关子查询 CorrelatedSubquery 以下是一个相关子查询的例子 selectsum i sales fromstore informationiwherei store namein selectstore namefromgeographygwhereg store name i store name SQL进阶 EXISTS在上一页中 我们用IN来连接内查询和外查询 另外有数个方式 例如 及 都可以用来连接内查询和外查询 EXISTS也是其中一种方式 这一页我们将讨论EXISTS的用法 基本上 EXISTS是用来测试内查询有没有产生任何结果 如果有的话 系统就会执行外查询中的SQL 若是没有的话 那整个SQL语句就不会产生任何结果 EXISTS的语法是 SELECT 栏位1 FROM 表格1 WHEREEXISTS SELECT FROM 表格2 WHERE 条件 SQL进阶 CASESQL用来做为if then else之类逻辑的关键字 CASE的语法如下 SELECTCASE 栏位名 WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ELSE 结果N ENDFROM 表格名 条件 可以是一个数值或是公式 ELSE子句则并不是必须的 SQL进阶 selectstore name casestore namewhen losangeles thensales 2when SanDiego thensales 1 5elsesalesend newsales datesfromstore information NewSales 是用到CASE那个栏位的栏位别名 算排名要以SQL列出排名 基本的概念是要做一个表格自我连结 selfjoin SQL进阶 也是一个笛卡尔连接 将结果依序列出 然后算出每一行之前 包含那一行本身 有多少行数selecta1 name a1 sales count a2 sales sales rankfromtotal salesa1 total salesa2wherea1 sales a2 salesor a1 sales a2 salesanda1 name a2 name groupbya1 name a1 salesorderbya1 salesdesc a1 namedesc 对比 selectrow number over orderbyt salesdesc m t fromtotal salest SQL进阶 算中位数selectsalesmedianfrom selecta1 name a1 sales count a1 sales rankfromtotal salesa1 total salesa2wherea1 sales a2 salesor a1 sales a2 salesanda1 name a2 name groupbya1 name a1 salesorderbya1 salesdesc a3whererank selectceil count 1 2 fromtotal sales SQL进阶 算累积总计要以SQL算出累积总计 基本上的概念与列出排名类似 第一是先做个表格自我连结 selfjoin 然后将结果依序列出 在做列出排名时 我们算出每一行之前 包含那一行本身 有多少行数 而在做累积总计时 我们则是算出每一行之前 包含那一行本身 的总合 selecta1 name a1 sales sum a2 sales running totalfromtotal salesa1 total salesa2wherea1 sales a2 sales or a1 sales a2 salesanda1 name a2 name groupbya1 name a1 salesorderbya1 salesdesc a1 namedesc SQL进阶 算总合百分比每一笔资料是所有总合的百分之几 要用SQL算出总合百分比 我们需要用到算排名和累积总计的概念 以及运用子查询的做法 在这里 我们把子查询放在外部查询的SELECT子句中 selecta1 name a1 sales a1 sales selectsum sales fromtotal sales pct to totalfromtotal salesa1 total salesa2wherea1 sales a2 sales or a1 sales a2 salesanda1 name a2 name groupbya1 name a1 salesorderbya1 salesdesc a1 namedesc SQL进阶 算累积总合百分比我们要算出到目前为止的累积总合是所有总合的百分之几 而不是光看每一笔资料是所有总合的百分之几 selecta1 name a1 sales sum a2 sales selectsum sales fromtotal sales pct to totalfromtotal salesa1 total salesa2wherea1 sales a2 sales or a1 sales a2 salesanda1 name a2 name groupbya1 name a1 salesorderbya1 salesdesc a1 namedesc SQL进阶 数据处理的相关函数ceil 5 2 3 向上取整floor 5 2 2 向下取整round 7 3 2 2 33 四舍五入法则mod 5 2 1 取余TRUNCfordates 日期 TRUNC date fmt trunc sysdate yyyy 返回当年第一天 trunc sysdate mm 返回当月第一天 trunc sysdate d 返回当前星期的第一天 TRUNCfornumber 数字 TRUNC number decimals trunc 89 985 2 89 98trunc 89 985 89 即取整 trunc 89 985 1 80小数点左边指定位数后面的部分截去 以0记 SQL进阶 查询指定行数据 注意 伪例rownum不能使用 查询表的前十行数据select fromtablenamewhererownum 11 方法二select fromtablenamewhererownum 20minusselect fromtablenamewhererownum 11 方法三select from selectrow number over orderbyt salesdesc m t fromtotal salest wherembetween2and5 SQL进阶 对比学习selectrownum t fromtotal salest 顺序排序selectrow number over orderbyt salesdesc m t fromtotal salest 跳跃排序selectrank over orderbyt salesdesc m t fromtotal salest 连续排序selectdense rank over orderbyt salesdesc m t fromtotal salest SQL进阶 内容简介 SQL指令 SQL如何被用来储存 读取 以及处理数据库之中的资料 表格处理 SQL如何被用来处理数据库中的表格 进阶SQL 介绍SQL进阶概念 以及如何用SQL来执行一些较复杂的运算 SQL实例 介绍一些典型的实例 以及与大规划相关的语句 设置月报报表参考期别sel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市市场场地租赁合同附件一4篇
- 约定婚前财产婚后收益协议2篇
- 气候协议执行机制-洞察及研究
- 统编版2025-2026学年三年级上册期末学业水平测试卷(含答案)
- 部队交通安全培训计划表课件
- 河南省驻马店市汝南县一中二中三中联考2024-2025学年八年级下学期3月月考生物试题(含答案)
- 部门安全培训汇报课件
- 迁徙动物导航分子基础-洞察及研究
- 国际标准与区域监管冲突下的人造宝石出口合规性思考
- 四氟苯甲酸衍生物在极端工况下的热稳定性与结构演变关系研究
- 中成药合理应用专家讲座
- 清梳联设备及工艺流程
- 手性新药的注册要求
- 图形创意设计的课件完整版
- SH/T 0660-1998气相防锈油试验方法
- GB/T 4956-2003磁性基体上非磁性覆盖层覆盖层厚度测量磁性法
- 第三、四章-证据的分级、来源与检索课件
- 《计算机系统结构(第二版)》配套教学课件
- 职业技术学院学生退费申请表
- 微生物实验室风险评估报告
- 六年级上册美术课件-《戏曲人物》 浙美版(2014秋) (2)(共13张PPT)
评论
0/150
提交评论