INSERT INTO @G SELECT 1,1,1000
UNION ALL SELECT 2,1,1000 UNION ALL SELECT 3,1,800 UNION ALL SELECT 4,2,2000 -- 1
SELECT * FROM @G G
WHERE NOT EXISTS(SELECT 1 FROM @G WHERE GROUPS=G.GROUPS AND SALARY>G.SALARY)
SELECT G.* FROM @G G INNER JOIN (
SELECT GROUPS,MAX(SALARY) AS SALARY FROM @G
GROUP BY GROUPS )T
ON G.GROUPS=T.GROUPS AND G.SALARY=T.SALARY
select * from 工资表 as a where a.工资=(select max(b.工资) from 工资表 as b where a.部门编号=b.部门编号) -- 2
SELECT MIN(G.ID),G.GROUPS,G.SALARY FROM @G G INNER JOIN (
SELECT GROUPS,MAX(SALARY) AS SALARY FROM @G
GROUP BY GROUPS )T
ON G.GROUPS=T.GROUPS AND G.SALARY=T.SALARY GROUP BY G.GROUPS,G.SALARY
select * from 工资表 as a where a.工资=(select max(b.工资) from 工资表 as b where a.部门编号=b.部门编号) and
a.员工编号=(select max(c.员工编号) from 工资表 as c where a.部门编号=c.部门编号)
select min(员工编号)as 员工编号,部门编号,工资 from 工资表 as a where a.工资=(select max(b.工资) from 工资表 as b where a.部门编号=b.部门编号)group by 部门编号,工资
一定有更好的方法,请不吝赐教。
SQL面试题 (一)
有一个张员工工资表(SALARY),表有三列:员工编号(ID),工资(SALARY) 1.查询id重复记录
select * from 工资表 as a where ((select count(*) from 工资表 as b where a.员工编号=b.员工编号)>1)
SELECT * FROM 工资表
WHERE 员工编号 IN (
SELECT 员工编号 FROM 工资表
GROUP BY 员工编号 HAVING COUNT(*)>1 )
2.删除id重复记录,只保留第一条(说明,不需要考虑表中存在完全相同纪录的情况) SQL语句如下:
CREATE TABLE SALARY( ID INT NOT NULL,
SALARY MONEY NOT NULL )
INSERT INTO SALARY SELECT 1,1000
UNION ALL SELECT 1,800 UNION ALL SELECT 2,1200 UNION ALL SELECT 3,1100 UNION ALL SELECT 3,1200 UNION ALL SELECT 3,1300 SELECT * FROM SALARY -- 1
SELECT *
FROM SALARY WHERE ID IN (
SELECT ID FROM SALARY GROUP BY ID
HAVING COUNT(*)>1 ) -- 2
DELETE T
FROM SALARY T
WHERE EXISTS(SELECT 1 FROM SALARY WHERE T.ID=ID AND SALARY>T.SALARY)
四、设计题(本大题共2小题,每小题10分,共20分)
2、学生表:Student 学生表 (学号,姓名,性别,年龄,组织部门) Course 课程表 (编号,课程名称)
Sc 选课表 (学号,课程编号,成绩)
表结构如下:
(1).写一个SQL语句,查询选修了’计算机原理’的学生学号和姓名 (2).写一个SQL语句,查询’周星驰’同学选修了的课程名字 (3).写一个SQL语句,查询选修了5门课程的学生学号和姓名 select sno,sname from student where sno in (
select sno from sc
where cno = (
select cno from course
where cname='计算机原理' ) ) (2)
select cname from course where cno in (
select cno from sc
where sno = (
select sno from student
where sname='周星驰' )
) (3)
select sno,sname From student Where sno in (
select sno from sc
group by sno having count(sno)=5 )
(1)一道凊华同方的SQL面试题 已知一个表的结构为: 姓名 科目 成绩 张三 语文 20 张三 数学 30 张三 英语 50 李四 语文 70
李四 数学 60 李四 英语 90
怎样通过select语句把他变成以下结构: 姓名 语文 数学 英语 张三 20 30 50 李四 70 60 90
在Mysql上测试通过: use test;
drop table if exists studentscore;
create table studentscore (id int auto_increment primary key,姓名 varchar (20),科目 varchar (20),成绩 varchar (20) ) default charset=utf8;
INSERT INTO studentscore (id, 姓名, 科目, 成绩) VALUES
(1, \张三\语文\INSERT INTO studentscore (id, 姓名, 科目, 成绩) VALUES
(2, \张三\数学\INSERT INTO studentscore (id, 姓名, 科目, 成绩) VALUES
(3, \张三\英语\INSERT INTO studentscore (id, 姓名, 科目, 成绩) VALUES
(4, \李四\语文\INSERT INTO studentscore (id, 姓名, 科目, 成绩) VALUES
(5, \李四\数学\INSERT INTO studentscore (id, 姓名, 科目, 成绩) VALUES
(6, \李四\英语\
create view teststudent as
select A.姓名,A.成绩 as 语文,B.成绩 as 数学,C.成绩 as 英语 from studentscore A,studentscore B,studentscore C where A.姓名=B.姓名 and B.姓名=C.姓名 and A.科目='语文' and B.科目='数学' and C.科目='英语'; (2)
金蝶的一道SQL笔试题,上个周六的时候去金蝶面试,出了这样一道SQL题,共享之
给下面这样的一个表记录:
------------------------------------ 购物人 商品名称 数量 A 甲 2 B 乙 4 C 丙 1 A 丁 2 B 丙 5
给出所有购入商品为两种或两种以上的购物人记录
use test;
drop table if exists product;
create table product ( id int auto_increment primary key, 购物人 varchar (20), 商品名称 varchar (20), 数量 varchar (20) );
insert into product (id, 购物人, 商品名称, 数量) values (1,' A','甲','2'); insert into product (id, 购物人, 商品名称, 数量) values (2,' B','乙','4'); insert into product (id, 购物人, 商品名称, 数量) values (3,' C','丙','1'); insert into product (id, 购物人, 商品名称, 数量) values (4,' A','丁','2'); insert into product (id, 购物人, 商品名称, 数量) values (5,' B','丙','5');
select * from product group by 购物人 having count(商品名称)>=2;错误,因为结果是这样的:
A 甲 2 B 乙 4
select * from product where 购物人 in (select 购物人 from product group by 购物人 having count(商品名称)>=2) 正确 A 甲 2 B 乙 4 A 丁 2 B 丙 5
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库SQL数据库试题(笔试题)(5)在线全文阅读。
相关推荐: