SQL练习10-牛客网41-50题-更新表删除记录

401 阅读2分钟

链接:www.nowcoder.com/ta/sql?page…

41\color{red}{第41题} 构造触发器create trigger begin end
42\color{red}{第42题} 删除重复记录delete
43\color{red}{第43题} 更新表update set
45\color{red}{第45题} 修改表名alter table rename to
46\color{red}{第46题} 创建外键约束foreign key(属性1) references 表2(属性2)
49\color{red}{第49题} 针对库中的所有表生成select count(*)对应的SQL语句

  1. 构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。 CREATE TABLE employees_test(
    ID INT PRIMARY KEY NOT NULL,
    NAME TEXT NOT NULL,
    AGE INT NOT NULL,
    ADDRESS CHAR(50),
    SALARY REAL
    );

CREATE TABLE audit(
EMP_no INT NOT NULL,
NAME TEXT NOT NULL
);

create trigger audit_log after insert on employees_test
begin
    insert into audit values(new.id,new.name);
end
  1. 删除emp_no重复的记录,只保留最小的id对应的记录。 CREATE TABLE IF NOT EXISTS titles_test (
    id int(11) not null primary key,
    emp_no int(11) NOT NULL,
    title varchar(50) NOT NULL,
    from_date date NOT NULL,
    to_date date DEFAULT NULL);
delete from titles_test where id not in 
(select min(id) from titles_test group by emp_no)

43.将titles_test表内所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01。

update titles_test 
set to_date = NULL, from_date='2001-01-01'
where to_date = '9999-01-01'
  1. 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现。
update titles_test
set emp_no=replace(emp_no,10001,10005)
where id=5

45.将titles_test表名修改为titles_2017。

alter table titles_test rename to titles_2017
  1. 在audit表上创建外键约束,其emp_no对应employees_test表的主键id。(audit已经创建,需要先drop)
    CREATE TABLE employees_test(
    ID INT PRIMARY KEY NOT NULL,
    NAME TEXT NOT NULL,
    AGE INT NOT NULL,
    ADDRESS CHAR(50),
    SALARY REAL
    );

CREATE TABLE audit(
EMP_no INT NOT NULL,
create_date datetime NOT NULL
);
(注:创建表的时候,字段的顺序不要改变)

drop table audit;
create table audit(
    emp_no int not null,
    create_date datetime not null,
    foreign key(emp_no) references employees_test(ID)
)
  1. 请你写出更新语句,将所有获取奖金的员工当前的(salaries.to_date='9999-01-01')薪水增加10%。(emp_bonus里面的emp_no都是当前获奖的所有员工) create table emp_bonus(
    emp_no int not null,
    btype smallint not null);

create table salaries (
emp_no int(11) NOT NULL,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL, PRIMARY KEY (emp_no,from_date));

update salaries
set salary = salary*1.1
where emp_no in (select emp_no from emp_bonus) and to_date='9999-01-01'

49.针对库中的所有表生成select count(*)对应的SQL语句,如数据库里有以下表, (注:在 SQLite 中用 “||” 符号连接字符串,无法使用concat函数)
employees
departments
dept_emp
dept_manage
salaries
titles
emp_bonus

select 'select count(*) from' ||name||';' as cnts 
from sqlite_master where type = 'table' 
  1. 将employees表中的所有员工的last_name和first_name通过(')连接起来。(不支持concat,请用||实现)
    CREATE TABLE employees (
    emp_no int(11) NOT NULL,
    birth_date date NOT NULL,
    first_name varchar(14) NOT NULL,
    last_name varchar(16) NOT NULL,
    gender char(1) NOT NULL,
    hire_date date NOT NULL,
    PRIMARY KEY (emp_no));
select last_name||"'"||first_name as name
from employees