美文网首页数据分析学习笔记
练习SQL利器,牛客网SQL实战题库,41~48题

练习SQL利器,牛客网SQL实战题库,41~48题

作者: 今天有觉悟1 | 来源:发表于2019-03-28 15:40 被阅读1次

    41.构造一个触发器audit_log

    CREATE TRIGGER audit_log AFTER INSERT
    ON employees_test FOR EACH ROW
    BEGIN
        INSERT INTO audit VALUES(NEW.ID,NEW.NAME);
    END;
    

    42.删除emp_no重复的记录,只保留最小的id对应的记录

    DELETE FROM titles_test
    WHERE id NOT IN (SELECT MIN(id) FROM titles_test)
    

    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'
    

    44.将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005

    UPDATE titles_test 
    SET emp_no = REPLACE(emp_no,10001,10005)
    WHERE id = 5
    

    注:

    Sqlite数据库字符串处理函数replace

    replace(X,Y,Z) ,x:要处理的字符串,y:被替换的字符串,z:替换后的字符串

    45.将titles_test表名修改为titles_2017

    ALTER TABLE titles_test RENAME TO titles_2017
    

    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));
    

    注:牛客网的这套系统不能用MySQL的ALTER TABLE <表名> ADD [CONSTRAINT <约束名>] FOREIGN KEY(外键字段名)REFERENGCES 被参照表(主键字段名)

    47.如何获取emp_v和employees有相同的数据no

    SELECT ev.*
    FROM emp_v ev,employees em
    WHERE ev.emp_no = em.emp_no;
    

    48.将所有获取奖金的员工当前薪水增加10%

    UPDATE salaries SET salary = salary*1.1
    WHERE emp_no IN (SELECT emp_no FROM emp_bonus)
    

    相关文章

      网友评论

        本文标题:练习SQL利器,牛客网SQL实战题库,41~48题

        本文链接:https://www.haomeiwen.com/subject/qtaqbqtx.html