暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL之

格鲁特的成长记录 2022-07-17
154


作为一名产品经理,在日常工作中会经常面临查问题、查数据、分析数据的事情,奈何我经历的每个研发团队手里的事情都很多、很杂,一方面自己想要的数据不能即时拿到,另一方面也会给我们的研发大佬们增加工作上的负担。基于这样的考虑,我们作为产品经理也就有必要掌握一些基本的数据库查询语句(SQL-DQL)来为产品和研发的工作赋能减重,完成产品的自我救赎,实现获取数据的“小康生活”。那么,在接下来的两到三篇文章我们着重就SQL中的查询语句做一个梳理和分享。大家不要慌,SQL查询相关没有那么恐怖,只要连接好数据库,保证一小时上手,满满的成就感。那我们进入正题~


概述



1. 什么是数据库:英文Data Base,简称DB。顾名思义就是存储数据的仓库,是按照一定格式存储数据的一些文件的组合,其基本单元是表(table)。

2. 什么是数据库管理系统:英文Data Base Managment system,简称DBMS。是专门用来管理数据库中数据的,可以对数据进行增删改查。常见的数据库管理系统有:Mysql、Oracle、MS、Sql Server、DB2、Sybase等

3. 什么是SQL:英文Structured Query Language,简称。是一种结构化语言,是关系型数据库管理系统处理数据的标准语言,可以通过数据库管理系统对数据库和数据进行增删改查操作。

4. 他们之间的关系是什么:数据库管理系统通过执行SQL语句来实现对数据库的增删改查的操作,即:

DBMS——执行——>SQL——操作——>DB

补充:数据库的基本单元是表(table),任何一张表都有行(row,即数据/记录)、列(column,即字段)。每个字段都有字段名、数据类型、约束等属性


SQL的分类


SQL语句有很多种类型,分为DQL、DML、DDL、TCL、DCL。


DQL:数据查询语言,是对数据库的数据通过语句进行查询,凡是带有select关键字的都是查询DQL。

DML:数据操作语言,是通过语句对表中的数据(行row)进行增(insert)删(delete)改(update)的都是DML。

DDL:数据定义语言,是通过语句对表中的结构(列column)进行增(create)删(drop)改(alter)的都是DDL。

TCL:事务控制语言,主要是包括事务的提交(commit)及事务的回滚(rollback)。

DCL:数据控制语言,主要是对数据进行授权(grant)、撤销权限(revoke)...


其中DQL(数据查询语言)是我想分享的重点,毕竟产品经理在平常工作中查询居多,其他的类型我们就不做过多赘述了。


select 语句


select 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。


语法:

select 字段名 from 表名;


其中select和from都是关键字,字段名和表名都是标识符,“;”是SQL语句的结尾。如果要查询多个字段名则在字段名和字段名之间加“,”,如果要查询表中的所有字段,则可以直接用“*”表示( * 表示全部)。注意:SQL语句中不区分大小写。


示例:

select

column_name1,column_name2

from 

table_name;


select 

*

from

table_name;


where 条件查询


where 条件查询

where是SQL中的关键字,是对表中的数据进行按照条件查询,用于提取那些满足指定条件的记录。而不需要将所有数据都查出来。


语法:

select 字段名 from 表名 where 条件;


一般where的条件运算符:



注意:

1. 在一条SQL语句中既有and,也有or时,过滤条件会优先过滤and,再过滤or,如果要先过滤or,需要在or的条件中添加小括号。

2. 通配符说明:

%为替代 0 个或多个字符,如找出名字中包含“小”的:where name like ’%小%’。

_为替代一个字符,如找出名字中第三个字是“小”的:where name like ’_ _小’。

3. Null,是空值,没有任何值,要和0做区分。

4. 在SQL中使用单引号来环绕文本值(大部分数据库系统也接受双引号),如果是数值字段,请不要使用引号。条件查询的条件值同样适用于该规则。


order by 排序


order by是SQL中的关键字,是用于对结果集进行排序,其可以用于对结果集按照一个列或者多个列进行排序,默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC 关键字。当然如果要指定升序也可以使用ASC关键字。

如果需要多个字段排序,则使用“,”隔开,此时,排序按照多个字段从左往右的优先级依次排序。


语法:

select 字段名 from 表名 where 条件 order by 字段名 desc|asc;


示例:

select

column_name1,column_name2,column_name3 

from

table_name 

where 

age > 20 

order by 

column_name1,column_name2 

desc;


翻译:

从table_name中找到年龄大于20的column_name1,column_name2,column_name3,然后按照column_name1进行降序排列,如果两条数据的column_name1一样,则按照column_name2对这两条相同的数据进行排序。


函数


SQL中拥有很多可用于计数和计算的内建函数,分为单行处理函数和多行处理函数

1. 单行处理函数(Scalar):基于输入值,返回一个单一的值,对数据一条一条的处理,处理多少条,返回多少条。与其相对的是多行处理函数。


2. 多行处理函数(Aggregate):计算从列中取得的值,返回一个单一的值,对多条数据进行一次处理,最终输出一条数据。多行处理函数也称为分组函数。


注意:

1. 多行处理函数在执行的时候会自动忽略null,无需像单行处理函数一样需要对null进行处理。

2. 多行处理函数不能直接使用在where子句中,原因是在执行where关键字时还没有对数据进行分组,未分组的情况下使用多行处理函数会报错。(和SQL的关键字执行顺序有关系。)

3. 因为多行处理函数最终只能输出一条数据,所以所有的分组函数可以组合起来一起用。


group by 分组查询


group by分组查询时根据一个或多个列对结果集进行分组,分组函数在使用时必须先进行分组,然后才能使用。如果没有对数据进行分组,整张表默认为一组。group by支持多个字段同时分组,多个字段之间用“,”隔开。


语法:

select 字段名 from 表名 where 条件 group by 字段名;


示例:

select 

column_name1,column_name2,sum(column_name3) 

from

table_name 

where 

age > 20 

group by

column_name1,column_name2;


注意:

在一条SQL语句中,如果有group by关键字的话,select后只能跟[参加分组的字段]、[分组函数],其他的字段不能加入,加入也没有任何意义。


having 子句


在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。having子句可以对分完组的数据进行进一步筛选过滤,having 子句不能单独使用,必须和group by联合使用。一般在SQL语句中如果可以用where进行过滤的尽量先使用where,having的使用一般是对where的过滤进行辅助过滤,最好不用。


语法:

select 字段名 from 表名 where 条件 group by 字段名 having 条件;


示例:

select 

column_name1,column_name2,avg(column_name3) 

from 

table_name 

where 

age > 20 

group by

column_name1 

having 

avg(age) > 50;


综合


综合来看下语法:

select 字段名 from 表名 where 条件 group by 字段名 having 条件 order by 字段名 desc|asc;


以上关键字的执行顺序为:

第一步:from

第二步:where

第三步:group by

第四步:having

第五步:select

第六步:order by


即:from某张表中经过where条件进行过滤,然后根据某些字段进行group by分组,如果条件不够,再经过having过滤一些,然后查询出数据,最后根据字段进行排序。



OK,以上内容为单表查询的内容,下一篇介绍分享多表连接查询。期间我有表述不清楚的或者有问题的大家可以一起讨论,感谢大家,大家一起进步~




文章转载自格鲁特的成长记录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论