基于mysql的sakila数据库脚本分析
本例是基于mysql的sakila数据库脚本的复杂查询分析,大家可以去mysql官网上下载此脚本;也可以进入我的资源页进行下载:
关系图如下:
下面是查询的案例:
1.查询某部电影的所属类别,语言
SELECT film.title AS '电影名称', category.name AS '种类名称', language.name AS '语言' FROM film_category
LEFT JOIN film ON film_category.`film_id` = film.`film_id`
LEFT JOIN `category` ON film_category.category_id = category.category_id
LEFT JOIN LANGUAGE ON film.language_id = language.language_id
WHERE film.title = 'ACADEMY DINOSAUR';
2.查询某部电影的演员有哪些
SELECT film.title AS '电影名称', CONCAT(actor.last_name, CONCAT(" ", actor.first_name)) AS '参与演员'
FROM film
INNER JOIN film_actor
ON film.`film_id` = film_actor.`film_id`
INNER JOIN actor
ON film_actor.`actor_id` = actor.`actor_id`
WHERE film.title = 'ACADEMY DINOSAUR';
3.查询某部电影的演员人数
SELECT film.title AS '电影名称', COUNT(film_actor.`actor_id`) AS '参演人数' FROM film
INNER JOIN film_actor ON film.`film_id` = film_actor.`film_id`
WHERE film.title = 'ACADEMY DINOSAUR';
4.查询电影id,库存数
SELECT film.`film_id` AS '电影id', COUNT(inventory.`film_id`) AS '库存数'
FROM film, inventory
WHERE film.`film_id` = inventory.`film_id`
GROUP BY film.`film_id`;
5.查询:电影名,库存数
SELECT film.`title` AS '电影名称', COUNT(inventory.`film_id`) AS '库存数'
FROM film LEFT JOIN inventory ON film.`film_id` = inventory.`film_id`
GROUP BY film.`title`;
6.查询store对应的地址和负责人姓名
SELECT address.`address` AS 'store地址', CONCAT(staff.first_name, CONCAT(" ", staff.`last_name`)) AS '负责人姓名'
FROM store
INNER JOIN address ON store.`address_id` = address.`address_id`
INNER JOIN staff ON store.`manager_staff_id` = staff.`staff_id`;
7.查询staff姓名及其对应的地址
SELECT CONCAT(staff.first_name, CONCAT(" ", staff.`last_name`)) AS 'staff姓名', address.`address` AS '住址'
FROM staff LEFT JOIN address ON staff.`address_id` = address.`address_id`;
8.查询某个顾客的消费记录:顾客名、消费金额
SELECT CONCAT(customer.`first_name`, CONCAT(" ", customer.`last_name`)) AS '顾客名', COUNT(payment.`amount`) AS '消费金额'
FROM customer
LEFT JOIN rental ON customer.`customer_id` = rental.`customer_id`
LEFT JOIN payment ON rental.`rental_id` = payment.`rental_id`
WHERE customer.`customer_id` = 1;
9.查询某个员工的销售总额:员工名,销售总额
SELECT CONCAT(staff.first_name, CONCAT(" ", staff.`last_name`)) AS '员工姓名', COUNT(payment.`amount`) AS '销售总额'
FROM payment LEFT JOIN staff ON payment.`staff_id` = staff.`staff_id`
GROUP BY staff.`first_name`;
10.查询某个顾客借出的影片名
SELECT `title` AS '影片名' -- CONCAT(`first_name`, CONCAT(" ", `last_name`)) AS '顾客名',
FROM
(
SELECT DISTINCT(customer.`customer_id`), customer.`first_name`, customer.`last_name`, inventory.`film_id`
FROM customer
INNER JOIN store ON customer.`store_id` = store.`store_id`
INNER JOIN inventory ON inventory.`store_id` = store.`store_id`
) AS tt
INNER JOIN film ON film.`film_id` = tt.film_id
WHERE `customer_id` = 1;
11.查询某片子的受欢迎程度,根据欢迎程度来进行排序
SELECT title AS '电影名称', COUNT(title) AS '租借次数'
FROM
(
SELECT film.`title`
FROM film
LEFT JOIN inventory ON film.`film_id` = inventory.`film_id`
LEFT JOIN rental ON inventory.`inventory_id` = rental.`inventory_id`
) AS tt
GROUP BY title
ORDER BY 租借次数 DESC;
12.查询滞留最多的DVD:什么是滞留最多??? 是不是借出次数最少的???
其中重复的语句比较多,怎么解决 where和 from后面的子表怎么传递??
SELECT title, title_sum
FROM
(
SELECT title, COUNT(title) AS 'title_sum'
FROM
(
SELECT film.`title`
FROM film
LEFT JOIN inventory ON film.`film_id` = inventory.`film_id`
LEFT JOIN rental ON inventory.`inventory_id` = rental.`inventory_id`
) AS tt
GROUP BY title
) AS aa
WHERE title_sum IN
(
SELECT MIN(title_sum)
FROM
(
SELECT title, COUNT(title) AS 'title_sum'
FROM
(
SELECT film.`title`
FROM film
LEFT JOIN inventory ON film.`film_id` = inventory.`film_id`
LEFT JOIN rental ON inventory.`inventory_id` = rental.`inventory_id`
) AS tt
GROUP BY title
) AS aa
);
13.查询消费最高的客户,以及该客户的最喜欢借阅的片子类型
SELECT cus_fav.cus_id AS '顾客编号', cus_fav.cus_name AS '顾客姓名', cus_fav.cate_name AS '最爱的电影类型', MAX(cus_fav.cate_num) AS '租借次数'
FROM
(
SELECT cus.id AS 'cus_id', cus.name AS 'cus_name', category.`name` AS 'cate_name', COUNT(category.`name`) AS 'cate_num'
FROM
(
SELECT cus_py.cus_id AS 'id', cus_py.cus_name AS 'name', MAX(cus_py.total_amount) AS 'amount'
FROM
(
SELECT customer.`customer_id` AS 'cus_id', CONCAT(customer.`first_name`, CONCAT(" ", customer.`last_name`)) AS 'cus_name', COUNT(payment.`amount`) AS 'total_amount'
FROM customer LEFT JOIN payment ON customer.`customer_id` = payment.`customer_id`
GROUP BY cus_id
) AS cus_py
) AS cus
INNER JOIN rental ON rental.`customer_id` = cus.id
INNER JOIN inventory ON inventory.`inventory_id` = rental.`inventory_id`
INNER JOIN film ON film.`film_id` = inventory.`film_id`
INNER JOIN film_category ON film_category.`film_id` = film.`film_id`
INNER JOIN category ON category.`category_id` = film_category.`category_id`
GROUP BY cate_name
) AS cus_fav;
14.查询某部电影所属的类别,语言,演员数
SELECT film.`title` AS '电影名称', category.`name` AS '类别', language.`name` AS '语言', COUNT(actor.`actor_id`) AS '演员人数'
FROM film
LEFT JOIN film_category ON film.`film_id` = film_category.`film_id`
LEFT JOIN category ON category.`category_id` = film_category.`category_id`
LEFT JOIN LANGUAGE ON film.`language_id` = language.`language_id`
LEFT JOIN film_actor ON film.`film_id` = film_actor.`film_id`
LEFT JOIN actor ON film_actor.`actor_id` = actor.`actor_id`
WHERE film.`film_id` = 1;
15.查询某个顾客的消费记录;接待的员工名。消费金额
SELECT cus.customer_name AS '顾客名', cus.staff_name AS '员工名', COUNT(cus.amount) AS '消费额'
FROM
(
SELECT CONCAT(customer.`first_name`, CONCAT(" ", customer.`last_name`)) AS 'customer_name', CONCAT(staff.`first_name`, CONCAT(" ", staff.`last_name`)) AS 'staff_name', payment.`amount` AS 'amount'
FROM customer
INNER JOIN payment ON customer.`customer_id` = payment.`customer_id`
INNER JOIN staff ON payment.`staff_id` = staff.`staff_id`
WHERE customer.`customer_id` = 1
) AS cus
GROUP BY cus.staff_name;
16.查询某个顾客的消费总数
SELECT CONCAT(customer.`first_name`, CONCAT(" ", customer.`last_name`)) AS '顾客名', SUM(payment.`amount`) AS '消费金额'
FROM customer
LEFT JOIN rental ON customer.`customer_id` = rental.`customer_id`
LEFT JOIN payment ON rental.`rental_id` = payment.`rental_id`
WHERE customer.`customer_id` = 1;
基于mysql的sakila数据库脚本分析的更多相关文章
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- 新浪微博基于MySQL的分布式数据库实践
提起微博,相信大家都是很了解的.但是有谁知道微博的数据库架构是怎样的呢?在今天举行的2011数据库技术大会上,新浪首席DBA杨海潮为我们详细解读了新浪微博的数据库架构——基于MySQL的分布式数据库实 ...
- Unknown command '\b'. 关于Mysql导入外部数据库脚本报错的解决
来自网络转载 还是字符集的问题 使用source导入外部sql文件: mysql> source F:\php\bookorama.sql;--------------source F:---- ...
- MySQL客户端导入数据库脚本,字段值出现乱码解决方法
解决方法1:在MySql安装目录下找到my.ini,将[mysql]下的default-character-set=latin1改为default-character-set=utf8,保存,然后重启 ...
- 基于MySQL协议的数据库中间层项目Atlas - 360团队
一.简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了 ...
- MySQL Workbench 导出数据库脚本(图文)
1.如下图红框所示,在Server Administration那里,点击"New Server Instance" 2.如下图所示,如果是连接本地数据库,则选localhost, ...
- 获取MySQL服务提供的sakila数据库(Example Databases)
关于这个数据库也就是样例数据库,数据库,数据库,最可怕的就是没有数据了,对吧?没有数据你学个什么呀. 可是,没有数据,咱会自己insert,那只能适用于初学者.对于数据库的优化方面的学习,还是有大数据 ...
- 基于Mysql数据库亿级数据下的分库分表方案
移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,问题没有暴露出来,数据库方面的优化显得不太重要,一旦数据量越来越大时, ...
- MySql 获取服务提供的sakila数据库(Example Databases)
关于这个数据库也就是样例数据库,数据库,数据库,最可怕的就是没有数据了,对吧?没有数据你学个什么呀. 可是,没有数据,咱会自己insert,那只能适用于初学者.对于数据库的优化方面的学习,还是有大数据 ...
随机推荐
- 【LeetCode】389.找不同
389.找不同 知识点:哈希表.抵消思想: 题目描述 给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. ...
- Linux服务器相关性能的命令
Linux服务器相关性能的命令 一.查看服务器性能信息的相关命令 1.cpu信息查看 cpu分为物理cpu和逻辑cpu 物理cpu:实际物理服务器插槽上cpu的个数,可以通过physical id不重 ...
- Python 机器学习实战 —— 无监督学习(上)
前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...
- ts 学习笔记 - 进阶篇 1
目录 进阶 类型别名 字符串字面量类型 元祖 例子 越界的元素 枚举 手动赋值 常数项和计算所得项 常数枚举 外部枚举 进阶 类型别名 类型别名用来给一个类型起个新名字 type Name = str ...
- Python脚本:爬取天气数据并发邮件给心爱的Ta
第一部分:爬取天气数据 # 在函数调用 get_weather(url = 'https://www.tianqi.com/foshan') 的 url中更改城市,foshan为佛山市 1 impor ...
- ; 按快捷键`(即波浪号~所在的键盘按键)立即打开随身U盘中的办公专用文件夹
; 按快捷键`(即波浪号~所在的键盘按键)立即打开随身U盘中的办公专用文件夹; WorkFolderHotkey.ahk;; http://www.autoahk.com/; https://www. ...
- JAVAWEB过滤器、监听器的作用及使用>从零开始学JAVA系列
目录 JAVAWEB过滤器.拦截器的作用及使用 过滤器Filter 什么是过滤器 为什么要使用过滤器(过滤器所能解决的问题) 配置一个过滤器完成编码的过滤 编写一个EncodingFilter(名称自 ...
- 官宣 .NET MAUI 预览版 6
最近,我们发布了.NET 多平台应用程序UI (MAUI)的最新进展. 在此版本中,我们全力支持Visual Studio 2022 预览版2.这也标志着我们首次将.NET MAUI 作为工作负载安装 ...
- Java方法01——什么是方法
例子 package method;public class Demon02 { //main 方法 public static void main(String[] args) { //实际参数:实 ...
- 深入理解jvm-2Edition-类文件结构
概述: 规范而独立的类文件结构以及只与类文件关联的虚拟机为Java实现了平台无关性,甚至还带来了一些语言无关性. 只要将源代码编译为Class文件规定的格式,JVM就可以执行. JVM的指令描述能力比 ...