数据库sql题目解答

拜托了,哪位高手帮忙解答一下1、有 4 个关系模式如下:出版社(出版社编号,出版社名称)图书(图书编号,书名,出版社编号,定价)作者(作者编号,姓名)著书(图书编号,作者编号,作者排序)注:作者排序 =1 表示第一作者,依此类推。用 SQL 语句,完成:(1) 检索所有定价超过 20 元的书名。(2). 统计每个出版社图书的平均定价。(3). 将科学出版社的所有图书定价下调 5% 。(4). 列出所有图书的书名、第一作者姓名和出版社名称。(5). 建立视图,显示“人民出版社” 的出版的图书的详细信息。2、设有如下3个关系模式:职工 EMP(职工号,姓名,性别,出生年月)工程 PRJ(工程编号,工程名称,预算)报酬 SAL(职工号,工程编号,工资)用SQL语句,完成第(1)-(6)题。(1).创建“报酬”表,其中主码为“职工号,工程编号”,外码为“职工号”和“工程编号”(2).按照职工号统计每个职工的总收入。(3).检索所有预算超过100万的工程的情况。(4).将参加了101号工程的职工工资提高10%。(5).创建一个查询职工承担工程的视图VPS,VPS包括职工号、姓名、工程名称和工资属性。(6).将“报酬”表的查询权限授给用户王红。3、在供应商、零件数据库中有以下3个关系模式:供应商:S(SNO,SNAME,CITY,STATUS) 零件:P(PNO,PNAME,WEIGHT,COLOR,CITY) 供应货:SP(SNO,PNO,QTY) 供应货关系SP表示某供应商SNO,供应了PNO零件,数量为QTY。用SQL语言完成以下操作: (1) 求供应红色零件的供应商名字; (2) 求北京供应商的号码、名字和状况(STATUS); (3) 求零件P2的总供应量;(4) 把零件P2的重量增加5公斤,颜色该为黄色。(4) 统计每个供应商供应的项目总数。 4、有 3 个关系模式如下:学生 S(S#,Sname,Age,Sex) 学习 SC(S#,C#,Score) 课程 C(C#,Cname,Credit,Teacher) 试用SQL表达下列问题:(1) 检索JIANG老师所授课程的课程号和课程名。(2) 检索年龄大于23岁的男学生的学号和姓名。(3) 检索WANG同学不学的课程的课程号。 (4) 统计每门课程的平均成绩。(5) 修改“数据库原理”的学分,改为4学分。(6) 创建一个查询学生成绩的视图VSC,VSC包括学生号(S#)、学生姓名(Sname)、课程名称(Cname)和成绩(Score)5、现有如下关系:职工(职工号,姓名,性别,职务,家庭地址,部门编号)部门(部门编号,部门名称,地址,电话)保健(保健卡编号,职工号,检查身体日期,健康状况)用SQL语句完成下列问题:(1).查找所有女科长的姓名和家庭地址;(2).统计“财务科”中健康状况为“良好”的职工人数。(3).删除“销售处”职工在职工关系中的记录;(4).将职工号为“3061”的职工的健康状况改为“一般”;(5).建立健康状况为“差”的职工的视图。

(1)select 书名 from 图书 where 定价>20

(2)select avg(定价) 均价 from 图书

(3)update 图书 set 定价=定价*95% where 出版社编号 in

(select 出版社编号 from 出版社 where 出版社名称='科学出版社' )

(4)select 书名,第一作者姓名,出版社名称 from 图书,作者,出版社,著书

where 图书.图书编号=著书.图书编号 and 著书.作者编号=作者.作者编号

and 图书.出版社编号=出版社.出版社编号

(5)create view 图书信息(图书编号,书名,出版社编号,定价)

as select 图书编号,书名,出版社名称,定价

from 图书,出版社 where 图书.出版社编号=出版社.出版社编号 and

出版社名称='人们出版社'

你的报酬表的创建肯定有错,怎么主码和外码都是职工号和工程编号。

我把上面的几个问题给你写出来了,你就模仿我写的做一下下面的问题,自己锻炼锻炼,

如果还不会的话再问我。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-29
基本都是很基础的语句,最后的区别,网上好多专门介绍这些的文章。

1. select a.userid, a.username, isnull(b.warename, '无物品') as warename
from u_user a left join u_ware b on a.userid = b.userid

2. select b.warename, isnull(a.username, '无人认领') as username
from u_user a right join u_ware b on a.userid = b.userid

3. select isnull(a.sex, '未知'), sum(b.amt) as sum_amt
from u_user a right join u_ware b on a.userid = b.userid
group by isnull(a.sex, '未知')

4. insert into u_user values ('105', '小张', '男')
重复上面三个步骤,直接使用上面三个的语句查询。

5. 1) delete from u_ware where warename = '杯子'
2) update u_ware set warename = '组合床' where warename = '床'

6. select warename, amt * 0.1 as keep_amt
from u_ware
union all
select '合计', sum(amt * 0.1) from u_ware

7. select substring(convert(varchar(10),getdate(),120),1,4) + '年' + substring(convert(varchar(10),getdate(),120),6,2) + '月' + substring(convert(varchar(10),getdate(),120),9,2) + '日'

8. 利用rand()函数,这个函数随机生成0到1的浮点数,那么一周7天,乘以7,就取出1到7之间的浮点数了。如果是一周两天,可以把一周7天分为两部分,前4天一部分,后三天一部分,那么这个随机函数乘以的乘数,就分别有两个,一个是4,一个是3.
select cast(ceiling(rand() * 4) as int) as num1, 4 + cast(ceiling(rand() * 3) as int) as num2

9. 假设某人生日是1989-12-10
select datediff(d, convert(datetime, '1989-12-10', 120), getdate())

10.
CHAR/VARCHAR:这个两个都是字符类型,不同的是,CHAR类型是定长的,而VARCHAR类型是变长的。CHAR(10)和VARCHAR(10),这样的字段存储数据,CHAR(10)的字段,长度是固定的10,而VARCHAR(10),实际长度根据数据来确定,是10只是规定了最长只能是10.

CHAR/NCHAR CHAR类型是按照字节储存,而NCHAR类型是按照字符存储。比如对于中文,CHAR(10),最多只能存储5个汉字,而NCHAR(10),最多可以 存储10个汉字。

LEN/DATALENGTH :这个看看数据库中对二者就解释就知道了。
LEN:返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。
DATALENGTH :返回任何表达式所占用的字节数。

表/视图: 数据库中的数据都是存储在表中的,而视图是基于表的数据创建出来的一个集合,视图的创建来源于表和视图,其实就是把SELECT语句查询固化了。

触发器/存储过程:
触发器是自动的:它们在对表的数据作了任何修改之后立即被激活。
存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数来执行它,存储过程并不是自动的,需要用户调用。

存储过程/函数:
函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。

LEFT JOIN/OUT JOIN

LEFT JOIN/INNER JOIN :left join是左外连接,以连接左边的表为主表,语句查询的结果,主表的结果都会显示,而右边连接的表的数据,连接条件不成立,会补空。参照上面1,2,3的语句。
inner join,是全连接,只能查询连接条件成立的所有数据。
UNION/UNION ALL:UNION ALL只实现两个查询的联合,而UNION在UNION ALL的基础上,会去掉重复数据。UNION的查询效率要低。

SUM/COUNT:而者都是聚合函数,SUM的是求和,而COUNT是求符合条件的总行数
IN/EXISTS :二者好多时候可以实现相同的结果。在语句中,IN前边应该是一个字段,后边要求是一个和前边字段或变量相同类型的数据集合,这个集合可以通过SELECT得到,而EXISTS后边是一个SELECT语句,而这个语句的WHERE条件是传入外部主查询的字段作为连接,如果连接成立,那么就是符合条件。否则不符合条件。
比如 SELECT * FROM STUDENT WHERE ID IN (SELECT ID FROM SCORE)
等同: SELECT * FROM STUDENT WHERE EXISTS (SELECT 1 FROM SCORE WHERE SCORE.ID = STUDENT.ID)
执行时,IN如果后边是查询,需要执行完查询,而EXISTS,则遇到第一个符合查询条件的结果就会自动退出查询,所以效率要高很多。
相似回答