MYSQL 单表检索

本文为数据科学类博客马拉松 (Data Science Blogathon) 系列文章。

注:Blogathon是blogging marathon 的缩写,指博主长期专注某类知识分享。

SQL简介

今天,我们一起学习如何使用 SQL 语句进行数据检索。数据检索可以只对单个表进行,也可以对多个表进行。在本文中,我们主要关注单表检索,整个过程将使用 MYSQL workbench来完成。

首先,让我们了解一下 SQL。

SQL

SQL 即是结构化查询语言, 它是一种用于关系数据库从数据库中查询和获取数据的语言。SQL 允许您访问和维护数据库。学习 SQL 是非常有趣而且很容易的事项。有多种 SQL标准,例如 MySQL、SQLite、SQL Server、Postgre SQL 和 Oracle。这几类标准都非常相似,只有很小的差异。下面,我们使用 MYSQL workbench editor,完成本次学习任务

数据库

本次练习我们使用 mavenmovies 数据库。我已将 mavenmovies 数据库 SQL 文件上传到我的 GitHub 存储库, 请打开链接并下载(也可访问 https://www.modb.pro/download/878876 下载文件),在workbench 中运行 SQL 文件以创建包含表的测试库。

在这个数据库中,有 16 个相关的数据库。主要包含有关客户、业务和库存的详细信息。每个表都有行和列。行指的是记录,列指的是字段。表包含主键和外键。主键始终是唯一的。主键标识数据库中的唯一记录,而外键是非唯一的。

MYSQL 语句的元素

SQL 语句有六大元素,这些元素构成了 SQL 语句的结构。

如下所示:

SELECT - 标识需要查询的列

FROM – 标识需要查询的表

WHERE – 根据某些指定条件进行过滤,可选项

GROUP BY – 对结果中的数据进行分组,可选项

HAVING – 通过组过滤来过滤结果,可选项

ORDER BY – 按升序或降序对结果进行排序,可选项

SQL 语句如下所示,

SELECT column-name FROM table-name WHERE logical-condition GROUP BY column-name HAVING logical-condition ORDER BY column-name

LIKE 操作符

LIKE 操作符用于在 WHERE 子句中按指定模式查询特定条件的取值。

样例 :

WHERE name LIKE ‘Denise%’ -- 选取起始为‘Denise’,后续为任意数量字符的值
WHERE description LIKE ‘%fancy%’ -- 选取包含字符‘fancy’,字符前后为任意取值的值
WHERE name LIKE ‘%Johnson’ -- 选取结尾为‘Denise’,字符之前任意数量字符的值
WHERE first_name LIKE ‘_erry’ -- 选取结尾为‘erry’,字符前仅有单个字符的值 (比如:Terry, Jerry)
聚合函数

COUNT() – 计算查询值的总数量

COUNT DISTINCT() – 计算去重后的值的数量

MIN() – 找到最小值

MAX() – 找到最大值

AVG() – 求平均值

SUM() – 求值的总和

使用Workbench

获取所有客户的名字、姓氏及电子邮件

SELECT first_name, last_name ,email from customer;

获取电影的租赁间隔

SELECT DISTINCT rental_duration from film;

获取名字为 Mary 的客户的记录。

SELECT * from customer where first_name="mary";

获取 2006 年 1 月 6 日之后付款金额大于 5 的前 100条付款记录。

SELECT * from payment where amount>5 AND payment_date>'2006-01-06' AND customer_id<=100;

获取包含幕后花絮的电影列表

select title,special_features from film where special_features like "%Behind the Scenes%";

获取按租期分组的统计

select rental_duration , count(film_id) from film GROUP BY rental_duration;

获取rental_id数量小于15的客户customer_id

select customer_id, count(rental_id) from rental group by customer_id having count(rental_id)<15;
CASE 语句 (MYSQL)

CASE 语句在处理数据库时非常有用。这些 CASE 语句允许我们创建一些逻辑条件来指定应该如何输出。CASE 语句是使用 WHEN 和 THEN 定义的。
如果第一条件为真,则 CASE 完成。 如果不是,它继续测试每个条件直到到达 END 语句。 如果多个条件
为真,那么输出将基于第一个条件,因为它是首先被评估(从上到下)。 如果给定条件都不为真,则返回 NULL 值作为输出。

在 WHERE 语句中CASE 语句也可以与逻辑运算符一起使用。 这些逻辑运算符包括:

符号 解释
= 等于
<> 不等于
> 大于
< 少于
>= 大于或等于
<= 小于或等于
BETWEEN 两个值之间的范围
LIKE 匹配这样的模式
IN() 匹配可选值的选项

获取客户的姓氏、名字并按一定条件分类为 ‘store 1 active’, ‘store 1 inactive’, ‘store 2 active’, 或 ‘store 2 inactive’

select distinct first_name, last_name,
	case
    when store_id =1 and active=0 then "store 1 inactive"
    when store_id =1 and active=1 then "store 1 active"
    when store_id =2 and active=0 then "store 2 inactive"
    when store_id =2 and active=1 then "store 2 active"
    else "no sense"
    end
    as Active_status
from customer;

按影片名称长度分组

SELECT distinct
	length,
    CASE
		WHEN length<60 THEN 'UNDER 1 HR'
        WHEN length BETWEEN 60 AND 90 THEN '1 - 1.5'
        WHEN length>90 THEN 'OVER 1.5 HRS'
        ELSE ' UH NO... CHECK LOGIC'
	END 
    AS length_bucket
FROM film; 

检索包含影片标题的列表,并指定影片是否适合推荐。如果没有,请说明原因

select distinct	
	title,
    case 
    when rental_duration<=4 then 'rental too short'
    when rental_rate>=3.99 then'too expensive'
    when rating in('tNC-17', 'R') then 'too adult'
    when length not between 60 and 90 then ' too short or too long'
    when description like '%Shark%' then 'nope has sharks'
    else 'great recommendation'
    END
    as fit_for_recommendation
from film;

检索按store_id(以行为单位)和活动状态(以列为单位)细分的客户数量

select store_id,
       count(case when active=0 then active else null end) as inactive_count,
       count(case when active=1 then active else null end) as active_count
from customer
group by store_id;
总结

持续学习SQL是非常重要的,SQL 是一种非常有用且流行的技术,如今许多公司都在使用它。这是一种非常简单易懂的语言。您只需要了解查询中的逻辑即可。如果您了解该语言,那么您将很容易将查询写入给定问题。 总的来说,在这篇文章中,我们已经看到,

  • 如何对mavenmovies数据库进行数据查询

  • 我们执行的任何查询仅为单表方式

  • SQL 语句的六大元素和一些样例

  • CASE 语句样例

原文标题:Single Table Analysis with MYSQL
原文作者:Amrutha K 
原文地址:https://www.analyticsvidhya.com/blog/2022/06/single-table-analysis-with-mysql/

免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论