数据库基础篇(二)——SQL之数据查询
- 数据准备
- DQL语言的学习
- 基础查询
- 条件查询
- 排序查询
- 分组查询
- 常见函数
- 连接查询
- 子查询
- 分页查询
- union联合查询
当你读到这篇文章时,前提是已经将MySQL的环境以及客户端安装完成(如未安装可参考上篇文章),并掌握了它的基础知识。那么,今天我们来学习SQL语言的DQL,SQL语言分别包括DQL数据查询、DML数据操作、DDL数据定义、TCL事务控制。工作中最常用的是数据查询和数据操作语言;数据定义(建库、建表等)一般由拥有权限的开发人员或者管理人员来创建;事务控制语言通常在开发场景使用的更多。所以,如果你是偏业务或者数据分析方向,重点学习前两个就够用。
接下来,我们将使用员工相关的四张样本数据表,来学习SQL,建议你在学习过程中多动手练习,理解才会更深刻。表和字段含义,如下图:
如何利用SQL语句来操作以上数据呢?我们必须将样本数据导入MySQL客户端(如:Navicat)中。可以在客户端操作数据,或者在终端窗口。工作中经常在客户端操作,所以本文所有SQL语句将在Navicat中学习。
首先将sql脚本保存到桌面(获取方式:关注\”Python之每日一课\”公众号,后来回复\”sql基础数据\”,即可。),导入SQL脚本的具体操作流程如下:
现在数据准备完成。这里是导入sql脚本;导出同理,选择”转储SQL“文件。当然了,Navicat也支持将当前表或查询结果导出Excel、CSV等文件类型。
下面可以写SQL语句了(每个sql脚本可以保存,下次直接使用),如下:
类似于Python中 :print(要打印的东西)
①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
② 要查询的东西 可以是常量值、表达式、字段、也可以是函数
补充:可以给字段起别名,好处是提高可读性,更方便理解;多表连接时,区分字段。用AS 或 空格来实现。如下:
条件查询:根据条件过滤原始表的数据,查询到想要的数据
⭐ 注意:where 一定要放到 from 后面。NULL 不是假,也不是真,而是\”空\”;任何运算符,判断符碰到NULL,都得NULL;NULL的判断只能用is null,is not null;NULL 影响查询速度,一般避免使值为NULL。exists查询可以与in型子查询互换,它们之间区别以后语句优化时会详细讲解。
⭐注意:order by 一定要放到 语句最后(limit前面)
①可以按单个字段分组
②和分组函数一同查询的字段最好是分组后的字段
③分组筛选(where 和 having区别)
④可以按多个字段分组,字段之间用逗号隔开
⑤可以支持排序
⑥having后可以支持别名
⭐ 注意:关键字顺序是where —>group by—>having—>order by—>limit
(having不能单独使用,需结合group by ,表示对分组后的结果进行筛选;
而group by 必须结合分组聚合函数一起使用,比如:count()、max()等)
①以上五个分组函数都忽略null值,除了count(*)
②sum和avg一般处理数值型,max、min、count可以处理任何数据类型
③都可以搭配distinct使用,用于统计去重后的结果
④count的参数可以支持:字段、*、常量值,一般放1
单个表不能满足需求时,需要结合多张表,去除有关联的数据。这时就需要用连接查询,连接查询有三种,通常join使用的最多。
①等值连接的结果 = 多个表的交集
②多个表不分主次,没有顺序要求
③一般为表起别名,提高阅读性和性能
①语法
②好处
语句上,连接条件和筛选条件实现了分离,简洁。
⭐ 注意:左右连接可互换 A left join B 等价于B right join A;内连接是左
右连接的交集;mysql没有外连接。
自连接相当于等值连接,但是等值连接涉及多个表,而自连接仅仅是它自己。如下:在员工信息表里,查询员工名和直接上级的名。
一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询。在外面的查询语句,称为主查询或外查询。
①子查询都放在小括号内
②子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
③子查询优先于主查询执行,主查询使用了子查询的执行结果
④子查询根据查询结果的行数不同分为以下两类:
实际web开发中,当显示的数据,一页显示不完时,需要分页提交sql请求。
①起始条目索引默认从0开始
②limit子句放在查询语句的最后
③公式:select * from 表 limit (page-1)*sizePerPage,
union用于把涉及多个表的SELECT语句的结果组合到一个结果集合中。适用于查
询条件较多,多个表之间没有连接关系的场景。
①多条查询语句的查询的列数必须是一致的
②多条查询语句的查询的列的类型几乎相同
③union 代表去重,union all 代表不去重
UNION 和 UNION ALL 运行结果的区别如下:
⭐ 注意:在多个 SELECT 语句中,第一个 SELECT 语句中被使用的字段名称将被用于结果的字段名称。当使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION。
好,今天学习到这里。工作中用的最多就是查询。如果能消化本文涉及到的所有内容,大概能解决80%的工作需求。本文更多的是原理介绍,例子不多,只有先知道是什么,才能知道怎么学。那么,接下来最重要的是要多练习实践。因为实际的业务场景要复杂很多,给大家推荐两个刷题的网站,力扣和牛客网,里面有大量的sql面试题。能进一步提高我们sql的水平。这篇文章主要是SQL的常用查询。明天继续学习SQL的DML增删改。一起加油!
数据库|SQLServer数据库:数据的基本查询
哈喽,你好啊,我是雷工!
其实对于数据库的查询以前也应用过,只是使用时一般也是根据要实现的要求从网上搜索,能实现应用要求即可,现在根据视频学习,正好有这么一节,就听一遍,查漏补缺,温故知新。
以下为 学习笔记。
查询过程如下图所示:
客户端程序(C#程序或JAVA程序)提交查询请求,数据库服务器返回查询结果;
数据库服务器执行程序提交的查询请求,是在原始数据表中找到符合查询条件的数据,产生一个临时结果集,并未实际创建新表;
3.1、查询语句一般由4个基本部分组成
①查询内容:select AccountName,AccountContent,originality
②查询对象:from Account
③过滤条件:where AccountId<10008
④结果排序:order by AccountId DESC
3.2、查询语法结构
①:select <列名>
②:from<表名>
③:where<查询条件的表达式>
④:order by<根据列名排序>【DESC或ASC】
补充说明:其中③和④是可选的,并非必须的。
①:select*from Author 中的“*”表示查询所有列,实际项目中不这样用;
②:多个条件的连接使用and进行连接;
③:使用【AS】或者【=】可以重新命名字段;
④:使用“+”连接字符型数据,结果为字符串数据的拼接;使用“+”连接数值型数据,结果为数据的算数求和;
⑤:查询为空的使用where <列名> is null;
⑥:限制固定行数:使用select top <行数>……
⑦:限制百分比数:显示百分之三十【select top 30 percent ……】
⑧:升序排列:order by <列名> ASC
⑨:降序排列:order by <列名> DESC
⑩:排序遇到排序列同等数值的时可以增加排序列,多个排序列之间用“,”分割,前一个条件相等时,自动按下一条件排序;
示例:
以上为数据基本查询,各个数据库基本上也是同样的语法,一通百通。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。