数据库SQL实战:MySql练习(下)

文章目录31. 获取select * from employees对应的执行计划32. 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分33. 创建一个actor表,包含如下列信息35. 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作36. 对于如下表actor,其对应的数据为:37. 针对如下...
摘要由CSDN通过智能技术生成

文章目录

31. 获取select * from employees对应的执行计划

  • sql语句
explain select * from employees;

在 SQLite 语句之前,可以使用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语,用于描述表的细节。
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了。
参考:https://www.cnblogs.com/yycc/p/7338894.html

32. 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分

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`));
  • sql语句
SELECT last_name||" "||first_name AS Name FROM employees

不同数据库连接字符串的方法不完全相同,MySQL、SQL Server、Oracle等数据库支持CONCAT方法,而本题所用的SQLite数据库只支持用连接符号"||"来连接字符串。
https://blog.csdn.net/u012260238/article/details/70245452

33. 创建一个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 最后更新时间,默认是系统的当前时间
  • sql语句
create table actor( 
    actor_id smallint(5) primary key NOT null, 
    first_name varchar(45) not null, 
    last_name varchar(45) not null, 
    last_update timestamp not null default (datetime('now','localtime')) 
);

使用默认值为系统时间default (datetime(‘now’,‘localtime’))
34. 对于表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')))
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 
  • sql语句
insert into actor values (1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'),
                         (2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33');

35. 对于表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_id 	first_name 	last_name 	last_update 
'3' 	'ED' 	'CHASE' 	'2006-02-15 12:34:33' 
  • SQLite3
insert or ignore into actor values(3,'ED','CHASE','2006-02-15 12:34:33');
  • MySQL
insert ignore into actor values(3,'ED','CHASE','2006-02-15 12:34:33');

36. 对于如下表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
(
first_name varchar(45) not null,
last_name varchar(45) not null
);
  • sql语句
insert into actor_name select first_name, last_name from actor;

37. 针对如下表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')))

对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname。

  • sql语句
create unique index uniq_idx_firstname on actor(first_name);
create index idx_lastname on actor(last_name);

给指定表或者视图的某列添加索引使用语句:
create [unique/…] index indexName on tableName(colName)

38. 针对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')))
  • sql语句
create view actor_name_view as
select first_name first_name_v, last_name last_name_v
from actor;

注意 create view … as … 的 as是创建视图语法中的一部分,不可省略。

39. 针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引

CREATE TABLE `salaries` (
`emp_no` int(11) NOT 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值