SQL常見的一些面試題
阿新 • • 發佈:2021-02-09
SQL常見的一些面試題
原文連結:https://www.cnblogs.com/diffrent/p/8854995.html
1.用一條SQL 語句 查詢出每門課都大於80 分的學生姓名
CREATE TABLE test1(
id int(5),
name varchar(20),
subject varchar(20),
score int(10),
primary key(id)
);
INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (1, '張三', '語文', 81); INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (2, '張三', '數學', 75); INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (3, '李四', '語文', 76); INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (4, '李四', '數學', 90); INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (5, '王五', '語文', 81); INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (6, '王五', '數學', 100); INSERT INTO `test`.`test1`(`id`, `name`, `subject`, `score`) VALUES (7, '王五', '英語', 90);
##查詢出每門課都大於80 分的學生姓名
select name,min(score) min_score from test1
group by name
having min_score>80
select distinct name from test1
where name not in
(select distinct name from test1 where score<=80)
- 學生表 如下:
CREATE TABLE student( id int(5) auto_increment , xuehao varchar(20), studentname varchar(20), subjectid varchar(20), subjectname varchar(20), score int(10), primary key(id) );
自動編號 學號 姓名 課程編號 課程名稱 分數
1 2005001 張三 0001 數學 69
2 2005002 李四 0001 數學 89
3 2005001 張三 0001 數學 69
刪除除了自動編號不同, 其他都相同的學生冗餘資訊
A: delete tablename where 自動編號 not in(select min( 自動編號) from tablename group by學號, 姓名, 課程編號, 課程名稱, 分數)
delete from student where id not in (select min(id) from student group by xuehao,studentname,subjectid,subjectname,score) 在mysql中You can't specify target table for update in FROM clause錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)。 也就是說將select出的結果再通過中間表select一遍,這樣就規避了錯誤。注意,這個問題只出現於mysql,mssql和oracle不會出現此問題。 You can't specify target table for update in FROM clause含義:不能在同一表中查詢的資料作為同一表的更新資料。 delete from student where id not in ( select a.* from ( select min(id) from student group by xuehao,studentname,subjectid,subjectname,score )a )