前言
互联网产品的主要组成部分,就是程序+数据,程序负责处理逻辑,数据负责存储信息,从事IT相关行业,如运营、产品等,了解数据库知识,对工作有很大的帮助,熟悉数据库后,可以拿到一手底层数据,进行数据分析。
本篇教程主要针对完全不懂数据库知识的新手,通过最少入门知识,快速掌握数据库技能。
一、数据库
1、什么是数据库?
顾名思义,数据库是存储数据的仓库,数据库由一张张数据表组成,表就是直接存储数据的“容器”。
每一张数据表, 由字段和数据两部分组成,字段就像Excel里的表头,数据就是具体的信息。数据表都是二维的结构,多张表之间可以通过相同的字段进行关联,这个后面会说。
那么这些填充在表格里的数据,具体有哪些类型呢?
主要有3种类型:①数字 ②字符串 ③日期
名称 | 类型 | 说明 | |
数字 | INT | 整型 | 范围约+/-21亿,如1000 |
BIGINT | 长整型 | 范围约+/-922亿亿 | |
REAL | 浮点型 | 4字节浮点数,范围约+/-1038 | |
DOUBLE | 浮点型 | 8字节浮点数,范围约+/-10308 | |
DECIMAL(M,N) | 高精度小数 | 由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算 | |
字符串 | CHAR(N) | 定长字符串 | 存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串 |
VARCHAR(N) | 变长字符串 | 存储可变长度的字符串,例如,VARCHAR(100)可以存储0~100个字符的字符串 | |
日期 | DATE | 日期类型 | 存储日期,例如,2018-06-22 |
TIME | 时间类型 | 存储时间,例如,12:20:59 | |
DATETIME | 日期和时间类型 | 存储日期+时间,例如,2018-06-22 12:20:59 | |
BOOLEAN | 布尔类型 | 存储True或者False |
别看有这么多数据多类型就有点懵,其实常用的类型主要就表格里标记为红色的部分。
数据库有多种类型,不同类型由不同的公司研发,例如常用的MySql数据库,是由瑞典一家公司开发的,可以免费使用,还有oracle数据库,是美国甲骨文公司开发的,需要付费使用。本文都是以MySql数据库为例。
2、什么是SQL
SQL的全称是:Structured Query Language,翻译成中文叫:结构化查询语言。主要用来向数据库发出指令,进行增、删、改、查等操作,本文只介绍“查”,即如何使用SQL进行数据查询。
二、环境部署
要学习SQL,首先肯定得部署环境,首先,我们需要部署一套服务器,并将MySql安装到服务器上,然后我们安装一个数据库工具,用于连接和操作数据库。完事开头难,别看到上面要部署服务器安装MySql就吓到了,其实很简单,有一套封装好的软件,一键就可以完成安装。下面说说具体流程。
①下载phpstudy并安装
下载地址>> https://www.xp.cn/
下载后直接安装即可
②启动MySql
点击启动,启动后你的电脑上就在运行MySql了。
③下载数据库管理工具Navicat
下载地址>>https://www.pcsoft.com.cn/soft/20832.html
下载完成后,打开软件,就可以看到操作界面:
我们先按照上图创建一个数据库连接,配置好数据库信息后,点击连接测试,提示ok的话,就表示已连上数据库,再点确定保存信息。
保存成功后,左侧连接列表可以看到=>本地数据库服务器,双击即可连接上服务器。
为了进行测试,我们先来创建一个数据库,取名为:test
a. 右键点击 本地数据库服务器,选择创建数据库
b. 按照上图设置,点确定
c. 创建成功,左侧可以看到名为test的数据库,双击就可以打开
到这里,我们环境已经搭建好,并且也创建一个数据库,下面,我们开始创建一些表,来熟悉SQL的语法。
三、语法
我们先创建2张表,一张学生表,一张班级表。学生表记录所有学生,班级表记录所有班级,结构如下:
学生表(表名:student):
id | name | age | sex | class | class_id | score |
1 | 小红 | 18 | 女 | 二班 | 2 | 99 |
2 | 小军 | 22 | 男 | 五班 | 5 | 100 |
班级表(表名:class)
id | class_id | class_name | teacher |
1 | 2 | 2班 | 毛老师 |
5 | 5 | 5班 | 张老师 |
为了创建以上2张表,我们需要在工具里进行操作:
a. 右键点击表,选择创建表,在新窗口中设置字段:
保存的时候,输入表名:sutdent,表就创好了。在建表的时候有要注意:
创建班级表(class):
以上表创建好以后,添加一些测试数据。ok,我们的准备工作就做好了。下面开始学习SQL语法
本文我们只学习查询数据。
查询数据
①基本语法
select * from `表名`
select是选择的意思,星号表示从查询结果中选择显示那几个字段,from表示从哪张表查,表名用键盘左上角那个符号标记,注意不是引号是Esc下面那个键。
例如,我们查询所有学生信息,使用以下sql
select * from `sutdent`
例如,查询结果里,我们只看姓名和成绩,使用以下sql
select name,score from `student`
是不是挺简单的?
②条件查询
select * from `表名` where 条件
在表名后面加where,表示添加查询条件的意思,例如,我们要查询成绩大于99的学生
select * from `student` where score>99
select * from `表名` where 条件1 and 条件2
例如,查询分数大于99且性别为男的学生:
select * from `student` where score>99 and sex = '男'
注意,如果是字符串,需要使用引号标记(和表名使用那个符号不一样)
select * from `表名` where 条件1 or 条件2
满足任一条件就查出来,还可以使用in,例如查询二班、五班的学生:
select * from student where class_id in (2,5)
class_id为2或者5,都可以查出来,相比or,这种方法更常用
select * from `表名` where not 条件2
③投影查询
前面我们提到过,从查询结果里,显示全部字段使用星号(*),如果只显示部分字段,就叫投影查询,例如,从学生表查询结果中,只显示姓名和分数:
select name,score from `student`
查询结果就只显示name和score,还可以对查询出来的结果设置别名,例如将name显示为姓名:
select name as 姓名, score from `student`
④ 排序
排序是使用order by 语句
select * from `表名` order by `字段名`
例如,我们对查询结果按照成绩排序
select * from `student` orderby `score`
默认是按正序,如果倒序的话加desc关键词
select * from `student` orderby `score` desc
⑤聚合查询
例如,查询学生表一共有多少个学生:
select count(*) from `student`
使用聚合查询时,也可以使用where条件,这样就可以查出,男生有多少人,女生有多少人。
处理count(*)聚合查询外,还有以下聚合查询:
sum:求某一列的和
avg:求某一列的平均值
max:求某一列最大值
min:求某一列最小值
在学生表里,有很多是人二班的,有很多人是五班的,那么我们如何分别统计二班有多少人,五班有多少人呢?这时我们可以用分组查询,分别统计出二班、五班有多少人。
select class,count(*) from student group by class
查询结果:
我们查处二班1人,五班1人,这里可以添加更多的学生数据,来进行测试。
⑥连接查询
a. 内连接 inner join
我们注意到,学生表里没有所在班级的班主任信息,如果我们想在查出来的信息中获得班主任信息,怎么办?这时就可以用内连查询。
select * from student s inner join class c on s.class_id = c.class_id
查询结果:
但是inner join有个问题,只能查出在两张表都存在的数据,比如,我们加一个学生,小丽,她没有班级信息,那么在查询结果中,她就不见了,因为她没有班级信息。如何把没有班级信息的人也查出来呢?这时就可以用左连接。
b. 左连接 left join
select * from student s left join class c on s.class_id = c.class_id
查询结果
这样,我们就把小丽也显示出来了,小丽桀骜不驯,没有加入任何一个班,所有没有班级信息。
c. 右连接 right join
假设,我们还有个刘老师,这时,我们想以老师为主角,从老师的角度来看下学生信息,如何查询呢?这是就可以用到右连接。
select * from student s right join class c on s.class_id = c.class_id
查询结果
刘老师教学水平不行,班上还没有学生,所有,没有学生信息。小丽没有班级信息,所以跟他也没半毛钱关系。
以上,就是一个简洁版的SQL入门教程,专注投入可能根本就不用不了1天的时间,但掌握的这些技术却可以终身受用。
通过SQL+Tableau,还可以做出非常多数据可视化视图,对于数据监控、数据分析统计,有非常大的帮助。
以下是我做利用简单SQL+Tableau做出来的一些可视化图表:
另外,在熟悉数据库以后,对数据结构,又有更深的认识,在做产品设计时,会考虑得更全面,以上,就是我总结的一些经验,希望对你有帮助。