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

前言

互联网产品的主要组成部分,就是程序+数据,程序负责处理逻辑,数据负责存储信息,从事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):

idnameagesexclassclass_idscore
1小红18二班299
2小军22五班5100

班级表(表名:class)

idclass_idclass_nameteacher
122班毛老师
555班张老师

为了创建以上2张表,我们需要在工具里进行操作:

a. 右键点击表,选择创建表,在新窗口中设置字段:

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

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

创建班级表(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
  • 当有多个条件时,使用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做出来的一些可视化图表:

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

  • 11
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值