题目28(没有27)
SQL28 查找描述信息中包含robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部
查找描述信息(film.description)中包含robot的电影对应的分类名称(category.name)以及电影数目(count(film.film_id)),而且还需要该分类包含电影总数量(count(film_category.category_id))>=5部
题目中有两个条件:
- 分类包含电影总数量(count(film_category.category_id))>=5部
- 描述信息(film.description)中包含robot的电影
- 将上述两个条件分为两个表
- 然后再把两个表合为一个即可
select b.name,count(a.film_id) from
(
select f.film_id,fc.category_id from film f join film_category fc
on f.film_id = fc.film_id
where f.description like '%robot%'
) a
join
(
select fc.category_id,ca.name,count(fc.film_id) num from film_category fc
join category ca
on fc.category_id = ca.category_id
group by ca.category_id
having num>=5
) b
on a.category_id=b.category_id
where b.num>=5
group by b.name;
题目29
SQL29 使用join查询方式找出没有分类的电影id以及名称
使用join查询方式找出没有分类的电影id以及名称
思路:
- 先连结三张表
- 再判断category_id为null的即可
SELECT film.film_id,title
FROM film
LEFT JOIN film_category
ON film_category.film_id = film.film_id
LEFT JOIN category
ON film_category.category_id = category.category_id
WHERE film_category.category_id IS NULL;
题目30
SQL30 使用子查询的方式找出属于Action分类的所有电影对应的title,description
思路:
题目已经说了用子查询,那就很简单
- 先在category表中查找name为“Action”的category_id
- 在film-category表中查找1的film_id
- 在film中查找2的title,description
SELECT title,description FROM film
WHERE film_id in(
SELECT film_id FROM film_category
WHERE category_id IN(
SELECT category_id FROM category
WHERE name = "Action"
)
)
题目32(没有31)
SQL32 将employees表的所有员工的last_name和first_name拼接起来作为Name
将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
这道题没什么说的,直接concat函数即可
SELECT CONCAT(last_name, " ", first_name) name FROM employees
题目33
SQL33 创建一个actor表,包含如下列信息
CREATE TABLE actor(
actor_id smallint(5) primary key,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update date NOT NULL
)
题目34
SQL34 批量插入数据
INSERT INTO actor VALUES(1,"PENELOPE","GUINESS","2006-02-15 12:34:33");
INSERT INTO actor VALUES(2,"NICK","WAHLBERG","2006-02-15 12:34:33");
或者
INSERT INTO actor VALUES
(1,"PENELOPE","GUINESS","2006-02-15 12:34:33"),
(2,"NICK","WAHLBERG","2006-02-15 12:34:33");
题目35
SQL35 批量插入数据,不使用replace操作
此题考查INGORE的用法
INSERT IGNORE INTO actor VALUES(3,"ED","CHASE","2006-02-15 12:34:33");
题目36
SQL36 创建一个actor_name表
CREATE TABLE actor_name(
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL
)
SELECT first_name,last_name FROM actor;
题目37
SQL37 对first_name创建唯一索引uniq_idx_firstname
对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);
题目38
SQL38 针对actor表创建视图actor_name_view
针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v:
CREATE VIEW actor_name_view(first_name_v,last_name_v)
AS SELECT first_name,last_name FROM actor;
题目39
SQL39 针对上面的salaries表emp_no字段创建索引idx_emp_no
针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,使用强制索引。
为什么要使用强制索引 强制索引说明
SELECT * FROM salaries force index(idx_emp_no) where emp_no = 10005;
题目40
SQL40 在last_update后面新增加一列名字为create_date
ALTER TABLE actor ADD create_date datetime NOT NULL DEFAULT '2020-10-01 00:00:00';