一、目录
题目链接:
https://www.nowcoder.com/ta/sql
二、题解
31、获取select * from employees对应的执行计划
- 题目描述
获取select * from employees对应的执行计划
- 代码
EXPLAIN SELECT * FROM employees
32、将employees表的所有员工的last_name和first_name拼接起来作为Name
- 题目描述
将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
(注:该数据库系统是sqllite,字符串拼接为 || 符号,不支持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
- 参考:
1.不同数据库连接字符串的方法不完全相同,MySQL、SQL Server、Oracle等数据库支持CONCAT方法,
SELECT CONCAT_WS(space(1),last_name,first_name) AS Name FROM employees;
2.concat、concat_ws、group_concat函数用法
33、获取select * from employees对应的执行计划
- 题目描述
创建一个actor表,包含如下列信息(注:sqlite获取系统默认时间是datetime('now','localtime'))
列表 类型 是否为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 最后更新时间,默认是系统的当前时间
-
思路
本题关键点是actor_id的主键设置与last_update的默认获取系统时间:
1.设置主键 primary key
2.在last_update末尾加上DEFAULT是为该字段设置默认值,且默认值为(datetime(‘now’,‘localtime’)),即获得系统时间,注意最外层的括号不可省略 -
代码
create table actor(
actor_id smallint(5) not null primary key,
first_name varchar(45) not null ,
last_name VARCHAR(45) not null,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime'))
)
34、创建一个actor表,包含如下列信息
- 题目描述
对于表actor批量插入如下数据(不能有2条insert语句哦!)
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
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使用方法 -
代码
INSERT INTO actor VALUES
(1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),
(2,'NICK','WAHLBERG','2006-02-15 12:34:33')
35、获取select * from employees对应的执行计划
- 题目描述
批量插入数据,如果数据已经存在,请忽略,不使用replace操作
对于表actor批量插入如下数据,如果数据已经存在,请忽略(不支持使用replace操作)
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
-
思路
-
代码
INSERT OR IGNORE into actor VALUES ('3','ED','CHASE','2006-02-15 12:34:33')
36. 创建一个actor_name表
- 题目描述
对于表actor批量插入如下数据,如果数据已经存在,请忽略(不支持使用replace操作)
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
- 思路
对于如下表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 as
select first_name,last_name from actor
37. 对first_name创建唯一索引uniq_idx_firstname
- 题目描述
针对如下表actor结构创建索引:
(注:在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作)
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
对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)
- 参考
SQL CREATE INDEX 语法
CREATE INDEX index_name ON table_name (column_name)
注释:"column_name" 规定需要索引的列
SQL CREATE UNIQUE INDEX 语法
CREATE UNIQUE INDEX index_name ON table_name (column_name)
38. 针对actor表创建视图actor_name_view
- 题目描述
针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
- 代码
create view actor_name_view as
select first_name as first_name_v,last_name as last_name_v
from actor
- 参考
SQL CREATE VIEW 语法
CREATE VIEW "VIEW_NAME" AS "SQL 语句";
39. 针对salaries表emp_no字段创建索引idx_emp_no
- 题目描述
针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引。
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`));
create index idx_emp_no on salaries(emp_no);
- 代码
select * from salaries INDEXED BY idx_emp_no where emp_no='10005'
40. 针对上面的salaries表emp_no字段创建索引idx_emp_no
- 题目描述
存在actor表,包含如下列信息:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')));
现在在last_update后面新增加一列名字为create_date, 类型为datetime, NOT NULL,默认值为'0000-00-00 00:00:00'
- 代码
alter table add column create_date datetime not null defualt '0000-00-00 00:00:00'