`
longgangbai
  • 浏览: 7349611 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简单SQL 使用

阅读更多

问题描述:
 本题用到下面三个关系表:
 CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级
 BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
 BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期
 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。
 要求实现如下15个处理:
 1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。
 2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。
 3. 查询借阅了"水浒"一书的读者,输出姓名及班级。
 4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
 5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者。
 6. 查询现有图书中价格最高的图书,输出书名及作者。
 7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。
 8. 将"C01"班同学所借图书的还期都延长一周。
 9. 从BOOKS表中删除当前无人借阅的图书记录。
 10.如果经常按书名查询图书信息,请建立合适的索引。
 11.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。
 12.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。
 13.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。
 14.假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句。
 15.对CARD表做如下修改:
 a. 将NAME最大列宽增加到10个字符(假定原为6个字符)。
 b. 为该表增加1列NAME(系名),可变长,最大20个字符。
 
 
 1. 写出建立BORROW表的SQL语句,要求定义主码完整性约束和引用完整性约束
 --实现代码:
 CREATE TABLE BORROW(
 CNO int FOREIGN KEY REFERENCES CARD(CNO),
 BNO int FOREIGN KEY REFERENCES BOOKS(BNO),
 RDATE datetime,
 PRIMARY KEY(CNO,BNO))
 
 2. 找出借书超过5本的读者,输出借书卡号及所借图书册数
 --实现代码:
 SELECT CNO,借图书册数=COUNT(*)
 FROM BORROW
 GROUP BY CNO
 HAVING COUNT(*)>5
 
 3. 查询借阅了"水浒"一书的读者,输出姓名及班级
 --实现代码:
 SELECT * FROM CARD c
 WHERE EXISTS(
 SELECT * FROM BORROW a,BOOKS b
 WHERE a.BNO=b.BNO
 AND b.BNAME=N'水浒'
 AND a.CNO=c.CNO)
 
 4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期
 --实现代码:
 SELECT * FROM BORROW
 WHERE RDATE<GETDATE()
 
 5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者
 --实现代码:
 SELECT BNO,BNAME,AUTHOR FROM BOOKS
 WHERE BNAME LIKE N'%网络%'
 
 6. 查询现有图书中价格最高的图书,输出书名及作者
 --实现代码:
 SELECT BNO,BNAME,AUTHOR FROM BOOKS
 WHERE PRICE=(
 SELECT MAX(PRICE) FROM BOOKS)
 
 7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出
 --实现代码:
 SELECT a.CNO
 FROM BORROW a,BOOKS b
 WHERE a.BNO=b.BNO AND b.BNAME=N'计算方法'
 AND NOT EXISTS(
 SELECT * FROM BORROW aa,BOOKS bb
 WHERE aa.BNO=bb.BNO
 AND bb.BNAME=N'计算方法习题集'
 AND aa.CNO=a.CNO)
 ORDER BY a.CNO DESC
 
 8. 将"C01"班同学所借图书的还期都延长一周
 --实现代码:
 UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)
 FROM CARD a,BORROW b
 WHERE a.CNO=b.CNO
 AND a.CLASS=N'C01'
 
 9. 从BOOKS表中删除当前无人借阅的图书记录
 --实现代码:
 DELETE A FROM BOOKS a
 WHERE NOT EXISTS(
 SELECT * FROM BORROW
 WHERE BNO=a.BNO)
 
 10. 如果经常按书名查询图书信息,请建立合适的索引
 --实现代码:
 CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)
 
 11. 在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)
 --实现代码:
 CREATE TRIGGER TR_SAVE ON BORROW
 FOR INSERT,UPDATE
 AS
 IF @@ROWCOUNT>0
 INSERT BORROW_SAVE SELECT i.*
 FROM INSERTED i,BOOKS b
 WHERE i.BNO=b.BNO
 AND b.BNAME=N'数据库技术及应用'
 
 12. 建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)
 --实现代码:
 CREATE VIEW V_VIEW
 AS
 SELECT a.NAME,b.BNAME
 FROM BORROW ab,CARD a,BOOKS b
 WHERE ab.CNO=a.CNO
 AND ab.BNO=b.BNO
 AND a.CLASS=N'力01'
 
 13. 查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出
 --实现代码:
 SELECT a.CNO
 FROM BORROW a,BOOKS b
 WHERE a.BNO=b.BNO
 AND b.BNAME IN(N'计算方法',N'组合数学')
 GROUP BY a.CNO
 HAVING COUNT(*)=2
 ORDER BY a.CNO DESC
 
 14. 假定在建BOOKS表时没有定义主码,写出为BOOKS表追加定义主码的语句
 --实现代码:
 ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)
 
 15.1 将NAME最大列宽增加到10个字符(假定原为6个字符)
 --实现代码:
 ALTER TABLE CARD ALTER COLUMN NAME varchar(10)
 
 15.2 为该表增加1列NAME(系名),可变长,最大20个字符
 --实现代码:
 ALTER TABLE CARD ADD 系名 varchar(20)

分享到:
评论

相关推荐

    用简单模式,对SQLServer数据库收缩

    ### 使用简单恢复模式对SQL Server数据库进行收缩 在SQL Server中,随着业务的增长与时间的推移,数据库文件(.mdf)和日志文件(.ldf)可能会变得非常庞大,即使数据库中的实际数据量并没有那么大。在这种情况下,...

    简单sql语句.rar

    这个名为"简单sql语句.rar"的压缩包显然包含了关于SQL基础学习的资料,特别是针对初学者的教程。主要文件有"简单sql语句.txt",很可能是对SQL基本概念、语法和操作的详细介绍;而"下载说明.txt"可能是指导用户如何...

    SQL Server 游标的简单使用

    一、SQL server 游标的简单使用 一个对表进行操作的T-SQL语句通常都可产生或处理一组记录,但是许多应用程序,尤其是T-SQL嵌入的主语言,通常不能把整个结果集作为一个单元来处理,这些应用程序就需要用一种机制来...

    简单的SQL练习

    在这个名为"简单的SQL练习"的资源中,你将找到一系列有助于增强SQL理解与应用能力的题目,特别适合那些希望在ORACLE数据库环境下磨练自己SQL技巧的人。 首先,让我们深入了解SQL的基本概念。SQL包括数据查询、数据...

    简单sql管理工具

    《简单SQL管理工具详解》 在信息技术领域,数据库管理是一项至关重要的任务,特别是对于SQL Server 2000这样的大型关系型数据库系统。为了简化这一过程,开发者们常常利用各种工具来提高效率,其中“简单SQL管理...

    Sql.rar_VC++ SQL _简单sql

    本资源"Sql.rar_VC++ SQL _简单sql"显然提供了使用VC++连接SQL数据库的一个简单示例,这对于初学者或需要快速理解如何在C++项目中操作数据库的开发者来说非常有用。 首先,我们需要了解VC++如何与SQL数据库交互。...

    sql server 2016简单实用操作教程

    │ └ 存储过程-创建(SSM方式和SQL方式).mp4 ├ 安装 │ │ 单独安装SSMS(SQL Server管理器).mp4 │ │ 安装JRE环境.mp4 │ └ 安装SQL2016.mp4 ├ 数据库操作 │ │ 修改数据库(SQL).mp4 │ │ 修改数据库...

    ACCESS SQL使用大全

    《ACCESS SQL使用大全》涵盖了ACCESS数据库管理系统的SQL(Structured Query Language)使用方法,这是一门强大的数据查询和管理工具。SQL在ACCESS中的应用是数据库设计和管理的核心,无论是初学者还是经验丰富的...

    简单sql生成器,供学习使用

    SQLCreator是一个简单的Java SQL生成器,专为初学者和学习者设计,旨在简化数据库操作中的SQL语句编写。它利用了Java的注解和反射技术,使得开发者无需手动编写大量SQL语句,即可实现对数据库的增、删、查、改操作。...

    简单实用的SQL语句大全

    本资料“简单实用的SQL语句大全”旨在为初学者提供一个全面且易懂的SQL学习指南,涵盖了基本语法、函数、操作以及高级查询技巧。 1. **SQL基础** - **数据类型**:SQL支持多种数据类型,如整数(INT)、浮点数...

    一个简单的sql循环语句脚本

    在数据库编程中,我们通常使用PL/SQL(Oracle)、T-SQL(Microsoft SQL Server)或存储过程(MySQL)来实现循环结构。本话题将详细讲解一个简单的SQL循环语句脚本及其相关知识。 一、SQL循环语句概述 SQL循环语句...

    建表SQL语句,SQL简单入门语句建立表

    SQL简单入门语句建立表; SQL简单入门语句建立表, SQL简单入门语句建立表

    sqldbx使用方法

    ### Sqldbx 使用方法详解 #### 一、概述 SqlDbx是一款专为数据库管理和SQL开发设计的强大集成开发环境(IDE)。它主要面向在不同数据库环境中工作的应用开发者。SqlDbx具备高性能、易于使用的特点,并支持多种主流...

    sql拼接:不要拼接Sql,而要使用参数的好处

    这意味着对于相同的SQL结构,只需要解析一次,后续使用相同的SQL结构时可以直接使用缓存的执行计划,从而提高执行效率。 - **共享SQL语句**:为了提高性能,Oracle会将解析后的SQL语句及其执行计划存储在共享池中...

    简单的SQL连接客户端

    而"简单的SQL连接客户端"则是一个专为用户设计的轻量级应用,旨在帮助用户方便地连接到SQL Server数据库进行相关操作。下面将详细介绍SQL连接客户端的相关知识点。 首先,SQL连接客户端是数据库管理员、开发人员和...

    关于SQL教程的简单教程

    SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言,它被广泛应用于数据查询、更新、...这个简单的教程将引导你逐步探索SQL的世界,通过实例学习和实践,你将能够高效地处理各种数据问题。

    简单的SQL资料

    一些简单的SQL应用,比如简单的查询,修改,增加和删除。基本的操作!很是实用。

    SqlBuild使用说明

    SqlBuild 不仅可以生成简单的 SQL 文,还可以生成复杂的 SQL 文,包括嵌套子查询等。用户可以在编辑部分写更复杂的 SQL 文,然后点击“Get JAVA Source”按钮生成整理好的 JAVA 代码。 四、生成带有注释的 SQL 文 ...

Global site tag (gtag.js) - Google Analytics