已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL Server 2008 数据库数据库 创建 建表 查询语句创建 建表 查询语句 一 创建数据库一 创建数据库 1 利用对象资源管理器创建用户数据库 利用对象资源管理器创建用户数据库 1 选择 开始 程序 Microsoft SQL Server 2008 SQL Server Management Studio 命令 打开 SQL Server Management Studio 2 使用 Windows 身份验证 连接到 SQL Server 2008 数据库实例 3 展开 SQL Server 实例 右击 数据库 然后 人弹出的快捷菜单中选择 新建数据库存 命令 打 开 新建数据库 对话框 4 在 新建数据库 对话框中 可以定义数据库 的名称 数据库的所有者 是否使用全文索引 数据 文件和日志文件的逻辑名称和路径 文件组 初始大 小和增长方式等 输入数据库名称 student 2 利用 利用 T SQL 语句创建用户数据库 语句创建用户数据库 在 SQL Server Management Studio 中 单击标准工具 栏的 新建查询 按钮 启动 SQL 编辑器窗口 在光 标处输入 T SQL 语句 单击 执行 按钮 SQL 编辑 器就提交用户输入的 T SQL 语句 然后发送到服务器 执行 并返回执行结果 创建数据库 student 的 T SQL 语句如下 Create database student On primary name student data filename E SQL Server2008 SQLFULL CHS Microsoft SQL Server MSSQL10 MSSQLSERVER MSSQL DATA student data mdf size 3 maxsize unlimited filegrowth 1 Log on name student log filename E SQL Server2008 SQLFULL CHS Microsoft SQL Server MSSQL10 MSSQLSERVER MSSQL DATA student log ldf size 1 maxsize 20 filegrowth 10 二 创建数据表二 创建数据表 1 利用表设计器创建数据表 利用表设计器创建数据表 1 启动 SQL Server Management Studio 连接到 SQL Server 2008 数据库实例 2 展开 SQL Server 实例 选择 数据库 student 表 单击鼠标右键 然后从弹出的快捷 菜单中选择 新建表 命令 打开 表设计器 3 在 表设计器 中 可以定义各列的名称 数 据类型 长度 是否允许为空等属性 4 当完成新建表的各个列的属性设置后 单击工 具栏上的 保存 按钮 弹出 选择名称 对话框 输入新建表名 stu info SQL Server 数据库引擎会依 据用户的设置完成新表的创建 2 利用 利用 T SQL 语句创建数据表 语句创建数据表 Create table stu info stu id char 10 not null name nvarchar 20 not null birthday date null sex nchar 2 null address nvarchar 20 null mark int null major nvarchar 20 null sdept nvarchar 20 null 3 样本数据库 样本数据库 student 表数据 表数据 学生信息表 stu info 课程信息表 course info 学生成绩表 stu grade 三 完整性与约束三 完整性与约束 数据库中的数据是现实世界的反映 数据库的设计必 须能够满足现实情况的实现 即满足现实商业规则的 要求 这也是数据完整性的要求 在数据库的管理系统中 约束是保证数据库中数据完 整性的重要方法 1 完整性 完整性 数据完整性是数据库设计方面一个非常重要的问题 数据完整性代表数据的正确性 一致性和可靠性 实 施数据完整性的目的在于确保数据的质量 在 SQL Server 中 根据数据完整性措施所作用的数据 库对象和范围不同 可以将数据完整性分类为实体完 整性 域完整性和参照完整性 实体完整性把数据表中的每行看作一个实体 它要求 所有的行都具有唯一的标识 域完整性要求数据表中 指定列的数据具有正确的数据类型 格式和有效的数 据范围 参照完整性维持被参照表和参照表之间的数 据一致性 2 约束 约束 约束是数据库中的数据完整性实现的具体方法 在 SQL Server 中 包括 5 种约束类型 primary key 约束 foreign key 约束 unique 约束 check 约束和 default 约束 四 数据查询四 数据查询 1 查询语句 查询语句 查询就是根据客户端的要求 数据库服务器搜寻出用 户所需要的信息资料 并按用户规定的格式进行整理 后返回给客户端 查询语句查询语句 select 在在 SQL Server 中是中是 使用频率最高的语句 可以说使用频率最高的语句 可以说 select 语句是语句是 SQL 语言语言 的灵魂 的灵魂 select 语句的语法结构 select select list into new table From table source where search condition group by group by expression having search condition Order by order expression asc desc 参数说明如下 Select子句 指定由查询结果返回的列 Into子句 将查询结果存储到新表或视图中 From子句 用于指定数据源 即使用的列所在的表 或视图 如果对象不止一个 那么它们之间必用逗号 分开 Where子句 指定用于限制返回的行的搜索条件 如 果select语句没有where子句 dbms假设目标表中 的所有行都满足搜索条件 Group by子句 指定用来放置输出行的组 并且如 果select子句select list中包含聚合函数 则 计算每组的汇总值 Having子句 指定组或聚合函数的搜索条件 Having通常与groupby子句一起使用 Order by子句 指定结果集的排序方式 ASC关键 字表示升序排列结果 DESC关键字表示降序排列结 果 如果没有指定任何一个关键字 那么ASC就是默 认的关键字 如果没有orderby子句 DBMS将根据 输入表中的数据的存放位置来显示数据 在这一系列的子句中 select子句和from子句是 必需的 其他的子句根据需要都是可选的 2 简单查询 简单查询 2 1 查询列 1 查询指定列 数据表中有很多列 通常情况下并不需要查看全部的 列 因为不同的用户所关注的内容不同 在指定列的查询中 列的显示顺序由 select 子句指定 与数据在表中的存储顺序无关 同时 在查询多列时 用 将各字段隔开 例例 7 1 查询所有同学学号 姓名和成绩信息 查询所有同学学号 姓名和成绩信息 Select stu id name mark from stu info 查询结果如下 2 查询所有列 使用 通配符 查询结果将列出表中所有列的值 而不必指明各列的列名 这在用户不清楚表中各列的 列名时非常有用 服务器会按用户创建表格时声明列 的顺序来显示所有的列 例例 7 2 查询所有同学的所有信息 查询所有同学的所有信息 select from stu info 查询结果如下 3 使用运算列 YEAR 为系统函数 获取指定日期的年份 GEDDATE 为系统函数 获取当前日期和时间 例例 7 3 查询所有同学的年龄信息 查询所有同学的年龄信息 Select stu id name YEAR getdate YEAR birthday from stu info 查询结果如下 4 改变列标题显示 通常在查询结果显示的列标题就是创建表时所使用的 列名 但是 这在实际使用中往往会带来一些不便 因此 可以利用 列标题 列名 或 as 列标题 来根 据需要修改列标题的显示 例例 7 4 查询所有同学的年龄信息 查询所有同学的年龄信息 Select name as 姓名 YEAR getdate YEAR birthday as 年龄 from stu info 查询结果如下 5 除去结果的重复信息 使用 distinct 关键字能够从返回的结果数据集合中删 除重复的行 使返回的结果更简洁 例例 7 5 查询所有的院系信息 查询所有的院系信息 Select distinct sdept from stu info 查询结果如下 6 返回查询的部分数据 在 SQL Server 2008 中 提供了 top 关键字让用户指 定返回一定数量的数据 Top n 表示返回最前面的 n 行 n 表示返回的行数 top n percent 表示返回前面的 n 行 例例 7 6 查询前 查询前 5 位同学的学号 姓名和成绩信息 位同学的学号 姓名和成绩信息 Select top 5 stu id name mark from stu info 查询结果如下 例例 7 7 查询 查询 60 同学的学号 姓名和成绩信息 同学的学号 姓名和成绩信息 Select top 60 percent stu id name mark from stu info 查询结果如下 2 2 选择行 Where 子句用于指定查询条件 使得 select 语句的 结果表中只包含那些满足查询条件的记录 在使用时 where 子句必须紧跟在 from 子句后面 Where 子句中的条件表达式包括算术表达式和逻辑 表达式两种 SQL Server 对 Where 子句中的查询条 件的数目没有限制 1 使用比较表达式 例例 7 8 查询所有的男同学学号 姓名 生日和性别 查询所有的男同学学号 姓名 生日和性别 信息 信息 Select stu id name birthday sex from stu info where sex 男 查询结果如下 例例 7 9 查询所有的总分大于 查询所有的总分大于 550 分的同学学号 姓分的同学学号 姓 名 生日和性别信息 名 生日和性别信息 Select stu id name birthday sex from stu info where mark 550 查询结果如下 2 使用逻辑比较表达式 例例 7 10 查询所有总分大于 查询所有总分大于 550 的男同学信息 的男同学信息 Select stu id name birthday sex from stu info where mark 550 and sex 男 查询结果如下 例例 7 11 查询所有总分大于 查询所有总分大于 550 分或男同学信息 分或男同学信息 Select stu id name birthday sex From stu info Where mark 550 or sex 男 查询结果如下 为了增强程序可读性 一般采用括号 来实现需要的 执行顺序 而不考虑其默认的优先级顺序 例例 7 12 查询所有信息学院和会计学院并且总分大 查询所有信息学院和会计学院并且总分大 于于 550 分的同学信息 分的同学信息 select from stu info where sdept 信息学院 or sdept 会计学院 and mark 550 查询结果如下 3 空值 null 的判断 如果在创建数据表时没有指定 not null 约束 那么 数据表中某些列的值就可以为 null 所谓 null 就是空 在数据库中 其长度为 0 例例 7 13 查询所有籍贯为空的同学信息 查询所有籍贯为空的同学信息 select from stu info where address is null 查询结果如下 4 限定数据范围 使用 between 限制查询数据范围时同时包括了边界 值 效果完全可以用含有 和 和 80 Group by stu id 查询结果如下 3 分组筛选 如果使用 group by 子句分组 则还可用 having 子句 对分组后的结果进行过滤筛选 Having 子句通常与 group by 子句一起使用 用于指定组或合计的搜索条 件 其作用与 where 子句相似 二者的区别如下 作用对象不同 where 子句作用于表和视图中的行 而 having 子句作用于形成的组 Where 子句限制查 找的行 having 子句限制查找的组 执行顺序不同 若查询句中同时有 where 子句和 having 子句 执行时 先去掉不满足 where 条件的行 然后分组 分组后再去掉不满足 having 条件的组 Where 子句中不能直接使用聚合函数 但 having 子 句的条件中可以包含聚合函数 例例 7 27 统计学生成绩表中每个同学的最高分 最 统计学生成绩表中每个同学的最高分 最 低分 平均分和总分 并输出平均分大于低分 平均分和总分 并输出平均分大于 87 分的信分的信 息 息 Select stu id MAX grade MIN grade AVG grade SUM grade From stu grade Group by stu id Having AVG grade 87 查询结果如下 4 明细汇总 使用 group by 子句对查询数据进行分组汇总 为每 一组产生一个汇总结果 每个组只返回一行 无法看 到详细信息 使用 compute 和 compute by 子句既能 够看到统计经营部的结果又能够浏览详细数据 例例 7 28 使用 使用 compute 子句对所有学生的人数进行子句对所有学生的人数进行 明细汇总 明细汇总 select from stu info compute count stu id 查询结果如下 在使用 compute 和 compute by 时 需要注意以下几 点 Compute by 子句不能与 select into 子句一起使用 Compute 子句中的列必须在 select 子句的字段列表 中出现 Compute by 表示按指定的列进行明细汇总 使用 by 关键字时必须同时使用 order by 子句 并且 compute by 中出现的列必须具有与 order by 后出现的列相同 的顺序 且不能跳过其中的列 例例 7 29 使用 使用 compute by 子句按照院系对所有学生子句按照院系对所有学生 的人数进行明细汇总 的人数进行明细汇总 select from stu info order by sdept compute count stu id by sdept 查询结果如下 3 连接查询 连接查询 前面介绍的查询都是针对单一的表 而在数据通库管 理系统中 考虑到数据的冗余度低 数据一致性等问 题 通常对数据表的设计要满足范式的要求 因此也 会造成一个实体的所有信息保存在多个表中 当检索 数据时 往往在一个表中不能够得到想要的信息 通 过连接操作 可以查询出存放在多个表中同一实体的 不同信息 给用户带来很大的灵活性 多表连接实际上就是实现如何使用一个表中的数据来 选择另一个表中的行 而连接条件则主要通过以下方 法定义两个表在查询中的关联方式 指定每个表中要用于连接的列 典型的连接条件在一 个表中的指定外键 在另一个表中指定与其关联的键 指定比较各列的值时要使用的比较运算符 等 表的连接的实现可以通过两种方法 利用 select 语句 的 where 子句 在 from 子句中使用 join inner join cross join outer join left outer join full outer join 等 关 键字 例例 7 30 查询所有选修课程编号 查询所有选修课程编号 701 的同学学号 的同学学号 姓名和成绩 姓名和成绩 Select stu info stu id name mark From stu info stu grade Where stu info stu id stu grade stu id and course id 701 查询结果如下 例例 7 31 查询所有选修课程的同学选修课程的成绩 查询所有选修课程的同学选修课程的成绩 Select stu info stu id name course name grade From stu info stu grade course info Where stu info stu id stu grade stu id and course info course id stu grade course id 查询结果如下 有时表名比较烦琐 使用起来很麻烦 为了程序的简 洁明了 在 SQL 中 也可以通过 AS 关键字为表定义 别名 例例 7 32 查询所有同学所有课程的成绩 查询所有同学所有课程的成绩 Select A stu id name course name mark From stu info as A stu grade as B course info as C Where A stu id B stu id and B course id C course id 查询结果如下 在 select 语句的 from 子句中 通过指定不同类型的 join 关键字可以实现不同的表的连接方式 而在 on 关键字后指定连接条件 例例 7 33 查询所有选修课程的同学学号 姓名和成 查询所有选修课程的同学学号 姓名和成 绩 绩 Select stu info stu id name mark From stu info inner join stu grade On stu info stu id stu grade stu id 查询结果如下 例例 7 34 从 从 stu info 表中查询入学分数比学号为表中查询入学分数比学号为 2007070101 同学高的所有同学信息 同学高的所有同学信息 Select R1 stu id R1 name R1 mark From stu info as R1 inner join stu info as R2 On R2 stu id 2007070101 and R1 mark R2 mark 查询结果如下 例例 7 35 查询所有同学的选修课程信息 查询所有同学的选修课程信息 Select stu info stu id name mark From stu info left outer join stu grade On stu info stu id stu grade stu id 查询结果如下 例例 7 36 查询所有同学的选修课程信息 查询所有同学的选修课程信息 Select stu info stu id name mark From stu grade right outer join stu info On stu info stu id stu grade stu id 查询结果如下 4 嵌套查询 嵌套查询 所谓嵌套查询指的是在一个 select 查询语句中包含 另一个 或多个 select 查询语句 其中 外层的 select 查询语句叫外部查询 内层的 select 查询语句 叫子查询 嵌套查询的执行过程 首先执行子查询语句 得到的 子查询结果集传递给外层主查询语句 作为外层主查 询的查询项或查询条件使用 子查询也可以再嵌套子 查询 4 1 单列单值嵌套查询 例例 7 37 查询选修 查询选修 计算机基础计算机基础 的学生成绩信息 的学生成绩信息 select from stu grade where course id select course id From course info Where course name 计算机基础 查询结果如下 例例 7 38 查询比 查询比 2007070101 同学年龄大的同学同学年龄大的同学 信息 信息 select from stu info where birthday select birthday From stu info Where stu id 2007070101 查询结果如下 4 2 单列多值嵌套查询 例例 7 39 查询所有会计学院的同学成绩信息 查询所有会计学院的同学成绩信息 select from stu grade where stu id in select stu id From stu info Where sdept 会计学院 查询结果如下 例例 7 40 查询其他系中比会计学院某一学生分数少 查询其他系中比会计学院某一学生分数少 的学生学号和姓名 的学生学号和姓名 Select stu id name From stu info Where mark any select mark From stu info Where sdept 会计学院 And sdept 会计学院 查询结果如下 例例 7 41 查询选修 查询选修 计算机基础计算机基础 的学生成绩信息 的学生成绩信息 select from stu grade where exists select From course info Where stu grade course id course id and co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论