Ⅰ sql语句面试题
SELECT*,
(SELECTCOUNT(*)FROM(SELECTCOUNT(*),b.sidFROMscbLEFTJOINcoursecONb.Cid=c.CidGROUPBYb.sid,c.tid)owWHEREow.sid=a.sid)as'
选课数量',
(SELECTsum(Score)FROMScdWHEREa.sid=d.sid)as'总成绩'
FROMstudenta
;
SELECTd.sid,d.snamefromteachera
LEFTJOINcoursebona.tid=b.tid
LEFTJOINscconc.cid=b.cid
leftJOINstudentdONd.sid=c.sid
WHEREa.tname='叶萍';
SELECTsid,sname
FROMstudent
WHEREsidin(selecta.sid
FROMscAleftjoinscbona.sid=b.sid
WHEREa.cid=1andb.cid=2anda.score>b.score)
SELECTsc.Sid,sum(CASEWHENc.Cname='
数学'thensc.Scoreelse0end)数学,SUM(casewhenc.Cname='物理
'THENsc.ScoreELSE0END)物理,AVG(sc.Score)平均分
FROMsc
INNERJOINCourseconsc.Cid=c.Cid
WHEREc.Cnamein('数学','物理')
GROUPBYsc.Sid
ORDERBYAVG(sc.Score)DESC
insertintoSc(Sid,Cid,Score)values(003,3,85);
insertintoSc(Sid,Cid,Score)values(003,3,30);
首先这个不知道是你i写错了还是怎么一个人化学成绩有2个所以我在这里按照你这个上做的查询所以有一个人是选了单个课程
Ⅱ 求sql常考面试题
排序顺序会影响系统性能吗?
问:一些资料介绍说,在SQL Server 6.5中,排序方式会对系统性能造成影响,但是我并没有发现有针对SQL Server 2000或SQL Server 7.0的类似说法。我想知道二分法检索对SQL Server 2000程序到底有何意义。SQL Server 2000所支持的各种排序方式之间在执行性能上存在哪些差异呢?
答:请记住:各类排序方式间的性能差异受制于SQL Server在数据排序和数据比较上所花费的CPU周期数量。排序速度快并不代表性能就一定会得到改善。事实上,选择较为“快速”的排序方法(例如二分法)可能会导致应用程序在其它方面的性能降低。
例如,假设您有一个查询,该查询通过last_name字段进行搜索。二分法排序的规则规定:Smith 并不等于smith。您的应用程序开发人员可以通过要求所有数菥笮葱问交蛐⌒葱问嚼词迪终飧鲆滴衤呒5牵导实慕饩霭旆ㄊ嵌运阉鞅碇械乃惺菔褂肬PPER() 或者 LOWER() 函数。但不幸的是, 如果类似UPPER()这样的函数对一个经过索引的列进行了操作,SQL Server将不再能够使用索引搜索数据。在这种情况下,通过使用二分法所获得的所有性能提升都将被花费在全表扫描上的巨大性能降低所抵消。所以,您无需考虑不同排序方法间可能存在的微小性能差异,您也无需费神考虑何种排序方法最能满足程序开发人员和最终用户的需要。
— SQL Server MVPs
--------------------------------------------------------------------------
日志文件的增长和DBCC DBREINDEX
问:我有一个30GB的数据库,我使用完全恢复模式。无论什么时候,只要我使用数据库一致性检查程序(DBCC)语句DBCC DBREINDEX对特定的大型数据表进行重新索引,我都要将恢复模式改为Bulk_Logged,在重新索引过程完成后再改回完全模式。我希望这样做能够避免事务日志文件急剧增长,但是随后的日志文件备份工作量却非常大--有大约15GB。从逻辑上说,数据库中的数据在重新索引后同原先并没有什么不同,只是索引重新进行了组织,那么为什么日志文件还是那样大呢?我怎样才能避免日志文件出现这样的急剧增长呢?
答:是的,在重新索引前后的数据是完全一样的,但是索引却全面进行了更新。当您执行DBCC DBREINDEX命令的时候,SQL Server的日志仅仅记录了扩展盘区的分配情况(8页面单位),而不是记录了每一行或者每一页所发生的变化。这种类型的日志记录方式避免了物理文件由于系统故障而遭到破坏,并且将更详细的日志记录对系统吞吐量产生的影响降低到最小。
当您备份日志文件的时候,SQL Server必须对分配在扩展盘区中的页面进行备份,以便保持数据库备份和日志备份的一致性。如果SQL Server不备份这些页面,您将不能够切换回完全恢复模式,除非你进行一次完整的数据库备份。您必须能够从最近一次的完全备份、任何差异备份以及任何更新的事务日志备份中对数据库进行恢复。
——————————————————————————————————————————
再者,看你面试什么方面的啦!
要是DBA的话,层次更高一些!
Ⅲ sql语句的面试题目
select (sum(id)+sum(no)) from table1
Ⅳ sql面试题
1.
select
s.title,
count(p.id)
from
书表
s
left
join
评论
p
on
s.id=p.书表中的id
group
by
s.title
(注意:左外连接的作用是将评价数为0的书显示出来.count(p.id)和count(*)的区别是count(p.id)不计入p.id为null的行)
2.
select
top
1
s.title,
count(p.id)
from
书表
s
left
join
评论
p
on
s.id=p.书表中的id
group
by
s.title
order
by
2
desc
(以第2列倒序排序,取第1行)
Ⅳ 当面试官问你你有任何的sql的经验的时候我该怎么回答。我之前上过这个课
这个基本都是问项目经验,你就编一个项目,说一个类似的写sql的经验就可以。从什么表抽数或怎么抽数的,怎么运算的,然后怎么得到结果的,不过说的时候可以有所保留,实在说不明白的地方就说是上家公司的一些特定的人做的。这个一般讲课的时候老师会讲一两个只要记住就可以了。当然别把自己绕进去,因为如果真的没做过,而面试官还比较了解,那么很容易看出来的。
当然前提是会写sql语句,知道基本写法,而且至少要了解部分常用函数,分组,排序,子查询,以及表关联方式,如果这些都不知道,那么还是不要说比较好,容易漏。
Ⅵ sql查询面试题
这个问题我是这样想的:
由于找的是ID,所以首先是SELECT ID FROM table_name
要找有多条记录的ID,所以条件是COUNT(ID)>1
这样找出来的会有重复ID,然后再根据ID分组就可以了
完整的语句就是:
SELECT ID
FROM table_name
WHERE COUNT(ID)>1
GROUP BY ID
对这个题我有这么两点总结:
1 平时我们一说ID,一般就是指的主键列,可这个题不是,ID列只是一个普通列,或者是一个外键而已。
2 由于要找的ID有多条记录,如果不分组找出来的就会有重复,这样就跟题目有些不符,所以要有分组
Ⅶ 面试sql语句怎么写
1.update qr_user_info set score=score+50 where level=3
2.delete from qr_user_info where level is null
3.select a.* from qr_order_info a,qr_user_info b where a.user_id=b.id and b.name='张三'
4.select b.name,sum(a.total_amount) 总金额 from qr_order_info a,qr_user_info b where a.user_id=b.id and create_date=curdate() group by b.name
Ⅷ SQL面试题
select name
from
(
select name,sum(score) sc
from 表
group by name
) t1
where t1.sc>200
这样?
Ⅸ SQL 面试题
SELECT aa.日期, aa.数值, SUM(lj.数值) AS 累计
FROM 累积 lj INNER JOIN
(SELECT *
FROM 累积) aa ON lj.日期 <= aa.日期
WHERE (aa.日期 <= '2005-05-04') --日期可以变成时间段
GROUP BY aa.日期, aa.数值
ORDER BY aa.日期
Ⅹ sql语句 面试题
A.创建表格CODE省略
注明:学生表PK stu_id 课程表pk cos_id 分数表PK enrollment_id FK stu_id,cos_id
B.插入数据code省略
C.Query
select s.stu_id,stu_name,count(cos_id) from student s,enrollments e where s.stu_id = e.stu_id and e.grade>60 group by s.stu_id,stu_name;
select e.stu_id,s.stu_name,c.cos_name from student s,enrollments e,course c
where s.stu_id = e.stu_id
and e.cos_id = c.cos_id
and c.cos_name = 'CHINESE'
and s.stu_name like 'W%';
select stu_id,stu_name from (select e.stu_id,stu_name,cos_name from enrollments e,student s,course c
where s.stu_id = e.stu_id
and e.cos_id = c.cos_id
and c.cos_name IN ('CHINESE','MUSIC'))
group by stu_id,stu_name
having count(cos_name) = 2
select distinct e.cos_id,c.cos_name,count(e.stu_id) stu_count,count(e.stu_id)-NVL(A.FAIL,0) upscore,(count(e.stu_id)-NVL(A.FAIL,0))/count(e.stu_id) rate from
(select cos_id,count(stu_id) fail from enrollments where grade<60 group by cos_id) a,enrollments e,course c
where e.cos_id = a.cos_id(+)
and e.cos_id = c.cos_id
group by e.cos_id,NVL(a.fail,0),c.cos_name;
update student
set avg_grade =(select avg(grade) X from enrollments group by stu_id
having student.stu_id = enrollments.stu_id);
select stu_id,avg(grade) from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)
group by stu_id
having count(*)<=2
UNION
select A.stu_id,avg(A.grade)from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments) A,
(select stu_id,count(*) c from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)
group by stu_id) B
where A.stu_id = B.stu_id
and A.x>1 and x<B.c
group by A.stu_id,b.c
_________________________________________________
环境:oracle 10g/TOAD 以上代码均通过测试,如有问题,请联系,谢谢