牛客网MySQL题库 28-40

题目28(没有27)

SQL28 查找描述信息中包含robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部

查找描述信息(film.description)中包含robot的电影对应的分类名称(category.name)以及电影数目(count(film.film_id)),而且还需要该分类包含电影总数量(count(film_category.category_id))>=5部

题目中有两个条件:

  1. 分类包含电影总数量(count(film_category.category_id))>=5部
  2. 描述信息(film.description)中包含robot的电影
  3. 将上述两个条件分为两个表
  4. 然后再把两个表合为一个即可
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以及名称

思路:

  1. 先连结三张表
  2. 再判断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

思路:
题目已经说了用子查询,那就很简单

  1. 先在category表中查找name为“Action”的category_id
  2. 在film-category表中查找1的film_id
  3. 在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';

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值