1. SQL的问题,帮忙咯,谢谢各位。。。
3. 如何恢复使数据损失最小:
3.1 恢复2000/12/17(周日)12点的全库备份
3.2 利用每天晚12点差异备份恢复到2000/12/23 0:00
3.3 利用日志备份恢复到2000/12/23:3:00
损失半小时(30分钟)数据
4. 以ORACLE为例:
create kcch(avgscore out number, maxscore out number) as
begin
select avg(a.成绩),max(a.成绩) into avgscore,maxscore
from 课程 a
where a.课程名称='特定课程';
end;
--注:执行存储过程kcch(a,b),结果返回到a,b变量中
5.(oracle为例)
create trigger st_score
before delete on 学生表
for each row
begin
delete from 成绩表 a where a.学号=:old.学号;
end;
另外,这里可以考虑在成绩表上建立外键,通过级联删除的完整性约束来实现
2. SQL问题.求高人解答...急!急..
正确答案是
31 A 外键可以确定主表的唯一一行
32 C
31.在SQL Server2000数据库系统中,主键用来唯一地表示表中的每一行,外键用来强制”子表”和”主表” 间的引用完整性,下列关于主键和外键的理解正确的是( A ).(选择一项)
(a)选择主键的两个原则是最少性和稳定性
(b)在同一张表中,只能用一列当作主键
(c)外键用来唯一的标识”子表”中的每一行//这个是错误的,不是子表,而是主表。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
(d)一个表只能有一个主键和一个外键
32.在SQL Server 2000数据库系统中,使用T-SQL查询数据时,可以使用ORDER BY子句对查询结果排序,并且可以按照多少个字段进行排序,下列关于排序描述错误的是(C)选择一项
(a)按照多字段排序时,首先按照第一个字段排序
(b)默认的排序方式为升序
(c)按照多字段排序时候,按照第一个字段排序后,再对所有记录按照第二个字段排序//这个错误。是按照第一个子段排序后的结果集再按照第二个子段排序的。
(d)可以根据含字段的表达式排序
3. 关于SQL的一个问题,求高手指教
楼主这种情况,可以使用2种方案:
1、不直接用 INSERT 语句来插入数据。
专门写个存储过程,传入参数,判断插入、更新等操作逻辑。
只通过这个存储过程来负责插入数据的操作。
缺点是 假如这个表, 有人直接用 INSERT 语句插入数据了,那么可能就会产生一些问题。
=================================================
2、使用“触发器”
就是 插入数据的“之前” 或者 “之后”
判断 那个 jkzt 是否等于 5 。
如果满足的, 都额外更新另外几个数据。
如果不满足,就不做额外的动作。
=================================================
下面是使用触发器的例子代码 与执行结果:
1> CREATE TABLE table_1 (
2> code INT,
3> hxrq INT,
4> jkzf INT,
5> userid INT
6> );
7> GO
1>
2>
3> INSERT INTO table_1 VALUES (1,20100512,1,630102);
4> INSERT INTO table_1 VALUES (2,20100612,1,630102);
5> INSERT INTO table_1 VALUES (3,20100712,2,630103);
6> INSERT INTO table_1 VALUES (4,20100811,3,630102);
7> INSERT INTO table_1 VALUES (5,20100910,4,630102);
8> GO
(1 行受影响)
1>
2>
3> CREATE TABLE table_2(
4> code INT,
5> userid INT,
6> user_zt INT
7> );
8> GO
1>
2> INSERT INTO table_2 VALUES (1,630102,1);
3> GO
(1 行受影响)
1> CREATE TRIGGER AfterInsertTable_1
2> ON table_1
3> FOR INSERT
4> AS
5> DECLARE
6> @InsertUserID INT, -- 用于暂存 Insert 进来的 UserID
7> @InsertJkzf INT; -- 用于暂存 Insert 进来的 JKZF
8> BEGIN
9>
10> -- 取得本次插入的 ID, JKZF 数据.
11> SELECT @InsertUserID = userid, @InsertJkzf = jkzf FROM inserted;
12>
13> -- 判断 如果 本次插入的 JKZF = 5,那么更新 “该用户” 其他数据
14> IF @InsertJkzf = 5
15> BEGIN
16> UPDATE table_1 SET jkzf = 5 WHERE userid=@InsertUserID;
17> UPDATE table_2 SET user_zt = 5 WHERE userid=@InsertUserID;
18> END;
19>
20> END;
21> go
1>
2> INSERT INTO table_1 VALUES (6,20101010,5,630102);
3> go
(5 行受影响)
1>
2> SELECT * FROM table_1;
3> go
code hxrq jkzf userid
----------- ----------- ----------- -----------
1 20100512 5 630102
2 20100612 5 630102
3 20100712 2 630103
4 20100811 5 630102
5 20100910 5 630102
6 20101010 5 630102
(6 行受影响)
1>
2> SELECT * FROM table_2;
3> go
code userid user_zt
----------- ----------- -----------
1 630102 5
(1 行受影响)
1>
2>
4. sql 语句,请教各位了
介绍sql语句如何使用函数
5. 求高手解答 关于SQL的 在线等 务必详细 谢谢
1、函数依赖关系:Tne-->(Tname,Tel,Department),Bne-->Bname这两个函数依赖都是根据(教师编号唯一,图书编号唯一)确定的;(Tne,Bne,BorrowDate)-->(Rdate,Backup)这一个是根据题干后三句话确定的。
2、由题意可知,Tne或者Bne都不能唯一确定一行记录,故单独的Tne或Bne都不能作为候选码。两者的复合(Tne,Bne)也不能唯一的确定一条记录,因为一本书可以多次借给一个老师。所以候选码也只能是(Tne,Bne,BorrowDate)。
3、肯定满足第一范式,再看第二范式,关系中的每一个非主属性完全依赖于码,故也符合第二范式,但是不符合第三范式因为非主属性部分依赖于主码:(Tne,Bne,BorrowDate)-->Tname,Yne-->Tname;(Tne,Bne,BorrowDate)-->Bname
分解为符合第三范式:
teacher(tne,tname,tel,department)
book(bne,bname)
borrow(tne,bne,borrowdate,rdate,backup)
R(X,Y,Z)也只符合第二范式,理由如下:X或Y均可作为码,X-->XY根据分解规则,可得X-->Y,而Y-->Z,可推出:X-->Z,存在非主属性传递依赖于码,故不符合第三范式。
6. SQL语句相关的非常难的问题,请各位帮帮忙
这个问题不太好解决,大致可以循两个方向去解决:
1)需要数据库支持。看看数据库有没有储存运行SQL查询记录的机制,或者自建机制将数据库每次运行查询过的源表名存储起来(操作查询比较容易,可以使用触发器,选择查询不好办)。如果有这类记录的话,那么查询这些记录就可以得到查询过哪些源表?;
2)用编程的方法,对已经运行的SQL语句进行分析,根据SQL语言的编写规律,编写相应的算法,从中检索出这些字符串中查询过的源表名,具体的算法代码视不同编程语言和数据库SQL方言而有所不同。大致上是找关键字 “From” 或“UPDATE”或“DELETE”后面到关键字“WHERE”或“GROUP'或“ORDER”或结尾之间,首个无空格的字符串、或逗号后面无空格的字符串、或[]方括号里的字符串等
例如:SQL查询字符串“select a.*, b.name,c.Qty from table1 a, [table 2] b,(select item,Sum(*) as Qty from table3 group by item) c where a.id=b.id and a.item =c.item"
用算法取出里面的 table1、table 2、table3,当然取出来的表名还要排除其中的虚拟表(如果存在的话,例如查询、视图、存储过程、临时表等) 。
只要算法合适取出来源表名完全是能做的到得,只不过设计这个算法绝对不是一件轻松事,需要对SQL查询有很深入细致的了解!
哦!对了,如果数据库的所有源表名都带一个可唯一标识的“字符串”前缀或者后缀,那么取源表名算法可能会大大简化。
7. SQL是个问题,再次求帮助 很简单的。。。
数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。数据完整性因此而提出。本章将讲述数据完整性的概念及其在SQL Server 中的实现方法。
数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为四类:实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)、用户定义的完整性(User-definedIntegrity)。
数据库采用多种方法来保证数据完整性,包括外键、约束、规则和触发器。系统很好地处理了这四者的关系,并针对不同的具体情况用不同的方法进行,相互交叉使用,相补缺点。
8. 求SQL高手给出答案,谢谢了
二、填空
2、操作系统的安全性、服务器的安全性、数据库的安全性、表和列级的安全性
3、无损连接
4、选择、投影、连接
5、定义(或结构)、数据
6、数据库的用户、登录账户
7、域完整性、实体完整性、参照完整性、用户定义完整性
8、第一、部分函数依赖
9、SET、SELECT
10、绑定
三、简答题与设计
1、
⑴、SELECT [姓名]
FROM [S表]
WHERE [性别] = '女'
AND [年龄] > (SELECT [年龄]
FROM [S表]
WHERE [性别] = '男')
⑵、SELECT [姓名]
FROM [S表] W
WHERE (SELECT COUNT([课程号])
FROM [SC表]
WHERE [学号] = W.[学号]
GROUP BY [学号]) >
(SELECT COUNT([课程号])
FROM [SC表]
WHERE [学号] ='2008001'
GROUP BY [学号])
⑶、SELECT A.[姓名]
,B.[课程名]
,C.[成绩]
FROM [S表] A
,[C表] B
,[SC表] C
WHERE A.[学号] = C.[学号]
AND B.[课程号] = C.[课程号]
AND C.[成绩] < 60
⑷、修改学生课程成绩。
2、
SELECT A
FROM R
,S
WHERE B=D
AND R.C=S.C
3、
⑴ INSERT 退休员工表(工号,姓名,职称)
SELECT 工号,姓名,职称
FROM 员工信息表
WHERE 出生日期 < '1949'
DELETE 员工信息表
WHERE 出生日期 < '1949'
⑵ CREATE VIEW V1
AS
SELECT [工号]
,[职称]
,CONVERT(VARCHAR(10),GetDate(),120)-[出生日期] AS [年龄]
FROM 员工信息表
WHERE [职称] = '副教授'
四、T-SQL编程
1、CREATE PROCEDURE S1
(
@xuehao VARCHAR(8)
)
AS
SELECT A.[学号]
,A.[姓名]
,B.[课程号]
,B.[课程名]
,B.[成绩]
FROM [S表] A
,[C表] B
,[SC表] C
WHERE A.[学号] = C.[学号]
AND B.[课程号] = C.[课程号]
AND A.[学号] = @xuehao
GO
由于时间关系,暂时写到这里,余下的你自己完成吧!