文章目录
-
- 31. 获取select * from employees对应的执行计划
- 32. 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
- 33. 创建一个actor表,包含如下列信息
- 35. 对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作
- 36. 对于如下表actor,其对应的数据为:
- 37. 针对如下表actor结构创建索引:
- 38. 针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v:
- 39. 针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引
- 40. 现在在last_update后面新增加一列名字为create_date, 类型为datetime, NOT NULL,默认值为'0000 00:00:00'
- 41. 构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中
- 42. 删除emp_no重复的记录,只保留最小的id对应的记录
- 43. 将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01
- 44. 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现
- 45. 将titles_test表名修改为titles_2017
- 46. 在audit表上创建外键约束,其emp_no对应employees_test表的主键id
- 47. 存在如下的视图:
- 48. 将所有获取奖金的员工当前的薪水增加10%
- 49. 针对库中的所有表生成select count(*)对应的SQL语句
- 50. 将employees表中的所有员工的last_name和first_name通过(')连接起来。
- 51. 查找字符串'10,A,B' 中逗号','出现的次数cnt
- 52. 获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列
- 53. 按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees
- 54. 查找排除当前最大、最小salary之后的员工的平均工资avg_salary
- 55. 分页查询employees表,每5行一页,返回第2页的数据
- 56. 获取所有员工的emp_no、部门编号dept_no以及对应的bonus类型btype和recevied,没有分配具体的员工不显示
- 57. 使用含有关键字exists查找未分配具体部门的员工的所有信息
- 58. 存在如下的视图:
- 59. 获取有奖金的员工相关信息
- 60. 按照salary的累计和running_total,其中running_total为前面所有员工的salary累计和,其他以此类推。 具体结果如下Demo展示
- 61. 对于employees表,在对first_name进行排名后,选出奇数排名对应的first_name
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