实施部2011年培训(SQL基础部分)

上传人:宝路 文档编号:48127389 上传时间:2018-07-10 格式:PPT 页数:27 大小:371.12KB
返回 下载 相关 举报
实施部2011年培训(SQL基础部分)_第1页
第1页 / 共27页
实施部2011年培训(SQL基础部分)_第2页
第2页 / 共27页
实施部2011年培训(SQL基础部分)_第3页
第3页 / 共27页
实施部2011年培训(SQL基础部分)_第4页
第4页 / 共27页
实施部2011年培训(SQL基础部分)_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《实施部2011年培训(SQL基础部分)》由会员分享,可在线阅读,更多相关《实施部2011年培训(SQL基础部分)(27页珍藏版)》请在金锄头文库上搜索。

1、Ashine, your Partner for Excellence SQL基础知识 SQL技能培训 发现问题-解决问题目 录Ashine, your Partner for ExcellenceSQL基础知识SQL语句分:数据定义语言(Data Definition Language,简称“DDL”) 、数据操纵语言(Data Manipulation Language,简称“DML”)、数据 控制语言(Data Control Language,简称“DCL”)三部分功能。 主要讲解DML部分,查询是DML部分中最主要的部分,所以重点 讲解。 在sqlserver中 DML包括:sele

2、ct,update,insert,delete; DDL包括:create,drop,alter; DCL包括grant,revoke,deny,execute,while等等。例表: 假定对score(成绩)、student(学籍卡)、course(课程)、 classcourse(科目属性设置表)这四张表操Ashine, your Partner for ExcellenceSQL基础知识SELECT语句 1语法: select * from table_name where group by havingorder by 语法的执行顺序说明:先执行from字句,然后依次是where、gr

3、oup by 、having、order by字句,最后才对结果select 2普通单表查询 select * from Suppliers select top 100 * from Suppliers 3不重复查询 SELECT DISTINCT Country FROM Suppliers 4带条件查询(where后面不可跟聚合函数,比较运算符的右边不可出 现集合值) SELECT * FROM Suppliers WHERE Country=USAAshine, your Partner for ExcellenceSQL基础知识SELECT语句(续) 5关联查询(为了避免笛卡儿乘积的

4、产生,对于n个表的连接,至少 要有n-1个条件;对于重复的字段,则需要在字段前加上表的别名 SELECT P.ProductID,P.ProductName, S.SupplierID,S.CompanyName FROM Suppliers S,Products P WHERE S.SupplierID = P.SupplierID AND S.Country=USA 这个语句根据ANSI-92标准也可以这样写: SELECT P.ProductID,P.ProductName, S.SupplierID,S.CompanyName FROM Suppliers AS SINNER JOIN

5、 Products AS P ON (S.SupplierID = P.SupplierID) WHERE S.Country=USAAshine, your Partner for ExcellenceSQL基础知识SELECT语句(续) 6分组(group by)、筛选(having) SELECT S.SupplierID,S.CompanyName ,COUNT(*),COUNT(1)FROM Suppliers AS SINNER JOIN Products AS P ON (S.SupplierID = P.SupplierID) WHERE S.Country=USA GROUP

6、 BY S.SupplierID,S.CompanyName HAVING COUNT(*)1 说明:语句先执行where条件,然后在条件里分组(group by)排列, 最后在分组里进一步筛选(having);select选择列表里除聚合函数 以外的列都必须出现在group by后面,group by后面不能跟字段别名 ,不支持任何使用了聚合函数的集合列;having可以包含聚合函数 ,可以引用选择列表中出现的任意列Ashine, your Partner for ExcellenceSQL基础知识SELECT语句(续) 7聚合函数(avg)、分组(group by)、筛选(having)、

7、排序(order by) SELECT S.SupplierID,S.CompanyName ,COUNT(*) 品种数 ,AVG(P.UnitPrice) 平均单价,MAX(UnitsInStock) 库存最大 FROM Suppliers AS S INNER JOIN Products AS P ON (S.SupplierID = P.SupplierID) WHERE S.Country=USA GROUP BY S.SupplierID,S.CompanyName HAVING COUNT(*)1 ORDER BY S.SupplierID DESC 说明:聚合函数(也称统计函数)

8、共有5个,分别是:avg -求平均值 ,count -统计数目,max -求最大值,min -求最小值,sum -求和 ,更具体的用法查看sqlserver联机帮助;排序有两种:asc(升序) ,desc(降序)Ashine, your Partner for ExcellenceSQL基础知识SELECT语句(续) 8并集运算 SELECT SupplierID,CompanyName FROM Suppliers WHERE Country=USA UNION ALL SELECT SupplierID,CompanyName FROM Suppliers WHERE Country=Ja

9、pan 说明:union all会取多表并集的重复行;union可以去掉重复行;多表 之间的union必须列数相同一一对应,对应的列之间必须可以隐性的 转换成相同的数据类型(即兼容)Ashine, your Partner for ExcellenceSQL基础知识SELECT语句(续) 10嵌套查询(分为层次嵌套和相关嵌套两种,当嵌套多于2个又 称多级嵌套) 层次嵌套(in,not in,比较运算符) SELECT * FROM PRODUCTS WHERE SupplierID IN (SELECT SupplierID FROM Suppliers WHERE Country=USA)任

10、何的层次查询都可以化解成关联查询,如这题也可以写成: SELECT P.* FROM PRODUCTS P INNER JOIN Suppliers S ON P.SupplierID=S.SupplierID WHERE S.Country=USASELECT DISTINCT P.* FROM PRODUCTS P,Suppliers S WHERE P.SupplierID=S.SupplierID AND S.Country=USA 相关嵌套(EXISTS,NOT EXISTS) SELECT * FROM PRODUCTS AS P WHERE EXISTS(SELECT 1 FRO

11、M Suppliers AS S WHERE P.SupplierID=S.SupplierID AND S.Country=USA)Ashine, your Partner for ExcellenceSQL基础知识SELECT语句(续) 10嵌套查询(分为层次嵌套和相关嵌套两种,当嵌套多于2个又称多 级嵌套) 说明: in、not in执行的机制是先执行紧跟其后的子查询,然后再执行父查询 ,判断父查询的关键字是否存在于子查询所得到的集合里;exists、 not exists的执行机制是每取得子查询的一条记录马上就与父查询记 录进行比较,一直遍历整个子查询到结束,相关查询之间的连接不 是列

12、之间的关系,而是表之间的关系,所以在select列表中,通常不 需要明确的指定列名,使用*或数字(如1)代替就可以了;使用not in或not exists可以很方便的实现非成员关系型和非存在关系型的查 询难题,降低查询复杂度;如果能确定子查询返回的是单值,那么 可以使用比较运算符;另外嵌套查询只能放在小括号里;子查询还 可以嵌套其他子查询,这就是多级查询.Ashine, your Partner for ExcellenceSQL 技能培训SQL Server 2000有6个系统数据库 1、 Master:存储所有系统信息。包括登录、系统设置、初始化信息 和其它系统数据库及用户数据库的相关信

13、息。 2、Model:是所有用户数据库和Tempdb的模板数据库,它含有Master 数据库所有系统表的子集。 3、Msdb数据库是代理服务数据库,为其警报、任务调度 和记录操作员的操作提供存储空间。 4、Tempdb是一个临时数据库,它为所有的临时表、临时 存储过程及其它临时操作提供存储空间。 5、Pubs和Northwind数据库是两个实例数据库。Ashine, your Partner for ExcellenceSQL 技能培训 几个重要的系统表 1. Sysobjects表:存储每个数据库对象,都含有一行记录。 2. Syscolumns表:表或者视图的每个列和存储过程中的每个参数含

14、有 一行记录。 3. Sysindexes表:每个索引和没有聚簇索引的每个表含有一行记录,它 还对包括文本/图像数据的每个表含有一行记录。 4. Sysusers表:每个Windows NT用户、Windows NT用户组、SQL Server 用户或者SQL Server 角色含有一行记录。 5. Sysdatabases表:每个系统数据库和用户自定义的数据库都会有一行 记录。 6. Sysdepends表:记录表、视图和存储过程之间的每个依赖关系。 7. Sysconstraints表:记录每个完整性约束,包括主键约束、默认值约 束、外键约束等等。Ashine, your Partner

15、for ExcellenceSQL 技能培训 怎么看帮助?Ashine, your Partner for ExcellenceSQL 技能培训 一些技巧 1)Exists 和IN的区别 使用in和exist? in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop 循环再对内表进行查询。 例如:表A(小表),表B(大表) 1: select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引; select * from A where exists(select cc from B where

16、cc=A.cc) 效率高,用到了B表上cc列的索引。 2: select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引; select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。 一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:Ashine, your Partner for ExcellenceSQL 技能培训 一些技巧 2)not in 和not exists 如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引; 而not extst

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号