⑴ 数据库的复杂查询
希望可以帮到你
--查询选修了“计算机体系结构”的学生的基本信息。
select *
from 学生
where 学号 in
(select 学号
from 选课
where 课程号 in
(select 课程号
from 课程
where 课程名称='计算机体系结构'))
--查询年龄比李勇小的学生的学号和成绩。
select 学号,成绩
from 选课
where 学号 in
(select 学号
from 学生
where 年龄<
(select 年龄
from 学生
where 姓名 ='李勇'))
--查询其他系中比系编号为“D1”的学生中年龄最小者要最大的学生的信息。
select *
from 学生
where 系编号<>'D1'and 年龄>
(select min (年龄)
from 学生
where 系编号='D1')
--查询其他系中比系编号为“D3”的学生年龄都大的学生的姓名。
select 姓名
from 学生
where 系编号<>'D3'and 年龄>all
(select 年龄
from 学生
where 系编号='D3')
--查询“C1”课程的成绩高于70分的学生姓名。
select 姓名
from 学生
where 学号 in
(select 学号
from 选课
where 课程号 ='C1'and 成绩>70)
--查询“C1”课程的成绩不高于70分的学生姓名。
select 姓名
from 学生
where 学号 in
(select 学号
from 选课
where 课程号 ='C1'and 成绩<=70)
--查询选修了所有课程的学生姓名。
select 姓名
from 学生
where not exists
(select *
from 课程
where not exists
(select *
from 选课
where 学生.学号=选课.学号 and 课程.课程号=选课.课程号))
--查询学校开设的课程总数。
select count(*)
from 课程
--查询选修两门以上课程的学生姓名。
select 姓名
from 学生
where 学号 in
(select 学号
from 选课 group by 学号 having count(*)>=2)
--查询开设的课程和选修该课程的学生的总成绩、平均成绩、最高成绩和最低成绩。
select 课程号,sum(成绩),avg(成绩),max(成绩),min(成绩)
from 选课 group by 课程号
--查询系编号为“D2”或选修课程的最低成绩大于等于60分的学生信息。
select *
from 学生
where 系编号='D2'
union
select *
from 学生
where 学号 in
(select 学号
from 选课 group by 学号 having min(成绩)>=60)
⑵ 复杂的数据库查询问题
sql">select
class
,sum()as'[年龄在10-20的人数]'
,sum(casewhenage>20then1else0end)as'[年龄在20以上的人数]'
,sum(casewhensex='男'then1else0end)as'[男生人数]'
from
表名
groupby
class
⑶ sql的复杂查询问题:
no,date,attendance
12 2010-10-10 Y
13 2010-11-12 N
1)
思路:先查工资大于8000,再并列查询,小于5次
2010年小于5次的
select A.no count(A.no) from Attend A where attendance group by substring(date,0,4) having count(A.no)<5
故,综上得出结论
select E.no,E.name from Employee E left join Wage W on E.no=W.no left join (select A.no count(A.no) from Attend A where attendance group by substring(date,0,4) having count(A.no)<5)A on E.no=A.no where W.amount > 8000;
2)
思路:先查工资平均数,分别查不同的日期即可
select W.amount/sum(W.amoun),A.no,A.attendance/sum(A.attendance) from Attend A left join Wage W on W.no=A.no where substring(date,0,6)='201212' group by A.no
select W.amount/sum(W.amoun),A.no,A.attendance/sum(A.attendance) from Attend A left join Wage W on W.no=A.no where substring(date,0,6)='201201' group by A.no
⑷ SQL数据库系统原理中数据查询问题,题目如下:
自定义的列名,因为你有用到函数,sum和avg是函数方法,那么用它们查询出来的结果,所显示的列名
都是
“无列名”,那么加了
as
什么什么
接在函数后面,那么显示查询结果时,这个名称就是它的列名,方便列作用的理解。
其实你只要将这条语句
分加
as...
和不加as..
到数据库里执行一遍就能看出比对结果来了
⑸ 一个复杂的mysql数据库查询,谁能解决100分
SELECT inet_ntoa(ip_src) AS ip, count(*) AS num FROM iphdr WHERE
cid in (select b.cid cid from iphdr a,event b where a.cid=b.cid and b.timestamp>=DATE_SUB(CURDATE(),INTERVAL 1 DAY))
GROUP BY ip ORDER BY num DESC LIMIT 15
⑹ 数据库 查询问题 比较复杂筛选 高手进
简单啊
首先把Equipment表的point属性设置默认为0,防止为NULL时的很多麻烦事。
1.做个人物基本属性表Basic
包含属性name Skill1 Skill1Point Skill2 Skill2Point Skill3 Skill3Point Skill3 Skill3Point Skill4 Skill4Point
比如:我的基本属性
金凝 千里眼 10 体力 10 耐力10 skill4 10 ( 不知道你的skill4是什么 ) 而且也可以把人物的skill*Point的默认值设置为默认。
2.做个人物装备表Part
包含属性name Part1 Part2 Part3 Part4 Part5(Part*默认属性为0)
比如:我的装备
金凝 头盔15 铠甲11 0 0 护腿7(这样就表示腰和手没有装备)
而头装备了头盔15 身装备了铠甲11 腿装备了护腿7
如果头盔15 铠甲11 护腿7的属性分别为:
头盔15 千里眼 5 体力 0 耐力 0 skill4 0
铠甲11 千里眼 0 体力 2 耐力 3 skill4 0
护腿7 千里眼 6 体力 5 耐力 2 skill4 0
那么人物属性就通过Part表关联起来了,这时可以做这样的计算:
金凝的装备后属性为:
当name=金凝
Skill1Point=Basic.Skill1Point+Equipment.Skill1Point Skill2Point=Basic.Skill2Point+Equipment.Skill2Point
Skill3Point=Basic.Skill3Point+Equipment.Skill3Point
Skill4Point=Basic.Skill4Point+Equipment.Skill4Point
Skill5Point=Basic.Skill5Point+Equipment.Skill5Point
这一部分可以做成一个人物装备后属性表方便显示。
⑺ SQL 单表复杂查询问题
SELECT NAame,
Case
WHEN FirstGrade = 'weikao' THEN 'weikao'
WHEN FirstGrade = 'hege' THEN 'HEGE'
WHEN FirstGrade = 'buhege' THEN SecondGrade
END AS Grade
CASE
WHEN FirstGrade = 'weikao' THEN NULL
WHEN FirstGrade = 'hege' THEN FirstTime
WHEN FirstGrade = 'buhege' AND SecondGrade = 'hege' THEN SecondTime
ELSE NULL
END AS [Time]
FROM ACHV
结构如上所示,FirstGrade为初考成绩 , SecondGrade为补考成绩 Grade为最终需求的成绩
同理,FirstTime为初考时间,SecondTime为补考时间,Time为最终需求时间。
⑻ 数据库的复杂查询
用union连接可以试试
select od.GoodsName,od.Price,od.Heavy,od.Number,od.Unit,od.TotalPrice,od.Notes,od.BatchNo,od.LotNo
from OrderDetail2 od where GoodsName in
(select GoodsName from OrderDetail2 od2 group by GoodsName having count(GoodsName)=1)
UNION
SELECT od.GoodsName,od.Price,od.Heavy,sum(od.Number) as Number,od.Unit,sum(od.TotalPrice) as TotalPrice,od.Notes,od.BatchNo,
(stuff((select ',' + LotNo from OrderDetail2 where BatchNo = od.BatchNo and GoodsName=od.GoodsName for xml path('')),1,1,'')) as lotNo
FROM OrderDetail2 od WHERE
(select count(*) from OrderDetail2 as od2 where od2.GoodsName=od.GoodsName
and od2.Price=od.Price and od2.Heavy=od.Heavy )>1
GROUP BY od.GoodsName,od.Price,od.Heavy,od.Unit,od.Notes,od.BatchNo
⑼ 数据库,SQL查询题目
--基础题
--1.查询读者最喜爱的3种图书分类号,即借阅表中出现最多的3类图书分类号
SELECT TOP 3 [分类号] FROM [图书] JOIN [借阅] ON [图书].[图书编号]=[借阅].[图书编号]
GROUP BY [分类号] ORDER BY COUNT(*) DESC
--附加题
--1.查询小于20岁的读者最喜欢的3类图书
SELECT TOP 3 [书名] FROM [读者] JOIN [借阅] ON [读者].[借书证号]=[借阅].[借书证号]
JOIN [图书] ON [图书].[图书编号]=[借阅].[图书编号]
WHERE [年龄]<20 GROUP BY [书名] ORDER BY COUNT(*) DESC
--2.查询至少借阅了 宁静 所借图书(书名相同)的人的姓名
SELECT [姓名] FROM [读者] WHERE [姓名]<>'宁静' AND [借书证号] IN(SELECT [借书证号] FROM [借阅]
WHERE [图书编号] IN(SELECT [图书编号] FROM [读者] JOIN [借阅] ON [读者].[借书证号]=[借阅].[借书证号] WHERE [姓名]='宁静'))
--3.查询借阅了多于3本书且每本书价均高于60的读者的借书证号
SELECT [借书证号]
FROM [借阅] JOIN [图书] ON [图书].[图书编号]=[借阅].[图书编号]
WHERE [单价]>60 GROUP BY [借书证号] HAVING COUNT(*)>3
GO
--4.假定读者表中所有人姓名均不多于4个汉字,请建立一个查询语句,要求根据名字中任意1个或两个或3个或4个汉字,即可找到该读者的详细信息(即完全模糊查询)
CREATE PROCEDURE CX
@XM VARCHAR(8) AS
IF LEN(@XM)=1 SELECT * FROM [读者] WHERE @XM LIKE '['+RTRIM([姓名])+']'
ELSE IF LEN(@XM)=2 SELECT * FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'
ELSE IF LEN(@XM)=3 SELECT * FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,2,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'
ELSE IF LEN(@XM)=4 SELECT * FROM [读者] WHERE LEFT(@XM,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,2,1) LIKE '['+RTRIM([姓名])+']' AND SUBSTRING(@XM,3,1) LIKE '['+RTRIM([姓名])+']' AND RIGHT(@XM,1) LIKE '['+RTRIM([姓名])+']'
GO
⑽ 一个比较复杂的sql问题,5个表联表查询,帮帮小弟
可以的,不过楼主你也给点分吧! 这么多,都不给分不厚道!
selectF.user_id,U.username
(
SELECTCOUNT(1)ASPLCOUNTFROMdiaryD
LEFTJOINdiscussPONP.key_id=D.ID
whered.user_id=F.user_id
)ASPLCOUNT,
(
SELECTCOUNT(1)ASDZCOUNTFROMdiaryD
LEFTJOINpraiseZONZ.praised_id=D.ID
whered.user_id=F.user_id
)ASplCount,
fromfriend_listF
LEFTJOINuser_idAONF.FRIEND_ID=A.user_id
LEFTJOINusernameUONU.user_id=F.user_id
WHEREA.user_id='XXXX'