数据分析自学(SQL篇)-学习笔记1

首先本人学习跟的视频教程为mosh中字翻译的教程,还是建议大家去听原版:

【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!_哔哩哔哩_bilibili【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!共计155条视频,包括:【第一章】1- 介绍 | Introduction「做好准备」、2- 什么是SQL | What is SQL、3- MySQL Mac系统安装 | Installing MySQL on Mac等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1UE41147KC/?spm_id_from=333.999.0.0

【第一章】SQL介绍

SQL是一种特定目的编程语言,用于管理关系数据库管理系统,或在关系流数据管理系统中进行流处理。 SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。(来自维基百科)

从介绍很容易看得出数据库与SQL有很多关系所在,顾名思义数据库是一个以易访问格式存储的数据集合,里面存储的数据也需要被查询、修改等操作,而SQL只是一种编程语言,还需要一个载具可以使用它,那就是数据库管理系统(DBMS, Database Management System)。其与数据库的关系如下,很清楚看出数据库是通过DBMS来实现数据的各类操作的。

而数据库有很多种分类,本文只分析关系数据库:

关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。简单来说就是表格。

同关系型数据库管理系统语法略有不同,但都是基于标准SQL,本课使用最流行的开源关系型数据库管理系统,MySQL关于MySQL的安装本文不会过多的写,我用的版本是mysql-8.0.15,以及用的不是workbench用的是Navicat来操作的。(但完全是不冲突的!)

超全的数据库分类介绍-阿里云开发者社区

【第二章】在单一表格中检索数据

这一章会涉及各种语法,以下我将逐一向大家介绍。

  1. 选择语句

整体语段

USE sql_store;-- 选择哪一个数据库
SELECT * / 1, 2  -- 纵向筛选列,甚至可以是常数
FROM customers  -- 选择表
WHERE customer_id < 4  -- 横向筛选行
ORDER BY first_name  -- 排序
-- 单行注释
/*
多行注释
*/
  1. USE语句一般是用来选择使用数据库,如果你是直接在数据库里查询的就可以忽略这个语句。像上面的例子中就选择了 sql_store 这一个数据库。

  2. SELECT语句,一般需要搭配from(选择数据库的哪个表)一起使用,作用是查询数据,可选择列,列间数学表达式,特定值或文本。可用AS关键字设置列别名(AS可省略),注意 DISTINCT 关键字的使用。*号代表查询所有列,如果需要查询特定的列则可以将*改为xx,xx。如果要查询列间数学表达式可以写成xx+10之类的,查询的表上会加上新的这一列。

  3. 一般的用法如下,可以先看前两个语句,后面的几个后面我会再来说明

    -- 选择users里的所有列的所有行
    SELECT * FROM users;
    
    -- 选择user特定列(username、email)的所有行
    SELECT username, email FROM users;
    
    -- 添加 WHERE 子句,选择满足条件的行(类似于条件判断语句)
    SELECT * FROM users WHERE is_active = TRUE;
    
    -- 添加 ORDER BY 子句,按照某列的升序排序
    SELECT * FROM users ORDER BY birthdate;
    
    -- 添加 ORDER BY 子句,按照某列的降序排序
    SELECT * FROM users ORDER BY birthdate DESC;
    
    -- 添加 LIMIT 子句,限制返回的行数
    SELECT * FROM users LIMIT 10;

注意:SQL会完全无视大小写(绝大数情况下的大小写)、多余的空格(超过一个的空格)、缩进和换行,SQL语句间完全由分号 ; 分割,用缩进、换行等只是为了代码看着更美观结构更清晰,这些与Python很不同,要注意。

以下是关于基础select语句的举例说明:

1.1 选择sql_store数据库中customers表的所有列(注意第一个;号不能省略)(还有注释--后一定要加空格不然会报错!这个图里面我没有空格所以之后我编译的时候就有问题了)

1.2 选择sql_store数据库中customers表的first_name,phone, points以及points+10,这里还用了AS语句将points+10列改名为'total points'

练习

将sql_store数据库中products表中产品的单价涨价10%作为新单价。

注:取别名时,AS 可省,空格后跟别名就行,可看作是SQL会将将列变量及其数学运算之后的第一个空格识别为AS。

2.WHERE 语句

WHERE 子句用于在 MySQL 中过滤查询结果,只返回满足特定条件的行。类似于条件判断语句。一般用法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

其实理解很简单,就是一个类似于if语句的话,来给查询结果一些限制,这里是一些判断符的介绍:

MySQL WHERE 子句 | 菜鸟教程

直接来练习吧!

练习

查询sql_store数据库中orders表中2019年的订单:

注意:日期的写法xxxx-xx-xx

3.AND, OR, NOT运算符

这里主要就是涉及到逻辑判断的问题,很类似与或非

优先级:数学→比较→逻辑;AND大于OR

这里也直接来做练习吧!

练习

查询sql_store数据库中order_item表中订单号为6总价大于30的商品。

这里有个容易犯错的点就是在where语句里用了别名,会出错。那是因为在SQL中,别名(如 total price)不能直接在 WHERE 子句中使用,因为 WHERE 子句是在 SELECT 子句之前处理的。

4. IN运算符

用IN运算符将某一属性与多个值(一系列值)进行比较,实质是多重相等比较运算条件的简化。

举个例子:

WHERE state = 'va' OR state = 'fl' OR state = 'ga'

上面的语句与下面的语句是等效的:

WHERE state IN ('va', 'fl', 'ga')

直接来练习吧!

练习

查询sql_store数据库中products表中库存量刚好为49、38或72的产品。

5.BETWEEN运算符

想到between当然要想到and啦

意思是这个运算符代表的含义是:在什么什么之间。需要注意的点:

  • 用AND而非括号

  • 闭区间,包含两端点

  • 也可用于日期,毕竟日期本质也是数值,日期也有大小(早晚),可比较运算

  • 同 IN 一样,BETWEEN 本质也是一种特定的 多重比较运算条件 的简化

举个例子:

where points >= 1000 and points <= 3000

可以等效为:

WHERE points BETWEEN 1000 AND 3000

直接来练习吧!

练习

在sql_store数据库中customers表中选出90后的顾客。

6.LIKE运算符

LIKE 子句是在 MySQL 中用于在 WHERE 子句中进行模糊匹配的关键字。它通常与通配符一起使用,用于搜索符合某种模式的字符串LIKE 子句中使用百分号 %字符来表示任意字符,_表示单个字符。如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。一般用法如下:

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;

注意:SQL(几乎)任何情况都是不区分大小写的

直接来练习吧!

练习

在sql_store数据库中customers表中选出1.地址包含 'TRAIL' 或 'AVENUE';2.电话号码以 9 结束(可以很明显看出给出的条件很模糊,所以此时可以不用=而转为用like)

7.REGEXP运算符

REGEXP 用于检查一个字符串是否匹配指定的正则表达式模式,以下是 REGEXP 运算符的基本语法:

SELECT column1, column2, ...
FROM table_name
WHERE column_name REGEXP 'pattern';
-- column_name 是你要进行正则表达式匹配的列的名称
-- 'pattern' 是一个正则表达式模式

正则表达式的用法有很多,一下是知乎的博主的一个小总结

直接开始练习!

练习

分别选择满足如下条件的顾客:

  1. first names 是 ELKA 或 AMBUR

  2. last names 以 EY 或 ON 结束

  3. last names 以 MY 开头 或包含 SE

  4. last names 包含 BR 或 BU

代码如下:

select * 
from customers
where first_name regexp 'elka|ambur'
/where last_name regexp 'ey$|on$'
/where last_name regexp '^my|se'
/where last_name regexp 'b[ru]'/'br|bu'

8.IS NULL 运算符

找出空值,找出有某些属性缺失的记录。举个例子:就是把某一类信息丢失的顾客信息给找出来。

直接做练习吧!

练习

在 orders 中找出还没发货的订单(在线商城管理员的常见查询需求)

ps.因为如果还没有发货的话,其shipper_id就是null。

ps.我们也可以找出已经发货的,其实就是在null前加个否定词not

9. ORDER BY子句(排序语句)

从英文意思就可以看出来,是排序的意思。如果我们需要对读取的数据进行排序,我们就可以 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。ORDER BY(排序) 语句可以按照一个或多个列的值进行升序(ASC)或降序(DESC)排序。基础用法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;

练习

orders_items 表中订单2的商品按总价降序排列:

方法1:

方法2:定义别名再排序

10.LIMIT子句

限制返回结果的记录数量,“前N个” 或 “跳过M个后的前N个”

举个例子:

USE sql_store;
select * 
from customers
limit 3/300/6,3 -- /是或的意思

6, 3 表示跳过前6个,取第7~9个,6是偏移量,如:网页分页 每3条记录显示一页 第3页应该显示的记录就是 limit 6, 3

练习

在customers表中找出积分排名前三的顾客

总结(查询语句)

SELECT 语句完结了,里面的子句顺序固定要记牢,顺序乱会报错 select from where + order by limit 纵选列,确定表,横选行(各种条件写法和组合要清楚熟悉),最后再进行排序和限制。

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值