lsh_li 发表于 2013-2-5 02:31:16

数据库的一道面试题

创建表:
#学生表create table if not exists s(   id                        varchar(10)   primary key      not null,   name                      varchar(20)                      not null);#课程表create table if not exists c(   id                        varchar(10)   primary key      not null,   name                      varchar(20)                      not null);#SC表create table if not exists sc(sidvarchar(10)not null,cidvarchar(10)not null);#插入数据insert into s(id, name) values(1, 's1');insert into s(id, name) values(2, 's2');insert into s(id, name) values(3, 's3');insert into s(id, name) values(4, 's4');insert into s(id, name) values(5, 's5');commit;insert into c(id, name) values(6, 'c1');insert into c(id, name) values(7, 'c2');insert into c(id, name) values(8, 'c3');insert into c(id, name) values(9, 'c4');insert into c(id, name) values(10, 'c5');commit;insert into sc(sid, cid) values(1, 6);insert into sc(sid, cid) values(1, 7);insert into sc(sid, cid) values(1, 8);insert into sc(sid, cid) values(1, 9);insert into sc(sid, cid) values(1, 10);insert into sc(sid, cid) values(2, 7);insert into sc(sid, cid) values(2, 8);insert into sc(sid, cid) values(2, 9);insert into sc(sid, cid) values(2, 6);insert into sc(sid, cid) values(3, 6);insert into sc(sid, cid) values(3, 8);insert into sc(sid, cid) values(4, 9);insert into sc(sid, cid) values(5, 6);insert into sc(sid, cid) values(5, 7);insert into sc(sid, cid) values(5, 8);insert into sc(sid, cid) values(5, 9);insert into sc(sid, cid) values(5, 10);insert into sc(sid, cid) values(5, 10);commit;
表结构:
select * from s;+----+------+| id | name |+----+------+| 1| s1   || 2| s2   || 3| s3   || 4| s4   || 5| s5   |+----+------+select * from c;+----+------+| id | name |+----+------+| 10 | c5   || 6| c1   || 7| c2   || 8| c3   || 9| c4   |+----+------+mysql> select * from sc;+-----+-----+| sid | cid |+-----+-----+| 1   | 6   || 1   | 7   || 1   | 8   || 1   | 9   || 1   | 10|| 2   | 7   || 2   | 8   || 2   | 9   || 2   | 6   || 3   | 6   || 3   | 8   || 4   | 9   || 5   | 6   || 5   | 7   || 5   | 8   || 5   | 9   || 5   | 10|| 5   | 10|+-----+-----+
#更新数据:update s set id=5 limit 1;update s set id=5 where name = c1;
#删除数据:#MySQL允许使用delete和truncate语句删除数据delete from s where id = 5;delete from s where id in (4, 5);
问题及答案:
#求选择了所有课程的学生select * from s where(select count(*) from sc where sc.sid = s.id) = (select count(*) from c);#求选择了3门以上课程的学生select * from s where(select count(*) from sc where sc.sid = s.id) > 3;#求所有学生的所有课程select s.name, c.name from sc join s on(s.id = sc.sid) join c on(c.id = sc.cid);select s.name, c.name from s, c, sc where s.id = sc.sid and c.id = sc.cid;
页: [1]
查看完整版本: 数据库的一道面试题