- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意:属性列与常量的对应不仅数量而且顺 序都得对应,若属性列中没出现的属性在新 记录中这些列为空值 若没属性列则必须为表中每个属性都赋值 例:将一个学号为46789、性别为男、名叫 王红的学生插入学生表。
2)使用select子查询为一条记录或多条记录指定数 据值。 格式:insert [into] 表名[(属性1,属性2……)] select 子查询 例:首先在student数据库中建立一个新表‘新成 绩表’,字段有学号,姓名,课程名,成绩。 再使用sql语句将student数据库中01计算机一班 的学生成绩插入到‘新成绩表’中。
含有多表的几个查询应用
1.统计各班学生的人数,显示结果班级名称、 人数。 2.显示考试总分最高的三位同学信息,结果 包括学号、姓名、总分 3.显示所有学生的考试成绩,结果包括学号、 姓名、课程名称、成绩
左连接 格式:数据表1 left join 数据表2 on 连接表达式 含义:使用左连接进行查询的结果集将包括数据 表1中的所有记录,而不仅仅是连接字段所匹配 的记录。 例29:班级表与学生表进行左连接,显示学号, 姓名、班级编号,班级名称
1、SQL的历史 在70年代初,提出了关系模型。70年代中期,IBM公司在研 制 SYSTEM R关系数据库管理系统中研制了SQL语言,最 早的SQL语言是在1976 年 11 月公布的。 1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS数据库系统中也实现了SQL。 1986年10月,美国ANSI采用SQL作为关系数据库管理系统的 标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO) 采纳为国际标准。 1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关 系数据库管理系统的SQL标准语言,称为ANSI SQL 89, 该标准替代ANSI X3.135-1986版本。 目前,所有主要的关系数据库管理系统支持某些形式的SQL 语言, 大部分数据库打算遵守ANSI SQL89标准。
在查询中使用in、not in 例12:查询课程编号为02、05、08、09的课程名称 在查询中使用通配符(p43) 使用通配符时通常要用到like关键字 Sql中的4个通配符:%、_、[]、[^] 注意:通配符和字符串必须在单引号中;在查找通 配符本身时,需将通配符用方括号括起来。 例13:查询所有姓李的同学的信息。 例14:查询姓名中第二个字为“芳”的同学信息。 例15:查询不姓“李”的同学信息。 例16:查询不姓“李”,不姓“王”的同学信息。
右连接 格式:数据表1 right join 数据表2 on 连接表达式 含义:与左连接相反,使用右连接进行查询的结果 集将包括数据表2中的所有记录,而不仅仅是连接 字段所匹配的记录。 例30:班级表与专业表进行右接连,显示班级编号 班级名称,系部编号,系部名称字段
全连接 格式:数据表1 full join 数据表2 on 连接表达式 含义:使用全连接进行查询的结果集将包括两个 数据表中的所有记录,而不仅仅是连接字段所 匹配的记录。 自连接 例:显示选修了‘06’,‘07’这两门课的学生的学 号。
Update:用于更新表中满足条件的记录,若没条 件则对所有记录更新。 其一般格式为: Update<表名> Set <列名1>=<表达式1>[,<列名2>=<表达式2>……] [Where <条件>]; 例:将学生学号为46789的名字改为‘王晓红’ 课堂练习:将所有低于60分的成绩乘1.5
Update只能用于更新一个表中的记录,但是 Where子句中可用到其他的表(使用嵌套查询) 例:将‘李一平’的考试成绩都提高1%。 练习:将01计算机一班的分数加5分 分析:分数在成绩表中所以update的对象是 成绩表而01计算机一班是学生表中信息,两 表是通过学号建立起来的
2、 SQL的组成 SQL包括查询、定义、操纵和控制四部分。 数据定义语句:create,drop,alter 数据查询语句:select 数据操纵语句:insert ,update,delete 数据控制语句:grant,revote
2.2操作数据
学习重点:掌握select、insert、update、 delete,这4种语句的使用。 一、切换数据库 当用户登录到sql server时,通常自动连接到 mater数据库。要从当前数据库切换到指定 数据库要使用use语句。
Sql提供5个聚集函数,包括:avg;sum; count;max;min; 使用compute计算总计或进行分组小计,总计 值或小计值将作为附加新行出现在查询结 果中。 例17:显示所有男生信息,并统计其人数 例18:显示所有考试成绩信息,并统计最高 分和最低分
可以使用compute by子句对by后给出的列进行分组显 示,并计算该列的分组小计。 使用compute by子句时必须使用order by对compute by 中by指定的列进行排序。 例19:显示所有学生的信息,并统计男女生人数。 例20:显示所有学生的信息,并统计各班生人数。 例21:显示所有的考试成绩,并统计各学生的平均 分。 例22:显示所有的考试成绩,并统计各科的最高分 和最低分。
例:查询没有考试成绩的学生的学号、姓名。
使用exists和not exists关键字引入子查询应注意: 在exists关键字之前不能使用字段名称、常量或其 他表达式; 由于只是测试是否存在符合子查询中指定条件的 记录,因此由exists引入的子查询中的选择列表 通常为*。
3、数据操纵语句 Insert:用于向表插入指定记录。通常有两种形式 一是插入单独记录,二是插入一个子查询。 1)插入单独记录的基本格式: Insert Into<表名>[ (<属性列1>,<属性列2>……)] Values (<常量1>[,<常量2>……])
第2章 T-SQL语言
一、SQL语言简介 SQL是一种操纵数据库的结构化查询语言 (structured query language)。它最早是 IBM的圣约瑟研究实验室为其关系数据库 管理系统SYSTEM R开发的一种查询语言, 它的前身是SQUARE语言。 SQL在各个类型的大部分数据库中都得到支 持。
包含子查询的语句通常采用以下格式: 1.使用in和not in关键字 例:查看01计算机一班学生的学号、姓名、 性别信息。 例:查询“赵四娘”的同班同学,结果包括 姓名、学号、性别 例:查询不学‘01’这门课的不同的 是,由比较运算符引入的子查询必须返回 单个值,而不是值的列表。 例:查询参加’01’这门考试,但考试成绩 低于该课程平均成绩的学生学号、姓名 例:查看显示学生人数低于“0101001”班的 班级编号,并显示该班级人数。
3.使用exists和not exists关键字 使用exists和not exists关键字引入子查询的主要目的 是进行存在测试,测试子查询是否返回结果,如 有结果返回为true,否则返回false。 例:使用嵌套查询查询有考试成绩的学生的学号、 姓名 分析:本查询涉及学生表和成绩表关系。我们可在 学生表中的第一个元组开始,取stid值,用此值做 为条件去检查成绩表。如子查询结果不为空,则 where子句返回值为真,取此元组放入结果中;然 后再取学生表的下一个元组,重复这一过程,直 至学生表中全部检查完。
二、数据查询语句 Select用于对数据库进行查询。 其核心为: Select <目标列表达式1>[,<目标列表达式2>……] From<表名1>[,<表名2>……] 例1:使用sql语句查询班级表中班级信息,显示班 级编号、班级名称。 例2:使用sql语句查询学生表中信息,结果包括姓 名及其所在班级的编号。
嵌套查询
嵌套查询指在一个外层查询中包含有另一个内层 查询。外层查询称为主查询,内层查询称为子 查询。 通常,使用嵌套查询中的子查询先挑选出部分数 据,以作为主查询的数据来源或搜索条件。 关于子查询的说明: 1.子查询的select语句使用圆括号括起来; 2.子查询的select语句中不能包含compute子句; 3.如某个表只出现在子查询中,而不出现在主查询 中,那么在主查询的select子句中不能包含该数 据表中的字段。
可以使用distinct,只显示查询结果中完全相同的 一条记录。 例3:显示所有有考试成绩的学生学号。 使用top仅返回结果集中的前几行。如查询中包括 order by子句,则先排序; 如指定了percent关键 字,则返回前%n行。 例4:显示学生表中前10位学生的信息。 例5:显示学生表中前10%学生的信息。 例6:显示学生表中年龄最小的3位学生的信息。
例8:查询班级编号为0101001的学生,结果包括学 号、姓名、性别。 例9:查询0101001班的男生结果包括学号、姓名、 性别。 查询在某一范围内的信息时,条件通常是一个逻辑 表达式,表达式中可以使用运算符(p38) 例10:查询低于60的成绩,结果包括成绩表的所有 字段。 例11:查询1984年1月1日以后出生的学生信息。
使用group by可以使结果集按指定列进行分组。 注意:select子句中的选项列表中出现的列必须包含在 聚合函数或包含在group by子句中。 例23:显示各学生的平均分,结果包括学号、平均成 绩。 例24:统计各班的学生人数,结果班级编号、人数。 在group by可以使用having子句限制组或聚合函数的 检索条件。 例25:查询平均分低于60分的学生学号。 例26:查询人数低于10人的班级编号及该班人数。
另:使用select into向一个新表插入记录(p75) 格式:Select <目标列表达式1>[,<目标列表达式 2>……] Into 新表名 From<表名1>[,<表名2>……] Where 条件 例: 将tblstudent中的所有男生记录插入到表’stu_nan’中 说明:使用select into插入数据时,新表不能存在, 并且新表中的列和行是基于查询结果集的。
例27:统计班级0101001的人数,显示班级 编号及人数。 说明:该题可以在分组之前使用where子句 限制分组的记录,也可分组之后在having 子句中限制显示的组。但在where子句中 不能使用聚合函数。
含有多个表或视图的查询
笛卡儿积
如参加查询的表为多表,则必须在where中设 定表间的连接,并且select后的字段应指出 是哪个表的字段。 连接类型:内连接、外连接、交叉连接 内连接包括自然连接、相等连接等 外连接包括左连接、右连接、全连接 交叉连接即笛卡儿集,通常没有实际意义
在查询结果中可不显示列的名称,而显示列 的标题。(3种方法,见教材p35) 例7:查询学生表中所有学生的信息,显示 学生的学号、姓名、性别 注:表中的各列名称并未更改,只是为其增 加了显示标题。
在select语句中可使用where子语句,设定条件, 显示指定的记录。 格式为: Select <目标列表达式1>[,<目标列表达式2>……] From<表名1>[,<表名2>……] Where <条件1>[and<条件2>……]; 注:在where子语句中,可使用and、or、>、<、 < >、like、between…and 等运算符
自 然 连 接
例28:查询学生考试成绩,结果包括学 号、课程名称、成绩。 课堂练习:查询学生信息,结果包括学 号、姓名、性别及其所在班级名称。 例29:查询所有低于60分的成绩,并且 结果按成绩从高到低显示。显示结果 包括学号、姓名、课程代码、成绩
使用inner join进行自然连接 查询学生信息,结果包括学号、姓名、性别及其所 在班级名称。 Select tblstudent.stid,tblstudent.stname,tblstudent.sex, tblclass.clname From tblstudent inner join tblclass on tblstudent.clid=tblclass.clid 课堂练习:将例28、例29改写为使用inner join的形式。