单表查询

准备工作

单表查询是SQL教程中最基础、最复杂的内容,在这一部分,会讲解两个方面的内容:单表查询的基本范式和常用的SQL函数。在开始介绍前,给定一个例子,这样方便大家直观的理解SQL是如何查询的。以学生各科成绩为例,其表格内容如下:

student_id name grade subject score
101 张三 一年级 数学 70
101 张三 一年级 语文 80
202 李四 二年级 英语 95

创建上面表格及写入数据的SQL语句如下:

CREATE TABLE student
    (`student_id` int, 
     `name` varchar(4),
     `grade` varchar(6),
     `subject` varchar(7), 
     `score` int)
;

INSERT INTO student
    (`student_id`, `name`, `grade`, `subject`, `score`)
VALUES
    ('101', '张三', '一年级', '数学', '70'),
    ('101', '张三', '一年级', '语文', '80'),
    ('202', '李四', '二年级', '英语', '95')
;

当然也可以上传数据,但是网页对于上传数据的字段的数据类型识别可能不准确,仍然需要修改下字段的数据类型。

student_id是学号;name是学生姓名;grade是学生所在年级;subject是相应的科学名称;score是学生在这次考试中的分数。同时,我们把这张表定义为student表。

针对单表查询,其基本的查询范式如下,接下来的讲解也是围绕这个基本范式展开

select
    col1,
    col2,
    col3
from table1
where ……
group by ……
having ……
order by ……
limit n

select语句

select是数据分析最为常用的,从一张表中选择数据就是使用select。让我们从最简单的查询开始入手,查询一张表的数据。上面我们提到了表是包含两个维度:字段和记录。所以在查询的时候就需要写明白,查询哪些字段以及查询多少条记录。

指定字段名称需要在select后面写相应的字段名称(列名),毕竟有些非常大的表有着非常多的字段,并不需要全部查询出来。那如果需要查询呢,就使用*代替,select *就代表了要查询这张表的全部字段,这样就省去了写出全部字段名称的繁杂。

查询多少条记录,这个功能对于数据分析师而言主要是熟悉数据表的数据结构,如果只是想取一些数据出来认识下数据就会用到这一功能。这个函数最常用的就是limit n(n为正整数),也就是限定选择出n条数据记录。

整理一下最简单的数据查询就是使用select + 字段名称 + from + 表名称 + limit + n。整理成一句话就是:从某张表中取出某几个字段的几条记录。整理成代码就是下面这段。记得字段名称之间需要使用隔开

select 
    col1,
    col2 
from table1 
limit 5

在select中还需要说明的一个语句是distinct,从英文名就能知道这是一个去重的函数,即筛选出不重复的数据。distinct既可以对单列数据去重,也可以对多列数据去重。多列去重就要求多列数据均相同的情况下才会被去重。

例子

以前面定义的学生表为例,现在想查询这张表的全部字段的其中2条记录,SQL就是如下格式:

--方法一:指定字段名,限定查询条数
select
    student_id,
    name,
    grade,
    subject,
    score
from student
limit 2

--方法二:使用*指代全部字段
select
    *
from student
limit 2

select后面是相应的字段名称,代表了想要查询的字段。from后面是表的名称

现在想查看有几个不同的年级,也就是需要distinct grade,查询代码如下:

select 
    distinct grade
from student

使用distinct对变量进行去重

where语句

在select中学习了限定字段名称和记录数量的方法,下一步呢就是考虑查询符合条件的数据。限定记录数量只是为了识别表格的数据内容,并不是查询我们想要的数据,以学生成绩表为例,如果我们想查询某一名学生的成绩,使用字段名称和limit就不可能实现,这时候就需要使用where来进行判断。where,可以理解为一种判断条件,根据where后面的条件进行筛选。需要明确的是,数据表中的筛选是依据字段名称对记录进行筛选。举学生表的例子,想查询张三的成绩,是不是通过姓名这一字段就可以对下面的数据记录进行筛选?明确了这一点where用起来就很方便了。

问题的关键来了,知道是对字段进行判断,那应该如何设定判断条件?在讲具体的判断条件以前,先来说一下变量的数据类型,SQL中变量类型细说起来有很多种,但是从数据分析角度看,可以把变量分成三种类型就可以,那就是数字型、字符型和日期型。这么划分的依据是所使用函数的不同,数字可以进行加减乘除,字符可以进行拼接、拆分、匹配等,日期则可以判断大小、计算时间间隔等。目前的SQL已经像Excel一样智能,表格中变量类型并不严格限制进行相应的运算。比方说以字符型存储的数据,依然可以进行加减乘除运算等,所以只要明确这个变量呈现出什么样式就可以使用相应的函数。

回到where函数,where的主要作用是判断,涉及到的函数分为以下几类:

  • 对于单一条件筛选,where可选的函数包含"="、"!="(或者使用"<>")、">"、"<"、"<="、">="、"in"、"not in"、"like"、between…and…等。

    需要解释的就是"!="(或者使用"<>"),表示不等于;

    in和not in是针对变量与集合的操作,表示在某个限定的范围内在或者不在,如"男" in ("男","女"),肯定是TRUE,not in则为相反含义;

    "like"是匹配函数,是部分字符串的匹配,like通常和通配符%一块使用,其中%表示一个或多个字符。例如"数据科学家进阶之路" like "%数据%",结果就是TRUE。有like自

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

数据分析入门技术篇

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务