牛客网数据库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

<select 语句>;

 

第三十九题:针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引

create index idx_emp_no on salaries(emp_no);
select * from salaries FORCE INDEX (idx_emp_no) where emp_no = 10005;

解题思路:先创建索引,再创建强制索引查询,索引名一定要加括号,否则错误。

强制索引:FORCE INDEX(<索引名>);

SELECT * FROM <表名> FORCE INDEX (<索引名>)

参考:http://www.jb51.net/article/49807.htm

 

第四十题:在表actor中,在last_update后面新增加一列名字为create_date, 类型为datetime, NOT NULL,默认值为'0000-00-00 00:00:00'

alter table actor
add column create_date datetime NOT NULL default '0000-00-00 00:00:00';

解题思路:添加列是使用变更表定义的ALTER TABLE语句,ALTER TABLE <表名> ADD COLUM

N <列名> <列的定义>;

--end--

推荐阅读:

秋招失利,如何把握春招?(大四、研三)

计算机学生如何规划好大学四年的学习?

扫描下方二维码

添加好友,备注【交流群

拉你到学习路线和资源丰富的交流群

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值