面试题_sql

-- sql面试题

-- 1.用一条SQL语句 查询出每门课都大于80分的学生姓名

-- table:t_fenshu
-- name   kecheng   fenshu
-- 张三    语文       81
-- 张三     数学       75
-- 李四     语文       76
-- 李四     数学       90
-- 王五     语文       81
-- 王五     数学       100
-- 王五     英语       90

-- 答案
SELECT DISTINCT name FROM t_fenshu
WHERE name NOT IN (SELECT DISTINCT name FROM t_fenshu WHERE fenshu <= 80);
-- 答案2
SELECT name FROM t_fenshu
GROUP BY name HAVING MIN(fenshu) > 80;



-- 2. 删除除了id不同,其它字段值相同的冗余学生信息

-- table:t_student
-- id  stu_id      name    course_id   course_name     score
-- 1   2005001     张三    0001        数学            69
-- 2   2005002     李四    0001        数学            89
-- 3   2005001     张三    0001        数学            69

-- 答案
DELETE t_student
WHERE id NOT IN (SELECT MIN(id) FROM t_student GROUP BY stu_id,name,course_id,course_name,score);



-- 3. abcd代表四支球队,写sql找出进行比赛的所有组合方式

-- table:t_team
-- name
-- a
-- b
-- c
-- d

-- 答案
SELECT t1.name, t2.name
FROM t_team t1,t_team t2
WHERE t1.name < t2.name;



-- 4.查下面的表,查出结果如下:
-- year m1   m2   m3   m4
-- 1991 1.1 1.2 1.3 1.4
-- 1992 2.1 2.2 2.3 2.4 

-- table:t_amount
-- 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

-- 答案:
SELECT year,
(SELECT amount FROM t_amount t1 WHERE month = 1 AND t1.year = t2.year) AS m1,
(SELECT amount FROM t_amount t1 WHERE month = 2 AND t1.year = t2.year) AS m2,
(SELECT amount FROM t_amount t1 WHERE month = 3 AND t1.year = t2.year) AS m3,
(SELECT amount FROM t_amount t1 WHERE month = 4 AND t1.year = t2.year) AS m4
FROM t_amount t2 GROUP BY year;



-- 5.exist关键字:https://segmentfault.com/a/1190000008709410

  

猜你喜欢

转载自www.cnblogs.com/mexding/p/9133457.html