1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名
-
name kecheng fenshu
-
张三 语文 81
-
张三 数学 75
-
李四 语文 76
-
李四 数学 90
-
王五 语文 81
-
王五 数学 100
-
王五 英语 90
SELECT NAME,class,fenshu FROM score
WHERE NAME NOT IN (SELECT NAME FROM score WHERE fenshu <= 80);
2.学生表 如下:
- 自动编号 学号 姓名 课程编号 课程名称 分数
- 1 2005001 张三 0001 数学 69
- 2 2005002 李四 0001 数学 89
- 3 2005001 张三 0001 数学 69
删除除了自动编号不同, 其他都相同的学生冗余信息
DELETE FROM score1 WHERE id NOT IN
(SELECT id FROM (SELECT MIN(id) AS id FROM score1
GROUP BY stu_id,NAME,class_id,class,fenshu)a);
3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.
SELECT a.name, b.name
FROM team a, team b
WHERE a.name < b.name
ORDER BY a.name
4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。
AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。
数据库名:JcyAudit ,数据集:Select * from TestDB
select accID from
(
select a.* from account a,
(select occMonth,debitOccur from account where accID=‘101’) b
where a.occMonth=b.occMonth and a.debitOccur>b.debitOccur
) c
group by accID having count(occMonth)=12;
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 test1 t WHERE MONTH = 1 AND t.year=test1.year) AS m1,
(SELECT amount FROM test1 t WHERE MONTH = 2 AND t.year=test1.year) AS m2,
(SELECT amount FROM test1 t WHERE MONTH = 3 AND t.year=test1.year) AS m3,
(SELECT amount FROM test1 t WHERE MONTH = 4 AND t.year=test1.year) AS m4
FROM test1 GROUP BY YEAR
6.给表添加id字段作为索引放在第一列,并设置为自动增长
ALTER TABLE test2
ADD id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;
7.原表:
- id name score
- 1 java 70
- 2 oracle 90
- 3 xml 40
- 4 jsp 30
- 5 servlet 80
为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):
-
id name score mark
-
1 java 70 pass
-
2 oracle 90 pass
-
3 xml 40 fail
-
4 jsp 30 fail
-
5 servlet 80 pass
SELECT id,NAME,score,(CASE SIGN(score-60)
WHEN -1 THEN “fail”
ELSE “pass” END) AS mark FROM test2;