牛客SQL二刷(31-36)

写在前面

好几天没有看sql了,原因是上次讨论班废了一段时间,最近上半学期要结课了,很多东西都在搞。
哎!
春招实习上岸好难呀!
继续努力吧!


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

这道题真的是让人摸不着头脑哈!

在SQLite数据库中,可以用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语,用于描述表的细节

EXPLAIN SELECT * FROM employees

32、将employees表的所有员工的last_name和first_name拼接起来作为Name

中间以一个空格区分
这道题主要考察的是一个拼接语句,我们来看一下有哪些点

MySQL、SQL Server、Oracle等数据库支持CONCAT方法,
而本题所用的SQLite数据库只支持用连接符号"||"来连接字符串

-- CONCAT方法
SELECT CONCAT(last_name," ",first_name) AS name  
FROM employees
 
-- ||方法
SELECT last_name||" "||first_name AS name  
FROM employees

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 最后更新时间,默认是系统的当前时间

根据题意,本题关键点是actor_id的主键设置与last_update的默认获取系统时间:
1、在actor_id字段末尾加上PRIMARY KEY是将该字段设置为主键,或者在表的最后一行加上PRIMARY KEY(actor_id)
2、在last_update末尾加上DEFAULT是为该字段设置默认值,且默认值为(datetime(‘now’,‘localtime’)),即获得系统时间,注意最外层的括号不可省略即建表语句走起

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 (datetime('now','localtime')),
 PRIMARY KEY (actor_id))

34、对于表actor批量插入如下数据

INSERT INTO actor (actor_id,
                   first_name,
                   last_name,
                   last_update)
VALUES ('1',
        'PENELOPE',
        'GUINESS',
        '2006-02-15 12:34:33'),
       ('2',
        'NICK',
        'WAHLBERG',
        '2006-02-15 12:34:33')

35、批量插入数据,不使用replace操作

在 SQLite 中,用 INSERT OR IGNORE 来插入记录,或忽略插入与表内UNIQUE字段都相同的记录

INSERT OR IGNORE INTO actor
VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33')

用 INSERT OR REPLACE 来插入记录,或更新替代与表内UNIQUE字段都相同的记录

INSERT OR REPLACE INTO actor 
VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33')

注意这个点!

  • 如果不存在则插入,如果存在则忽略
    INSERT OR IGNORE INTO tablename VALUES(…);
  • 如果不存在则插入,如果存在则替换
    INSERT OR REPLACE INTO tablename VALUES(…);

这里指的存在表示的是unique属性的列值存在的情况下,unique表示键值唯一

36、创建一个actor_name表

将actor表中的所有first_name以及last_name导入该表

CREATE TABLE actor_name (first_name VARCHAR(45) NOT NULL,
                         last_name VARCHAR(45) NOT NULL) ;

INSERT INTO actor_name (first_name, 
                        last_name)
SELECT first_name, last_name
FROM actor

你可能感兴趣的:(SQL学习)