牛客网sql练习题解(43-51)

文章目录

    • 简介
    • NO.43
    • NO.44
    • NO.45
    • NO.46
    • NO.47
    • NO.48
    • NO.49
    • NO.50
    • NO.51

简介

往期文章:
牛客网sql练习题解 (1-11)
牛客网sql练习题解(12-21)
牛客网sql练习题解(22-32)
牛客网sql练习题解(34-42)

他来了他来了,他带着sql走来了。

这次的知识点涵盖

  • update用法
  • replace函数
  • replace into
  • 修改表名
  • 外键
  • intersect用法

下面我们直接上题目。

NO.43

牛客网sql练习题解(43-51)_第1张图片

update titles_test set to_date=null, from_date='2001-01-01' where to_date='9999-01-01';

牛客网sql练习题解(43-51)_第2张图片

NO.44

牛客网sql练习题解(43-51)_第3张图片
这题考察replace into的用法.
使用replace两种方法,如果直接使用REPLACE INTO的话,就需要重新插入一条完整的新纪录,sql会自动代替id相同的记录;也可以使用UPDATE结合,REPLACE(colname,oldval,newval)来赋值给colnamejik

replace into titles_test values(5, 10005,  'Senior Engineer', '1986-06-26', '9999-01-01');

牛客网sql练习题解(43-51)_第4张图片
或者

replace into titles_test
select 5, 10005, title, from_date, to_date
from titles_test
where id=5;

NO.45

牛客网sql练习题解(43-51)_第5张图片

alter table titles_test rename to titles_2017;

牛客网sql练习题解(43-51)_第6张图片

NO.46

牛客网sql练习题解(43-51)_第7张图片

alter table audit
add foreign key(emp_no) references employees_test(id);

这种写法肯定是没有问题的啊,但是就是过不了,然后看了看其他同学的答案,原来OJ的问题。

然后写法二,这种写法我觉也就是为了过题 吧,真正用的话没人先删表。

drop table audit;

create table audit(
    emp_no int not null,
    create_date datetime not null,
    foreign key(emp_no) references employees_test(id)
);

牛客网sql练习题解(43-51)_第8张图片

NO.47

牛客网sql练习题解(43-51)_第9张图片

这题我真的没看懂,凭我的理解写了第一个答案:

select * from emp_v; 

骂街了,他在干嘛。

在这里插入图片描述
要不用交集做?

select * from emp_v intersect select * from employees;

这题,我觉得没什么东西。

牛客网sql练习题解(43-51)_第10张图片

NO.48

牛客网sql练习题解(43-51)_第11张图片

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

在这里插入图片描述

跟着他的题目要求写没有什么困难。

NO.49

牛客网sql练习题解(43-51)_第12张图片

select "select count(*) from" || name || ";" as cnts
from sqlite_master
where type = "table";

牛客网sql练习题解(43-51)_第13张图片

其中的重点是怎么获取表明,也就是要知道不同的DBMS中的表名存储在哪里,
其中sqlite就找到sqlite_mater,如果是mysql就从information_schema.tables 获取表名。

NO.50

牛客网sql练习题解(43-51)_第14张图片

这题我觉得只需要知道sqlite用的是||连接字符串就可以了。

select last_name || "'" || first_name as name
from employees;

在这里插入图片描述

NO.51

牛客网sql练习题解(43-51)_第15张图片

说实话我一开始并不太理解这题什么意思,然后一看这不就是两个吗,然后我就震惊了:

select 2 as cnt;

牛客网sql练习题解(43-51)_第16张图片

这题确实我参考了其他的网友,因为平时replace用得少,而且没见过这种题,学习了。
考察replace和length函数的用法,
我们用length(原字符串) - length(replace(将,删掉)),这样就可以得到出现","的次数。

select (length('10,A,B') - length(replace('10,A,B',',',''))) as cnt;

在这里插入图片描述

大家共勉~~

你可能感兴趣的:(大数据,sql,数据库,sqlite,mysql,牛客网)