零基础快速自学SQL,2天足矣。
此文是《10周入门数据分析》系列的第6篇。
想了解学习路线,可以先行阅读“ 学习计划 | 10周入门数据分析 ”
上一篇分享了数据库的基础知识,以及如何安装数据库,今天这篇分享数据库操作和SQL。
SQL全称是 Structured Query Language,翻译后就是结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
至于 ORACLE、DB2、Sybase、SQLServer、MySQL、MS Access等都是数据库,虽然语法上有差异,但是基本上都是大同小异。作为一名数据从业者,虽然市面上有很多很智能很自助的数据工具,甚至有的拖拖拽拽就能实现,但作为一名报表工程师、数据分析师,不懂一点SQL是绝逼不行的。
之前很多文章对于SQL都一笔带过,轻描带写,略忽视这项基本技能的重要性,所以今天就来讲讲如何学习SQL。
市面上都大量的书籍和教学视频,这里就帮大家提炼核心要点,给个学习方向。
本次的文章主要从以下几个方面进行说明,大家可以参考着学习。
- SQL快速学习路线
- 数据库表基础操作
- SQL基础语句
- SQL高级语句
SQL快速学习路线
零基础自学SQL时通常会遇到2个坑:
一坑:学习之前先安装数据库软件,可以是SQL Sever,也可以是MySQL。对于新人而言,安装数据库软件挺费时间,坑太多。我刚上大学那会要求2天内自学SQL,结果我花了1天时间安装SQL Sever。前一篇文章分享了MySQL的安装教程,刚开始学用不上太庞杂的功能,所以推荐小而美的MySQL,SQL Sever也是可以的。
二坑:一上来就背SQL语法。我看过太多新人在那边吭哧吭哧做笔记背SQL,个人不赞成这种学法,不实践记不住。就和Excel函数一样,理解含义和如何使用,关键时候去w3school查询一下就行了,以后用得多了自然就掌握了。(后台回复关键词“SQL”获得)
SQL学习路线
1、下载安装MySQL,或者安装软件phpstudy(这个软件自带了mysql数据库,而且安装启动方便)。
2、我这里用的是phpstudy,打开phpstudy后,点击下图中的启动,点击后数据库服务就会启动了。
3、下载安装Navicat软件
这个软件可以轻松连接数据库,我们可以在这个软件中练习学习SQL语法
4、使用Navicat建立数据库连接
点击文件——新建连接,连接名随便填写,比如我写的是“本地”。主机名、端口都不需要修改,用户名和密码都是root(因为我们安装的phpstudy里的mysql默认用户名密码就是root),点击连接测试显示为成功后点确定保存。
以后再次访问时,双击即可。
5、下载习题进行学习,内含习题需要用到的数据表。
6、导入第5步中下载的数据表。(后台回复关键词“SQL”获得)
右击第4步中的“本地”,新建一个数据库test1,双击打开新建的数据库(打开后颜色是绿色)。
拖拽刚才下载的数据表文件(sqltest1.sql)到test1上面。

这时会出现上述弹窗,点击开始,等待导入完成后,点击关闭
在左侧空白处右击,选择“刷新”,即可看到刚才导入的数据表了。
7、打开sql语法编辑器
如下图点击查询——新建查询,在空白处输入sql语法,点击运行,如果输入错误会有报错,输入正确则会返回查询内容。

8、边做边学
打开第一部分习题,边做边学,通过查询w3c的sql语法手册完成
9、巩固练习
尝试不看sql语法手册,独立完成第二部分习题。
以上是sql的学习路径,接下来是sql语句的学习,掌握使用场景和含义,具体语法就不做解释了,大家参考w3c的sql语法手册学习。这里我归了下类,挑重点讲。
数据库表基础操作
首先数据库表必掌握的基础操作,建表、删表、往表里增数据、往表里删数据以及最重要的取数等等。
1、CREATE TABLE(建表)
怎么着也得先建立表~
当你建表成功后,发现忘记添加主键,或者忘记添加外键,莫着急。使用以下咒语即可:
建好的表如下:
2、INSERT(插入)
向表中插入数据
3、UPDATE(更新)
4、DELETE(删除)
在使用delete删除emp表中数据时,要注意该表与其他表是否存在关联关系,比如:外键。emp表id是表orders的外键,如果要删除emp表中的id,得先删除orders表中的外键。
5、distinct(去重)
在表中,可能会包含重复值,这并不成问题。不过,有时你也许希望仅仅返回唯一不同的值。使用distinct关键字进行处理,用于返回唯一不同的值。
注意:distinct关键字是去重!去重!去重!*把列中的重复值去掉!
曾经我在笔试的时候,有道SQL考题:请写出表中所有重复的name的所有数据。我当时没反应过来,直接就用了distinct关键字,后来就....
6、Select(取数)
SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。这是以后最常用的操作,占据你90%。
SQL SELECT 语法
SELECT 列名称 FROM 表名称
以及:
SELECT * FROM 表名称
比如需获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表),请使用类似这样的 SELECT 语句:
SELECT LastName,FirstName FROM Persons
SELECT通常结合其他函数和语法使用。
SQL基础语句
在实际的SQL使用中,肯定会涉及到有关函数的使用,这里简单介绍几种初学时必学的函数类型。
1、AVG()
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
2、COUNT()
COUNT( ) 函数用于返回匹配指定条件的行数。
3、MAX()
MAX函数返回指定列的最大值,NULL值不包括在计算中
4、MIN()
MIN函数返回的指定列的最小值,NULL值不包括在计算中
5、SUM()
SUM函数返回指定列的总数
6、ROUND()
ROUND 函数用于把数值字段舍入为指定的小数位数
round函数需要的参数

7、FORMAT()
FORMAT 函数用于对字段的显示进行格式化
format函数需要的参数
SQL高级语句
这一部分的内容是通常用到的,属于最开始学习SQL知识时必须要熟练的,我这里大致列出几项。
1、LIMIT
2、LIKE
一般配合where使用,搜索条件中的指定模式
在上面我们可以看到,通配符“%”的使用方法,所以通配符必须要配合like 运算符一块使用。
通配符还有以下几种:
3、IN
从字面意思就可以知道它的作用是什么了
4、JOIN
联表运算符JOIN,该运算符是用于将两个或者两个以上的表进行关联,并从这些表中查询数据。
对于联表来说,通过使用主键(primary key)和外键(foreign key)也可以建立连接。
除了上述直接使用条件关联,下面我们可以用可读性更高的INNER JOIN来写
还有其他几种方连接方式(外连接):
- LEFT JOIN:就算右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN:即使左表没有匹配,也行右表返回所有的行
- FULL JOIN:只要有一个表存在着匹配,就返回行
5、ALTER
穿插介绍一下alter,前面的例子中已经包含了几种alter使用方法。
6、UNION
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
上面引用的意思就是:道不同,不相为谋!
UNION和UNION ALL命令几乎是等效的,不过加了“ALL”,就会列出所有的值。
注意:因为其也具有“唯一性”,容易和PRIMARY KEY混淆。面试或笔试常考两者的不同,在这里说明一下:
与PRIMARY KEY不同的是,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
为表添加UNION,这里给出使用的SQL语法。
7、AUTO-INCREMENT(自增)
在运用中,我们希望在每添加一条数据后,自动的为我们的主键创建值。
8、ORDER BY
在前面中已经使用到了有关order by的SQL语句,order by该语句用于对结果集进行排序,默认是进行ASC正序排序(从小到大)。
排序的两种方式:
- ASC:升序(从小到大)
- DESC:降序(从大到小)
举栗:
ASC排序
对于DESC排序,这里就不进行举例了,大家可以自己写SQL试一下。
9、GROUP BY
通常配合合计函数使用,根据一个或多个列对结果集进行分组。

具体的用法在介绍函数时会涉及到。
10、HAVING
在上面的例子中,我们使用where关键字来增加查询条件,这里增加having字句是因为,where关键字无法与合计函数一起使用
同样引用上面的SQL语句。
具体的用法在介绍函数时会涉及到。
11、DEFAULT
DEFAULT约束用于向列中插入默认值。
本次文章中写的相关知识点是我以前在学习中随手记录的,对一些SQL大牛来说,这些已经是耳熟能详了。会不会让你们产生一种灌水的错觉????哈哈~
此文是《10周入门数据分析》系列的第6篇。
相关文章:
零基础快速自学SQL,2天足矣。
此文是《10周入门数据分析》系列的第6篇。 想了解学习路线,可以先行阅读“ 学习计划 | 10周入门数据分析 ” 上一篇分享了数据库的基础知识,以及如何安装数据库,今天这篇分享数据库操作和SQL。 SQL全称是 Structured Query Language&#x…...
Meta开源数字水印Stable Signature,极大增强生成式AI安全
全球社交、科技巨头Meta(Facebook、Instagram等母公司)在官网宣布,开源数字水印产品Stable Signature,并公开论文。 据悉,Stable Signature是由Meta和INRIA(法国国家信息与自动化研究所)联合开…...
python实现分词器
在Python中实现分词有很多方法,具体取决于你的应用场景和数据。下面我会介绍一种常用的分词库——jieba。如果你的数据是英文,你也可以使用nltk库。 中文分词 使用jieba进行中文分词: 首先,你需要安装jieba库。如果还未安装&am…...
第五十二章 学习常用技能 - Global 映射
文章目录 第五十二章 学习常用技能定义数据库定义命名空间Global映射 第五十二章 学习常用技能 定义数据库 创建本地数据库: 登录管理门户。选择系统管理 > 配置 > 系统配置 > 本地数据库。选择创建新数据库以打开数据库向导。输入新数据库的以下信息&a…...
vue实现瀑布流
1、在 src 目录下创建 component文件夹,在文件夹中创建 vue文件。 2、在 Vue文件中写入以下内容 <div class"pubu"><div class"left"><div class"pubu-item" v-for"item in left" :key"item.id"…...
【虹科干货】Redis Enterprise 自动分层技术:大数据集高性能解决方案
越来越多的应用程序依赖于庞大的数据集合,而这些应用程序必须快速响应。借助自动分层,Redis Enterprise 7.2 帮助开发人员轻松创建超快的应用程序。何乐而不为? Redis将数据存储在内存中,因此应用程序能以最快的速度检索和处理数…...
代码随想录训练营二刷第五十四天 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
代码随想录训练营二刷第五十四天 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 一、300.最长递增子序列 题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/ 思路:定义dp[i]表示从0到i的闭区间的最长子序列长…...
LeetCode 2562. 找出数组的串联值【数组,相向双指针】1259
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
SpringBoot使用的时间与空间计量单位
SpringBoot支持JDK8提供的时间与空间计量单位 //时间单位DurationUnit(ChronoUnit.MINUTES)private Duration serverTimeOut;//存储空间单位DataSizeUnit(DataUnit.MEGABYTES)private DataSize dataSize; 在springboot中的具体使用: Component Data ConfigurationPr…...
【使用 TensorFlow 2】02/3 使用 Lambda 层创建自定义激活函数
一、说明 TensorFlow 2发布已经接近2年时间,不仅继承了Keras快速上手和易于使用的特性,同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则:简化概念,海纳百川,构建生态.这是本系列的第三部分,…...
docker--使用docker login 报错解决方案
我们在本地使用 docker login 命令登录时报错,可以尝试一下先 docker logout 命令退出登录后,在使用 docker login命令进行登录操作; docker logout...
leetcode oj
150. 逆波兰表达式求值 - 力扣(LeetCode) 思路:定义一个名为 Solution 的类,并在其中定义了一个名为 evalRPN 的公共函数。这个函数接受一个由字符串组成的向量 tokens 作为输入,并返回一个整数。 在代码中࿰…...
黑马点评-05缓存穿透问题及其解决方案,缓存空字符串或使用布隆过滤器
缓存穿透问题(缓存空) 缓存穿透的解决方案 缓存穿透(数据穿透缓存直击数据库): 缓存穿透是指客户端请求访问缓存中和数据库中都不存在的数据,此时缓存永远不会生效并且用户的请求都会打到数据库 数据库能够承载的并发不如Redis这么高,如果大量的请求同时访问这种…...
Flink之窗口聚合算子
1.窗口聚合算子 在Flink中窗口聚合算子主要分类两类 滚动聚合算子(增量聚合)全窗口聚合算子(全量聚合) 1.1 滚动聚合算子 滚动聚合算子一次只处理一条数据,通过算子中的累加器对聚合结果进行更新,当窗口触发时再从累加器中取结果数据,一般使用算子如下: aggregatemaxmaxBy…...
K8S:Rancher管理 Kubernetes 集群
文章目录 一.Rancher 简介1.Rancher概念2.Rancher 和 k8s 的区别 二.Rancher 安装及配置1.安装 rancher2.登录 Rancher 平台3.Rancher 管理已存在的 k8s 集群4.Rancher 部署监控系统5.使用 Rancher 仪表盘管理 k8s 集群 三.拓展1.Rancher和kubesphere相比较2.K3S和K8S相比较 一…...
后台运行python程序并查看运行的python 进程
nohup python -u Job.py > log.log 2>&1 &说明: 末尾的“&”:表示后台运行程序 “nohup” :保证程序不被挂起 “python”:是执行python代码的命令 “-u”:表示不启用缓存,实时输出打印…...
树莓派部署.net core网站程序
1、发布你的项目 使用mobaxterm上传程序 回到mobaxterm,f进入目录输入: cd webpublish 运行程序:dotnet WebApplication1.dll 访问地址为:http://localhost:5000,尝访问如下: 已经出现 返回的json,证明是可以访问的…...
淘宝商品评论数据接口,淘宝商品评论API接口
淘宝商品评论数据接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL,可以向淘宝服务器发起HTTP请求,获取商品评论数据。接口返回的数据一般为JSON格式,包含了商品的各种评价信息。获取到商品评论数据后,可以对其进行处理…...
455. 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] …...
GEE:数据预处理的细节(处理顺序。比如, select() 和 filter() 要优先于 map())
作者:CSDN @ _养乐多_ 大家在数据预处理的时候,是不是随意进行处理,并没有考虑 Google Earth Engine(GEE)性能的问题?比如选择数据集的时候,先执行map函数,再按时间选择数据?不同的处理顺序会导致不同的计算成本。 因此,本文将探讨如何在 GEE 中筛选和选择数据集合…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
