SQL入门实战 day4

这篇博客介绍了SQL的基础操作,包括获取查询的执行计划、表的创建、字段拼接、主键设置、默认值设定、唯一索引创建以及视图的建立。内容涵盖员工表、actor表以及salaries表的相关操作,通过实例讲解了SQL的常用语法和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、目录

题目链接:
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批量插入如下数据(不能有2insert语句哦!)
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 语句";

VIEW 语法

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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值