首页 SQL_server_2000数据库(中)

SQL_server_2000数据库(中)

举报
开通vip

SQL_server_2000数据库(中) SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 1页 第五章 数据查询(1) 数据查询是数据库应用程序系统中使用率最高的一项功能,在本章将学习如 下内容: 理解查询的机制 使用 select语句进行条件查询 在查询中返回限制行、进行查询排序 在查询中使用表达式、运算符和函数 一、在企业管理器中查询数据: 方法:展开企业管理器,展开组,展开服务器,展开数据库,选择表选项, 选择要查询数据的表,右击,在菜单中选择“打开表”...

SQL_server_2000数据库(中)
SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 1页 第五章 数据查询(1) 数据查询是数据库应用程序系统中使用率最高的一项功能,在本章将学习如 下内容: 理解查询的机制 使用 select语句进行条件查询 在查询中返回限制行、进行查询排序 在查询中使用表达式、运算符和 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 一、在企业管理器中查询数据: 方法:展开企业管理器,展开组,展开服务器,展开数据库,选择表选项, 选择要查询数据的表,右击,在菜单中选择“打开表”,选择“查询”项,可以选 择执行多个表,字段时行查询输出,系统会自动生成 SQL语句。 二、SQL查询基础 1)查询和记录集: 查询是针对表中己经存在的数据行而言的,可以简单的理解为“筛选”,比如: 学员信息表: 学员编号 姓名 地址 班级 …… 001 张明 湖南 S201 002 李菲 湖北 S202 003 于谦 香港 S201 004 周接轮 台湾 S205 005 刘国正 北京 S202 查询班级“S202”得到如下:“记录集” 002 李菲 湖北 S202 005 刘国正 北京 S202 数据表在接受查询请求的时候,可以简单地理解为它将逐行选取,判断是否 符合查询的条件,如果符合就提取出来,然后把所有的被选择的行组织在一起, 形成另外一个“类似于表的结构”,这便是查询的结果,我们通常称之为“记录集” 由于记录集的结构实际上和表的结构是相同的,都是由行组成的,因此,在 记录集上依然可以进行再次查询。 2)使用 select语句进行查询 语句格式: select <列名> from <表名> [where <查询条件表达式>] [order by <排序的列名> [asc或 desc]] 其中:where及条件是可选的,如果不限制,则查询返回所有行的数据项 SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 2页 order by 是用来排序的,数据表中的记录是无序的,并不按照一定的次序存 储,例如要按学员的考试成绩排序以看到高分的情况,则需要按照分数列的值进 行排序。 asc 表示排升序 desc表示排降序 查询的具体用法如下: a) 查询所有的数据行和列 把表中的所有行和列都列举出来比较简单,这时需要用到“*”通配符来表示 所有的列: select * from userinfo b)查询部分行列---条件查询 查询部分列需要列举不同的列名,而查询部分行需要使用 where 子句进行条 件限制: select xb,xb,zy from userinfo where zy=’软件开发’ 以上查询,只是将专业为“软件开发”的学员的姓名、性别、专业列出来, 想想以下的查询结果: select xb,xb,zy from userinfo where zy<>’软件开发’ c)在查询中使用列名 as子句可以用来改变结果集列的名称,也可以为组合或者计算出的列指定名 称,还有一种情况是要让标题列的信息更易懂,比如把 xm列名查询后显示为“姓 名”: select xm as 姓名,xb as 性别,zy as 专业 from userinfo where zy=’软件开发’ 使用计算、合并得到新列的命名: select firstname+’.’+lastname as ‘姓名’ from employees 重新命名列名还有一种方法,就是采用“=”来命名: select ‘姓名’=firstname+’.’+lastname from employees d)查询空行 在 SQL语句中采用“is null”或者“is not null”来判断是否为空行,因此, 如果要查询学员信息中没有填写 email信息的学员,则可以: select xb from userinfo where email is null SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 3页 e)在查询中使用常量列 有的时候,一些常量的缺省信息需要添加到查询输出中,以方便统计或计算, 例如查询学员信息的时候,学校名称统一都是“湖北文达”,查询输出的语句: select 姓名=firstname+'.'+lastname,'湖北文达' as 学校名称 from employees f)查询返回限制的行数 一些查询需要返回限制的行数,例如,一个销售记录数据库中,有成千上万 条销售记录,现在需要找出销售排行前十位的销售记录,这种情况下就不需要把 所有的记录列出来,就需要用到限制返回行数的查询: SQL中,限制行数用 TOP关键字来约束,比如: select top 5 * from userinfo where xb=’男’ 还有一种情况是需要从表中按一定的百分比提取记录,这时需要用到 percent 关键字来限制,例如要提取 20%的女生数据: select top 20 percent * from userinfo where xb=’女’ 3) 查询排序 如果需要按照一定的顺序排列查询语句选中的行,需要使用 order by子句, 并且排序可以是升序(asc)或者降序(desc),默认为升序排列,例如: select * from userinfo order by id desc 表示,把 userinfo表中所有的记录按 id字段的值降序输出 如果,在查询学员成绩的时候,如果把有成绩都降低 10%后加上 5分,再按 照及格成绩的高低来进行排序,则: select xb as 姓名,(cj*0.9+5) as 综合成绩 from xscj where (cj*0.9+5)>60 order by cj 将两个表中的姓名字段信息查询并合并后,再按姓名字段降序排列: select au_lname+’.’+au_fname as emp from authors union select fname+’.’+lname as emp from employee order by emp desc 还可以按照多个字段进行排序,例如要在学员成绩的基础上,再按照课程 ID 进行排序的语句: select stu_id as 学员编号,score as成绩 from score where score>60 order by score,kcid SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 4页 4)在查询中使用函数 SQL Server 也提供了一些内部函数,不同类别的函数可以和 SQL Server 的 select 语句联合使用,也可以与 update和 insert一起使用。 以下,把函数分为四类,分别是:字符串函数,日期函数,数学函数和系统 函数。 a)字符串函数 字符串函数用于控制返回给用户的字符串,这些功能仅能用于字符型数据, 见下表: 部分常用的字符串函数 函数名 描述 举例 charindex 用来寻找一个指定的 字符串在另一个字符 串中的起始位置 Select charindex(‘xsc’,’my xsc computer’,1) 返回:4 len 返回传递给它的字符 串长度 Select len(‘sql server课程’) 返回:12 lower 把传递给它的字符串 转换为小写 Select lower(‘SQL server课程’) 返回:sql server课程 upper 把传递给它的字符串 转换为大写 Select upper(‘sql server课程’) 返回:SQL SERVER课程 ltrim 清除字符左边的空格 Select ltrim(‘张三 ‘) 返回:张三 rtrim 清除字符右边的空格 Select rtrim(‘张三 ‘) 返回: 张三 right 从字符串右边返回指 定数目的字符 Select right(‘买卖提.吐尔松’,3) 返回:吐尔松 replace 替换一个字符串中的 字符 Select replace(‘莫乐可切.杨可’,’可’,’兰’) 返回:莫乐可切.杨兰 stuff 在一个字符串中,删 除指定长度的字符, 并在该位置插入一个 新的字符串 Select stuff(‘abcdefg’,2,3,’我的音乐世界’) 返回:a我的音乐世界 efg b)日期函数 日期函数用于操纵日期值,我们不能直接对日期运用数学函数,例如,如果 执行一个诸如“当前日期+1”的语句,SQL Server无法理解要增加的是一日,一 月还是一年,日期函数帮助提取日期值中的日、月和年,以便分别操纵它们。 SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 5页 部分常用的日期函数 函数名 描述 举例 getdate 取得当前的系统日期 Select getdata() 返回:今天的日期 dateadd 将指定的数值添加到指 定的日期部分后的日期 Select dateadd(mm,4,’01/01/99’) 返回:以当前的日期格式返回 05/01/99 datediff 两个日期之间的指定日 期部分的区别 Select datediff(mm,’01/01/99’,’05/01/99’) 返回:4 datename 日期中指定日期部分的 字符串形式 Select datename(dw,’01/15/2000’) 返回:Saturday datepart 日期中指定日期部分的 整数形式 Select datepart(day,’01/15/2000’) 返回:15 c)数学函数 数学函数用于对数值进行代数运算。 部分常用的数学函数 函数名 描述 举例 abs 取数值表达式的绝对值 Select abs(-43) 返回:43 ceiling 取大于或等于指定数 值、表达式的最小整数 Select ceiling(43.5) 返回:44 floor 取小于或等于指定表达 式的最大整数 Select floor(43.5) 返回:43 power 取数值表达式的幂值 Select power(5,2) 返回:25 round 将数值表达式四舍五入 为指定精度 Select round(43.534,1) 返回:43.5 sign 对正数返回+1,对于负 数返回-1,对于 0 则返 回 0 Select sign(-43) 返回:-1 sqrt 取浮点表达式的平方根 Select sqrt(9) 返回:3 d)系统函数 系统函数用来获取有关 SQL Server中对象和设置的系统信息。 部分常用的系统函数 函数名 描述 举例 convert 用来转变数据类型 Select convert(varchar(5),12345) 返回:字符串的 12345 current_user 返回当前用户的名字 Select current_user SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 6页 返回:你登录的用户名 datalength 返回于指定表达式的字节数 Select datalength(‘中国 A联盟’) 返回:5 host_name 返回当前用户所登录的 计算机名称 Select host_name 返回:你所登录的计算机的名字 system_user 返回当前所登录的用户 名称 Select system_user 返回:你当前所登录的用户名 user_name 从给定的用户 ID 返回 用户名 Select user_name(1) 返回:从任意数据库中返回“dbo” 上面所有这些函数,可以在 t-sql中混合使用,得到符合特殊要求的查询输出。 三、数据查询的案例分析 案例 1:更新用户卡信息: 某公司印了一批充值卡,卡的密码是随机生成的,现在出现了这个问题:卡 里面的“O和 0”“ I和 1”,用户反映说看不清楚,公司决定,把存储在数据库中 的密码中所有的“O”改成“0”,所有的“I”改成“1”。 数据库表名:card 密码字段名:password 分析: 1、这是更新语句,需要用到 update语句来执行。 2、因为牵涉到字符串的替换,需要用到 SQL Server中的函数 replace 方法: update card set password=replace(password,‘O’,‘0’) update card set password=replace(password,‘I’,‘1’) 以上使用了两个 SQL 语句,在大多数情况下要求只能用一条 SQL 来实现, 因此,可以使用 replace的连续操作来实现: update card set password=replace(replace(password,‘O’,‘0’),‘I’,‘1’) 案例 2:特殊排序: 在数据库表中有以下字符数据,如: 13-1,13-2,13-3,13-10,13-100,13-108,13-18,13-11,13-15,14-1,14-2 现在希望通过 SQL 语句进行排序,并且首先要按照前半部分的数字进行排 序,然后再按照后半部分的数字进行排序,输出要排成这样: 13-1,13-2,13-3,13-10,13-11,13-15,13-18,13-100,13-108,14-1,14-2 数据库表名:sellrecord 字段名:listnumber 分析: 1、这是查询语句,需要使用 select语句 2、需要用到 order by进行排序 3、前半部分的数字,可以从先找到“-”符号的位置,然后取其左半部分, SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 7页 最后再使用 convert函数将其转换为数字: Convert(int,left(listnumber,charindex(‘-‘,listnumber)-1)) 4、后半部分的数字,可以先找到“-”符号的位置,然后把从第一个位置到 该位置的全部字符替换为空格,最后再使用 convert函数将其转换为数字: convert(int,stuff(listnumber,1,charindex(‘-‘,listnumber),’’)) 方法: select listnumber from sellrecord order by convert(int,left(listnumber,charindex(‘-‘,listnumber)-1)), convert(int,stuff(listnumber,1,charindex(‘-‘,listnumber),’’)) 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf : 1. 查询将逐行筛选表中的数据,最后符合要求的记录重新组合成“记录集”,记 录集的结构类似于表结构。 2. 判断一行中的数据项是否为空,使用 in null。 3. 使用 order by进行查询记录集的排序,并且可以按照多个列进行排序。 4. 在查询中,可以使用常量、表达式、运算符。 5. 在查询中使用函数,能够像在程序中那样处理查询得到的数据项。 练习: 在前面创建的学生档案数据库中,分别录入相关数据,然后进行如下查询练习: 1、按学生成绩由高到低显示。 2、显示姓名为“张三”的姓名、性别、地址。 3、显示所有男生的资料。 4、显示所有“软件开发”专业的学生。 5、显示所有非“软件开发”专业的学生。 6、显示姓“张”的学生。 7、显示地址为空的学生信息。 8、显示“1985-01-01”以后出生的学生。 作业: 在前面的 netbar数据库中,编写查询语句实现以下的要求: 1、由于最近屡次发生卡密码丢失事件,因此机房规定:要求密码与姓名或者 卡号不能一样,请编写 SQL语句,查出密码与姓名或者卡号一样的人的姓名,以 方便通知。 2、编号为 B01计算机坏了,请通过查询得到这台机器最近一次上机的卡号。 3、为了提高上门率,上个月举行了优惠活动,周六和周日每小时上机的费用 为半价,请统一更新一下数据表中的费用信息。 4、编写查询显示本月上机时间最长的前三名用户卡号。 SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 8页 第六章 数据查询(2) 目标: 使用 like、between、in进行模糊查询 在查询中使用聚合函数 使用 group by进行分组查询 进行多表联接查询 一、模糊查询: 模糊查询提取的数据不一定是确切的,查询者对查询条件也是模糊的, 例如:只查询张姓学员的信息,只查询分数在 60-80 分之间的,只查询北京 上海广州地区的学员等,这种查询不是指定某个人的姓名,一个具体的分数 或者某个固定的地区,因此,都属于模糊查询。 1、使用 like进行模糊查询: 在前面介绍过用 like字句来编写约束,like运算符用于匹配字符串 或字符串一部分(称为子串),由于该运算符只用于字符串,所以仅与 char或 varchar数据类型联合使用。 在数据更新、删除或者查询的时候,依然可以使用 like关键字来进 行匹配查询,例如: select * from userinfo where name like ‘张%’ 或者查询不是八月份发行的 A卡或 C卡: select * from card where id like ‘00[^8]%[A,C]%’ 2、使用 between在某个范围内进行查询: 使用关键字 between可以查找那些介于两个己知值之间的一组未知 值,要实现这种查询,必须知道开始查找的初值和终值,这个最大值和 最小值用单词 and分开,例如: select * from score where score between 60 and 80 此外,between查询在查询日期范围的时候使用的比较多,例如:查询不 在 1992年 8月 1日到 1993年 8月 1日之间订购的图 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 列表: select * from sales where ord_date not between ‘1992-8-1’and ‘1993-8-1’ 3、使用 in在列举值内进行查询: 查询的值是指定的某些值之一,可以使用带列举值的 in关键字来进行查 询,列举值放在圆括号里,用逗号分开,例如: select name as 学员姓名 from students where address in (‘北京’,’广州’,’上海’) order by address 还可以把 in关键字和 not关键字合起来使用,这样可以得到所有不匹配 列举值的行。 练习: 1、查询联系地址中含有“宜昌”的记录 SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 9页 2、查询学习专业中含有“电”的记录 3、查询入学时间在 7月到 9月之间的记录 4、查询“SQL”成绩在 60到 80分之间的记录 5、查询专业为“电子商务”、“软件开发”、“办公文秘”三者之一的记录 二、聚合函数: 在查询中还会经常碰到的要求是取某些列的最大值、最小值、平均值等 信息,有时候还需要计算出究竟查询到多少行数据项,这个时候,查询的“统 计数据”是用户比较关心的,SQL Server提供了“聚合函数”,聚合函数能够 基于列进行计算,并返回单个值。 1、 SUM SUM 返回表达式中所有数值的总和,SUM 只能用于数字类型的列,不 能够汇总字符、日期等其他数据类型。 例如:我们需要汇总成绩表中所有成绩字段的总和: select sum(cj) from cj 例如:在一个销售表中,我们需要统计总的销售量和销售金额: select sum(xsl),sum(xse) from xsb 注意:这种查询只返回一个数值,因此,不能够直接与可能返回多行的 列一起使用来进行查询,例如: select sum(xsl),mc from xsb 将会产生错误。但是,在一个查询中可以使用多个聚合函数。 2、AVG AVG函数返回表达式中所有数值的平均值,AVG函数也只能用于数字类 型的列,例如:要查询成绩表中及格线以上的人的平均成绩: Select avg(cj) as 平均成绩 from cj where cj>=60 3、MAX和MIN MAX 返回表达式中的最大值,MIN 返回表达式的最小值,它们都可以 用于数字型、字符型以及日期/时间型的列。 例如:要查询成绩表中的平均成绩、最高分、最低分等: select avg(cj) as 平均成绩, max(cj) as 最高分, min(cj) as 最低分 from cj where cj>=60 4、 COUNT COUNT返回提供的表达式中非空值的计数,COUNT可以用于数字和字 符类型的列。 SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 10页 另外也可以使用“*”作为 COUNT的表达式,使用星号可以不必指定特 定的列而计算所有的行数。 例如:在成绩表中统计及格的人数: select count(*) as 及格人数 from cj where cj>=60 三、分组查询: 1、使用 GROUP BY进行分组查询: 学生成绩表中存储了所有课程的成绩,在这种情况下,可能就需要 统计不同课程的平均成绩,也就是说,需要对不同的成绩首先按照课程 来进行分组,分组以后再进行聚合计算,得到累计信息。 这种情况也很普遍,比如一个电器销售商行,销售的有电视,空调, 冰箱等,所有销售记录肯定存在一张销售表中,月底,我们就需要分别 统计电视,空调,冰箱等电器的销售额,这时,就需要先按商品进行分 类,然后分别进行汇总和统计输出。 例如: 销售表 id spmc xsl dj Xse 1 电视 2 1500 3000 2 空调 5 1800 9000 3 电视 4 1500 6000 4 空调 2 1800 3600 select spmc,sum(xse) as 销售额 from xsb group by spmc 返回: spmc 销售额 电视 9000 空调 12600 分组查询,有时还要按照多个列来进行分组,比如,在上表添加一 个销售员(ygid)字段,我们需要看到每个不同的员工,销售每种不同的商 品的销售额: select spmc,ygid,sum(xse) from xsb group by spmc,ygid 在使用 group by关键字时,在 select列表中可以指定的项目是有限 制的,select语句中仅允许以下几项: 1)被分组的列 2)为每个分组返回一个值的表达式,例如用一个列名作为参数的聚 合函数。 2、使用 having子句进行分组筛选: having 子句是对分组统计后的数据进行条件限制的,比如,在上面 的销售表中,需要统计当天销售记录在两笔以上的商品的销售额,这种 情况用 where条件是不可能实现的, SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 11页 例如: select mc,ygid,sum(xse) from xsb group by mc,ygid having count(mc)>1 思考:在学生成绩表中,保存有第一次学员的考试成绩,以及第一 次考试没有通过的人员的补考成绩,现在需要只显示补考过的学员名单。 having 子句和 where 子句可以在同一个 select 语句中一起使用,使 用的顺序按照下图所示的次序: where group by having 在 select语句中,where、group by、having子句和统计函数的执行 次序如下:where 子句从数据源中去掉不符合其搜索条件的数据,group by 子句搜集数据行到各个组中,统计函数为各个组计算统计值,having 子句去掉不符合其组搜索条件的各组数据行。 例如: select mc,ygid,sum(xse) from xsb where xse>3000 group by mc,ygid having count(mc)>1 首先用 where条件语句选出单条记录销售额大于 3000的记录,再用 group by语句进行分组,然后用 having语句把分组后的不满足条件的记 录去掉。 数据查询的案例分析: 案例:汇总一张表中的奇数行和偶数行: 数据表:tbl 字段名称:a 主键字段:idkey(标识列,标识种子:1,标识增长量:1) 分析: 1、只能依靠标识列的值来进行判断和选取 2、但是,因为数据行可能存在增加、修改和删除,因此标识列的 数据值并不“完全可靠”,例如标识列值为 3,并不一定就是第 三行,因为如果第二行被删除了,它就是第二行,实际上也是 偶数行。 3、根据我们前面使用过的 select……into,可以创建一张新表,顺 便创建新的标识列,再在新的标识列上执行奇偶判断。 4、奇偶判断依据为:标识列值%2不等于 0,偶数的判断依据为: SQL Server2000教学课件 授课教师:李善华 QQ:36235856 e-mail:xscdn@126.com 共 12页第 12页 标识列值%2等于 0。 代码如下: select a,identity(int,1,1) as id into newtbl from tbl select sum(a) as 奇数列汇总 from newtbl where id%2<>0 select sum(a) as 偶数列汇总 from newtbl where id%2=0 最后再把 newtbl表删除。 总结: 使用 like、between、in关键字,能够进行模糊查询—条件不明确的 查询。 聚合函数能够对列生成一个单一的值,对于分析和统计非常有用。 分组查询是针对表中不同的组分类统计和输出,group by子句通常 会结合聚合函数一起来使用。  having子句能够在分组的基础上,再次进行筛选。 作业: 1、 查询表 A中的第二条记录(数据表:A,列名 ID、C1、C2,主键字 段:ID) 2、 在前面的 netbar数据库中: 一位家长想看看他儿子这个月的上机次数,己知他儿子的卡号为 0023_ABC,请编写 SQL查询。 3、 在学员的考试成绩表中,有如下的数据: 姓名 课程 成绩 张千 语文 80 张千 数学 77 李万 语文 66 李万 数学 91 王亿 语文 84 王亿 数学 100 王亿 英语 90 杨兆 英语 86 杨兆 数学 93 请用一条 SQL语句查询出每门课都大于 80分的学生姓名。
本文档为【SQL_server_2000数据库(中)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_839325
暂无简介~
格式:pdf
大小:138KB
软件:PDF阅读器
页数:12
分类:互联网
上传时间:2010-05-26
浏览量:351