SQL常见的⼀些⾯试题(太有⽤啦)
SQL常见⾯试题
1.⽤⼀条SQL 语句 查询出每门课都⼤于80 分的学⽣姓名
name kecheng fenshu
张三 语⽂ 81
张三 数学 75
李四 语⽂ 76
李四 数学 90
王五 语⽂ 81
王五 数学 100
王五 英语 90
A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)
select name from table group by name having min(fenshu)>80
2. 学⽣表 如下:
html5特点⾃动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
删除除了⾃动编号不同, 其他都相同的学⽣冗余信息
A: delete tablename where ⾃动编号 not in(select min( ⾃动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)
3.⼀个叫 team 的表,⾥⾯只有⼀个字段name, ⼀共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在
四个球对进⾏⽐赛,⽤⼀条sql 语句显⽰所有可能的⽐赛组合.
你先按你⾃⼰的想法做⼀下,看结果有我的这个简单吗?
答:select a.name, b.name
from team a, team b
where a.name < b.name
4.请⽤SQL 语句实现:从TestDB 数据表中查询出所有⽉份的发⽣额都⽐101 科⽬相应⽉份的发⽣额⾼的科⽬。请注意:TestDB 中有很多科⽬,都有1 -12 ⽉份的发⽣额。
AccID :科⽬代码,Occmonth :发⽣额⽉份,DebitOccur :发⽣额。
名:JcyAudit ,数据集:Select * from TestDB
答:select a.*
from TestDB a
,
(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b
下拉框怎么设置内容where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur
************************************************************************************
5.⾯试题:怎么把这样⼀个表⼉
year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样⼀个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
什么叫同步传输和异步传输答案⼀、
select year,
(select amount from aaa m where month=1 ar) as m1,
(select amount from aaa m where month=2 ar) as m2,
(select amount from aaa m where month=3 ar) as m3,
(select amount from aaa m where month=4 ar) as m4
from aaa group by year
*******************************************************************************
6. 说明:复制表( 只复制结构, 源表名:a新表名:b)
SQL: select * into b from a where 1<>1 (where1=1,拷贝表结构和数据内容)
:create table b
As
Select * from a where 1=2
[<>(不等于)(SQL Server Compact)
⽐较两个表达式。 当使⽤此运算符⽐较⾮空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。 否则,结果为 FALSE。]
7. 说明:拷贝表( 拷贝数据, 源表名:a⽬标表名:b)
SQL: insert into b(a, b, c) select d,e,f from a;
8. 说明:显⽰⽂章、提交⼈和最后回复时间
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b 9. 说明:外连接查询( 表名1 :a表名2 :b)
mysql语句的执行顺序SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.c
ORACLE:select a.a, a.b, a.c, b.c, b.d, b.f from a ,b
where a.a = b.c(+)
10. 说明:⽇程安排提前五分钟提醒
SQL: select * from ⽇程安排 where datediff('minute',f 开始时间,getdate())>5
11. 说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
Delete from info where not exists (select * from infobz where info.infid=infobz.infid )
*******************************************************************************
12.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value
这道题的SQL 语句怎么写?
update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key); ***************************************************************************
13.⾼级sql ⾯试题
原表:
courseid coursename score
-------------------------------------
1 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80
-------------------------------------
为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):
courseid coursename score mark
---------------------------------------------------
1 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass
---------------------------------------------------
写出此查询语句
select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course
完全正确
SQL> desc course_v
Name Null? Type
----------------------------------------- -------- ----------------------------
COURSEID NUMBER
COURSENAME VARCHAR2(10)
SCORE NUMBER
SQL> select * from course_v;
COURSEID COURSENAME SCORE
---------- ---------- ----------
1 java 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80
SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v;
COURSEID COURSENAME SCORE MARK
---------- ---------- ---------- ----
1 java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass
SQL⾯试题(1)
create table testtable1
(
id int IDENTITY,
department varchar(12)
)
select * from testtable1
insert into testtable1 values('设计')
insert into testtable1 values('市场')
insert into testtable1 values('售后')
/*
结果
id department
1 设计
2 市场
3 售后
*/
create table testtable2
(
id int IDENTITY,
dptID int,
name varchar(12)
)
insert into testtable2 values(1,'张三')
insert into testtable2 values(1,'李四')
insert into testtable2 values(2,'王五')
insert into testtable2 values(3,'彭六')
insert into testtable2 values(4,'陈七')
/
*
⽤⼀条SQL语句,怎么显⽰如下结果
id dptID department name
1 1 设计 张三
2 1 设计 李四
3 2 市场 王五
4 3 售后 彭六
5 4 ⿊⼈ 陈七
*/
答案:
inshot软件SELECT testtable2.* , ISNULL(department,'⿊⼈')
FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID
也做出来了可⽐这⽅法稍复杂。电商系统源码的服务哪里好
sql⾯试题(2)
有表A,结构如下:
A: p_ID p_Num s_id
1 10 01
1 1
2 02
2 8 01
3 11 01
3 8 03
其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请⽤SQL语句实现将上表中的数据合并,合并后的数据为:
p_ID s1_id s2_id s3_id
1 10 1
2 0
2 8 0 0
3 11 0 8
其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中⽆库存量,那么就是0代替。结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论