一天学会SQL,写给小白的数据库教程

前言

互联网产品的主要组成部分,就是程序+数据,程序负责处理逻辑,数据负责存储信息,从事IT相关行业,如运营、产品等,了解数据库知识,对工作有很大的帮助,熟悉数据库后,可以拿到一手底层数据,进行数据分析。

本篇教程主要针对完全不懂数据库知识的新手,通过最少入门知识,快速掌握数据库技能。

一、数据库

1、什么是数据库?

顾名思义,数据库是存储数据的仓库,数据库由一张张数据表组成,表就是直接存储数据的“容器”。

一天学会SQL,写给小白的数据库教程_第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

一天学会SQL,写给小白的数据库教程_第2张图片

点击启动,启动后你的电脑上就在运行MySql了。

③下载数据库管理工具Navicat

下载地址>>https://www.pcsoft.com.cn/soft/20832.html

下载完成后,打开软件,就可以看到操作界面:

一天学会SQL,写给小白的数据库教程_第3张图片

我们先按照上图创建一个数据库连接,配置好数据库信息后,点击连接测试,提示ok的话,就表示已连上数据库,再点确定保存信息。

保存成功后,左侧连接列表可以看到=>本地数据库服务器,双击即可连接上服务器。

为了进行测试,我们先来创建一个数据库,取名为:test

a. 右键点击 本地数据库服务器,选择创建数据库

一天学会SQL,写给小白的数据库教程_第4张图片

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. 右键点击表,选择创建表,在新窗口中设置字段:

一天学会SQL,写给小白的数据库教程_第5张图片

保存的时候,输入表名:sutdent,表就创好了。在建表的时候有要注意:

  • 需要给每张表至少一个字段设置主键,主键就是唯一不重复的意思,主键不能为空,通常主键都是用id作为唯一标识,id设置为自动递增。

创建班级表(class):

一天学会SQL,写给小白的数据库教程_第6张图片

以上表创建好以后,添加一些测试数据。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
  • 当有多个条件时,使用and表达式
select * from `表名` where 条件1 and 条件2

例如,查询分数大于99且性别为男的学生:

select * from `student` where score>99 and sex = '男'

注意,如果是字符串,需要使用引号标记(和表名使用那个符号不一样)

  • 满足任一条件就查出来时,使用 or
select * from `表名` where 条件1 or 条件2

满足任一条件就查出来,还可以使用in,例如查询二班、五班的学生:

select * from student where class_id in (2,5)

class_id为2或者5,都可以查出来,相比or,这种方法更常用

  • 排除条件时,使用 not
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
  • 可以给表名设置别名来简化书写格式
  • 通过on关键字来将两张表的连起来

查询结果:

但是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做出来的一些可视化图表:

一天学会SQL,写给小白的数据库教程_第7张图片

另外,在熟悉数据库以后,对数据结构,又有更深的认识,在做产品设计时,会考虑得更全面,以上,就是我总结的一些经验,希望对你有帮助。

你可能感兴趣的:(一天学会SQL,写给小白的数据库教程)