牛客网数据库SQL实战详细剖析(31-40)


这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程。

具体题目可参考牛客网的SQL实战模块:

https://www.nowcoder.com/ta/sql?page=0

一、牛客网数据库SQL实战详细剖析(1-10)

二、牛客网数据库SQL实战详细剖析(11-20)

三、牛客网数据库SQL实战详细剖析(21-30)

第三十一题:获取select * from employees对应的执行计划

explain select * from employees;

explain模拟优化器执行SQL语句,在5.6以及以后的版本中,除过select,其他比如insert,update和delete均可以使用explain查看执行计划,从而知道mysql是如何处理sql语句,分析查询语句或者表结构的性能瓶颈。

作用:https://blog.csdn.net/UFO___/article/details/80951869

 

第三十二题:将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分

select CONCAT(last_name,' ',first_name) as Name
from employees;

解题思路:①不同字符串连接方法不一样,在Mysql中,可以利用CONCAT()函数将多个字符串连接起来,中间用逗号隔开。②空格用' '表示。

 

三十三题:创建一个actor表,包含如下列信息

列表

类型

是否为NULL

含义

actor_id

smallint(5)

not null

主键id

first_name

varchar(45)

not null

名字

last_name

varchar(45)

not null

姓氏

last_update

timestamp

not null

最后更新时间,默认是系统的当前时间

create table actor(
actor_id smallint(5) not null,
first_name varchar(45) not null,
last_name varchar(45) not null,
last_update timestamp not null default current_timestamp,
primary key(actor_id));

解题思路:最关键的两点是创建主键和默认系统当前时间的设置。

第三十四题:对于表actor批量插入如下数据

actor_id

first_name

last_name

last_update

1

PENELOPE

GUINESS

2006-02-15 12:34:33

2

NICK

WAHLBERG

2006-02-15 12:34:33

insert into actor values(1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),
(2,'NICK','WAHLBERG','2006-02-15 12:34:33');

解题思路:插入数据语法:insert into <表名> values (<数据1>,<数据2>....);

 

第三十五题:对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作

actor_id

first_name

last_name

last_update

'3'

'ED'

'CHASE'

'2006-02-15 12:34:33'

insert ignore into actor values(3,'ED','CHASE','2006-02-15 12:34:33');

解题思路:如果数据存在则忽略,在insert into之间加个ignore就可以。

 

第三十六题:对于如下表actor,其对应的数据为:

actor_id

first_name

last_name

last_update

1

PENELOPE

GUINESS

2006-02-15 12:34:33

2

NICK

WAHLBERG

2006-02-15 12:34:33

 

创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。actor_name表结构如下:

列表

类型

是否为NULL

含义

first_name

varchar(45)

not null

名字

last_name

varchar(45)

not null

姓氏

create table actor_name
select first_name,last_name from actor;

解题思路:不同数据库语法不同,在Mysql中,可以加as,也可以不加as。

 

第三十七题:针对表actor结构创建索引,对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname

CREATE UNIQUE INDEX uniq_idx_firstname ON actor(first_name);
CREATE INDEX idx_lastname ON actor(last_name)

解题思路:创建唯一索引:CREATE UNIQUE INDEX <唯一索引名> ON <表名> (<列名>);

创建一个简单的索引:CREATE INDEX <普通索引名> ON <表名> (<列名>);

 

第三十八题:针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v

CREATE VIEW actor_name_view(first_name_v,last_name_v)
AS
select first_name,last_name
from actor;

解题思路:创建视图语句:

CREATE VIEW <视图名称> (<视图列名1>,<视图列名2>…)

AS