223. 使用join查询方式找出没有分类的电影id以及其电影名称
SELECT film_id, title
FROM film t1 LEFT JOIN film_category t3 USING(film_id)
WHERE category_id IS NULL
224. 使用子查询的方式找出属于Action分类的所有电影对应的title,description
# 题目要求使用子查询,也就是尽量不关联表
SELECT title, description
FROM film
WHERE film_id IN (
SELECT film_id
FROM film_category
WHERE category_id = (
SELECT category_id
FROM category
WHERE name = 'Action'
)
)
/*
# 如果可以关联表
SELECT f.title, f.description
FROM film as f INNER JOIN film_category AS fc ON f.film_id = fc.film_id
INNER JOIN category AS c ON c.category_id = fc.category_id
WHERE c.name = 'Action'
*/
227. 创建一个actor表,包含如下列信息
/*
考察点是建表语法:
CREATE TABLE table_name(
column_name 数据类型 是否允许null
);
主键列在是否允许NULL后空格PRIMARY KEY,用来设置表的主键。
多列间用逗号隔开。
CREATE TABLE actor(
`actor_id` SMALLINT(5) NOT NULL PRIMARY KEY COMMENT'主键id', -- 用`着重号`括住字段名称更规范
`first_name` VARCHAR(45) NOT NULL COMMENT'名字',
`last_name` VARCHAR(45) NOT NULL COMMENT'姓氏',
`last_update` TIMESRAMP NOT NULL DEFAULT(datetime('now','localtime')) COMMENT'日期'
);
*/
# 不是很懂大小写
DROP TABLE IF EXISTS actor;
CREATE TABLE IF NOT EXISTS actor(
actor_id SMALLINT(5) NOT NULL COMMENT'主键id',
first_name VARCHAR(45) NOT NULL COMMENT'名字',
last_name VARCHAR(45) NOT NULL COMMENT'姓氏',
last_update DATE NOT NULL COMMENT'日期',
PRIMARY KEY (actor_id)
);
228. 对于表actor批量插入如下数据(不能有2条insert语句)
# 方法1. VALUES (value1, value2, ...), (value1, value2, ...), ..., (value1, value2, ...)
INSERT INTO actor
VALUES
(1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'),
(2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33');
# 方法2. UNION SELECT 批量插入
INSERT INTO actor
SELECT 1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'
UNION SELECT 2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33';
229. 对于表actor插入如下数据,如果数据已经存在,请忽略(不支持使用replace操作)
INSERT OR IGNORE INTO actor
VALUES ('3', 'ED', 'CHASE', '2006-02-15 12:34:33');
- INSERT INTO
插入数据,数据库会检查主键,如果出现重复会报错 - REPLACE INTO
插入替换数据,需求表中有 PRIMARY KEY, 或者 UNIQUE 索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和 INSERT INTO 一样 - INSERT IGNORE
如果中已经存在相同的记录,则忽略当前新数据
230. 创建一个actor_name表,并且将actor表中的所有first_name以及last_name导入该表。actor_name表结构如下,题目最后会查询actor_name表里面的数据来对比结果输出
DROP TABLE IF EXISTS actor_name;
CREATE TABLE IF NOT EXISTS actor_name(
first_name VARCHAR(45) NOT NULL COMMENT'名字',
last_name VARCHAR(45) NOT NULL COMMENT'姓氏'
);
INSERT INTO actor_name (first_name, last_name)
SELECT first_name, last_name
FROM actor;
# 因为实际上只是导入数据,所以可以一句话搞定建表+插入数据
CREATE TABLE IF NOT EXISTS `actor_name` SELECT first_name, last_name FROM `actor`;
231. 针对如下表actor结构创建索引:对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname
(注:在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作;mysql支持 ALTER TABLE 创建索引)
# 考察点:给指定表或者视图的某列添加索引 CREATE [UNIQUE/...] INDEX indexName ON tableName(colName);
CREATE UNIQUE INDEX uniq_idx_firstname ON actor(first_name); -- 创建唯一索引
CREATE INDEX `idx_lastname` ON actor(last_name); -- 创建普通索引
# 可以对索引名用着重符号
232. 针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v。
后台会插入2条数据:insert into actor values ('1', 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'), ('2', 'NICK', 'WAHLBERG', '2006-02-15 12:34:33');然后打印视图名字和插入的数据
# 1
CREATE VIEW actor_name_view AS
SELECT first_name AS first_name_v, last_name AS last_name_v
FROM actor;
# 2
CREATE VIEW actor_name_view (first_name_v, last_name_v) AS
SELECT first_name, last_name
FROM actor;
标签:last,name,SQ,actor,牛客,223,id,SELECT,first
From: https://www.cnblogs.com/Jojo-L/p/16812929.html