#数据库SQL实战#【Day10】
--------------------------------------------------
学习用,欢迎讨论。
--------------------------------------------------
查看详细题目的方法:
复制以下题目内容;
Ctrl+F查找刚刚复制的题目即可。
--------------------------------------------------
题目42:删除emp_no重复的记录,只保留最小的id对应的记录
delete from titles_test where id not in (select min(id) from titles_test group by emp_no)
本题主要考查delete语句,有很多方法,上述是比较简单的一种。
key word: delete [http://www.runoob.com/sqlite/sqlite-delete.html]
--------------------------------------------------
题目43:将所有to_date为9999-01-01的全部更新为NULL,且
update titles_test set to_date = null, from_date = '2001-01-01' where to_date = '9999-01-01'
key word: update [http://www.runoob.com/sqlite/sqlite-update.html]
--------------------------------------------------
题目44:将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现。
insert or replace into titles_test select id, 10005, title, from_date, to_date from titles_test where id = 5
和题目35对应,题目35考查的是“insert or ignore”,此处考查的是“insert or replace”。前者是插入记录或者忽略与表内unique字段都相同的记录,后者是插入记录或者替代与表内unique字段都相同的记录。
当然也可以如下书写:
insert or replace into titles_test values(5, 10005, 'Senior Engineer', '1986-06-26', '9999-01-01')
其他没有使用“replace”的语句也能通过测试,但是不符合题目要求,不再列出。
-------------------------------------------------- 题目45:将titles_test表名修改为titles_2017
alter table titles_test rename to titles_2017
和题目40一样,考查alter table。
--------------------------------------------------
题目46:在audit表上创建外键约束,其emp_no对应employees_test表的主键id
drop table audit; create table audit( EMP_no int not null, create_date datetime not null, foreign key(EMP_no) references employees_test(ID));
SQLite不能直接创建外键,只能删除表,然后在重新创建表的时候添加外键。
--------------------------------------------------
题目47:如何获取emp_v和employees有相同的数据no
select * from emp_v
由视图的定义,可以直接由上述语句通过测试。
其他还有通过inner join或者intersect的方法,前面都已经考查过,本题还是注重于对视图的理解。[http://www.runoob.com/sqlite/sqlite-view.html]
--------------------------------------------------
题目48:将所有获取奖金的员工当前的薪水增加10%
update salaries set salary = salary * 1.1 where emp_no in ( select s.emp_no from salaries as s inner join emp_bonus as eb on s.emp_no = eb.emp_no ) and to_date = '9999-01-01'
按照题目意思直接可以得到上述代码。
--------------------------------------------------