SQL数据库 请高手解答一下问题 实在不会做。本人初学者

作者&投稿:侯卷 (若有异议请与网页底部的电邮联系)
刚学数据库,遇到一道关于数据库sql语句的题目,实在不会,请高手帮忙解答一下,谢谢!~

1. select * from EMPLOYEE where Salary>(select avg(Salary) from EMPLOYEE group by Dnumber)
2. select * from EMPLOYEE where ESSN in (select ESSN from WORKS_ON group by Pnumber,ESSN having Count(1)>=3)
3. -- 每个部门的所有职工在每个项目中的工作总时数
Create View DeptPro
AS
select Pnumber, Dnumber, Dname, sum(Hours) Hours from (
select A.Pnumber, A.Hours, C.Dnumber, C.Dname
from WORKS_ON A
Inner join EMPLOYEE B on A.ESSN=B.ESSN
Inner join DEPARTMENT C on B.Dnumber=C.Dnumber
) Tbl group by Pnumber,Dnumber,Dname

--工作时数最多的部门名称。
select Max(Hours) Hours, Dnumber, Dname from DeptPro
where Pnumber in (select Pnumber from PROJECT where Pname='Middleware')
group by Dnumber, Dname

use XSselect * from xsda order by 姓名 desc,学号 ascselect top 50 percent * from xscj

基本都是很基础的语句,最后的区别,网上好多专门介绍这些的文章。

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,则遇到第一个符合查询条件的结果就会自动退出查询,所以效率要高很多。

早就毕业了?
不是软件开发专业?

这些题确实很简单,即便是我这种新手也会做,但是就像一楼的兄弟说的那样,在百度知道这个地方,专业性越强的分类,越不可能认真回答伸手党的问题。
而如果你写上自己的一部分代码或想法,有不懂的地方,会有很多热心人的。

虽然知道答案但我决定不告诉你,这个是学校的题目吧,认真想想,应该会做出来.
学会自己钻研,或者你给出你的答案大家帮你参考解决错误,这到是可以的.
加油吧.

很简单的数据库的题,搞软件的给你出题那你也应该是学软件的,学软件数据库是很主要的,买本数据库基础的书好好学习吧。


安塞县19560837883: sql数据库问题,请高手帮着分析一下... -
桑哲广迪: 首先你要保证授权的数据库是,授权对象的所有者 这里给出如下可能的错误分析:1、 s_t.student中的点表示引用的话 ,s_t就因该是一个数据库,那么授权数据库必须是s_t,这中情况下是不需要指明表的出处,直接用格式 on student ,连table 都是可以省掉的2、 如果 s_t.student是表的名字的话则,表格命名错误,名字里面不应该出现点;因为它在sql语言里有特殊的含义,表示引用.给表格重新命名,一般像这样的名字在创建表格是语句是不通过的 先做这样的调整看看

安塞县19560837883: 求高手解答SQL数据库题目 -
桑哲广迪: create database Student;create table ClassInfo(classNo varchar(20) primary key,className varchar(20));create table DepartInfo(deptno varchar(10) primary key,deptName varchar20...

安塞县19560837883: SQL问题答案 高手帮忙 -
桑哲广迪: 要看你用的是什么数据库mysql:concat()oracle: concat(),||sql server:+concat()语法如下:concat(字符串1,字符串2,....)将字符串1,字符串2,等字符串连接在一起.但是oracle的concat()只允...

安塞县19560837883: sql 的一个问题 请高手解答
桑哲广迪: select * from Mytbl where 编号 in (select max(编号) from Mytbl group by 姓名) order by 编号

安塞县19560837883: 求高人解答一个sql的问题
桑哲广迪: 你可能忘了密码了,用混合模式登录试试.如下图:连接MSSQL数据库主要有两种模式: 1.在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server 操作步骤: 在企业管理器中 --右键你的服务器实例(就是那个...

安塞县19560837883: 关于sql的问题.请高手解答. -
桑哲广迪: 首先,可能是安装盘的问题,这个最好先确认ok,否则很闹心.其次,实例没有卸载干净,这个,手动删除一下注册表和磁盘残留,可能会ok最后,实例就是没法弄干净,也是可以的,在安装过程中,选择自定义,然后使用一个非默认的实例名,只要安装盘没问题,一般都可以成功

安塞县19560837883: 关于SQL 问题 求高手解答 -
桑哲广迪: 电脑没有安装数据库, 基本明白你的意思, 有一种比较简单性能不太好的存储过程方法:1)创建零时表(内存)一一对应,2)把磁盘数据库的表Union 一下select 一下order by name ,目的是让相识的数据排在一起.3)用数据库的CURSOR游标来一行一行的走,每一行赋值,然后对比除了不关注两列的其他的列的值是否一致.如果一致,那么需要找出T2中的AMOUNT值为多少.然后在零时表中修改这条记录.4) SELECT一下零时表,这种操作方式基本上是按照程序逻辑来跑的,采用数据库的方式的也能做到,但是比较生疏了,

安塞县19560837883: sql数据库的问题请大家帮帮忙 -
桑哲广迪: 你吧服务器地址,改成这些测试一下127.0.0.1或者localhost或者(local)有时候就是这个在作怪,应该就是127.0.0.1这个不行,换成其他的就行了...

安塞县19560837883: 数据库SQL的问题,请各位帮帮忙!! -
桑哲广迪: 违反了主键约束,主键不能插入重复值 你看看要导入的数据是不是出现重复了,或要导入的数据中与表中已存在的数据重复了 必须去除重复才能插入 ------------ 也就是说最关键的那些列中的数据出现重复数值啦,所以导入失败,如果你安装的那个软件是商业软件,建议你联系该软件的维护员

安塞县19560837883: SQL数据库有关问题(判断正误)求高手解答 -
桑哲广迪: 1、对,主键是候选码的一种,能唯一标识一行记录的被称为候选码,所以对2、错,候选码可以说多个字段的组合,但是必须保证候选码的任一真子集都不能唯一标志一条记录,否则就不是候选码了.3、对,默认下,order by 后面跟的是asc 及升序,降序使用desc4、对,数据库文件扩展名有mdf,ldf,ndf;mdf是主文件,ldf是日志文件,ndf是次文件5、对,索引是为了提高数据读取效率,和表,触发器,过程等一样是数据库对象6、对,tempdb 中的操作是最小日志记录操作.这将使事务产生回滚.每次启动 SQL Server 时都会重新创建 tempdb,从而在系统启动时总是保持一个干净的数据库副本

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网