IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 数据库DQL单表查询 -> 正文阅读

[大数据]数据库DQL单表查询

?以下数据都出自该表

单表查询语句
#         SELECT 字段/字面量/聚合函数(分组函数)...
#         FROM 表名
#         WHERE 筛选条件(不允许出现分组函数)
#         GROUP BY (分组)字段1,字段2...
#         HAVING 筛选条件(只能出现聚合函数和分组字段)
#         ORDER BY 排序字段1 [ASC]升序/DESC降序,字段2 [ASC]升序/DESC降序,... [ASC]升序/DESC降序;

# 语句执行顺序:
#     1、from
#     2、where
#     3、group by
#     4、having
#     5、select
#     6、order by

distinct 去重:对字段中的相同数据去重为一条数据,也可对多字段去重。
用法:SELECT DISTINCT 字段1,字段2... FROM 表名;
注意:distinct关键字前面不允许加字段或字面量.


#ORDER BY:排序  ORDER BY 字段名1,字段名2... [ASC]/DESC;
#       1、位于查询语句的最后一句,为了不破坏排序结果要等所有语句操作执行完才能执行排序。
#       2、ASC是升序(默认不写),DESC是降序。
#       3、多字段排序的时候,是以第一的字段为主导,第二或第一以后的全部字段是起辅导作用。也就是,先后顺序的意思。
#       4、排序还可以字段位置但考虑到查询的健壮性不建议使用。如:ORDER BY 数字1,数字2... [ASC]/DESC;

此处补充一下:limit 接在order by后面作为跳转查询,使用方法如 limit [起始位置,长度]。起始位置从下标0开始,所以查询某段想要的数据行。

SELECT * FROM emp ORDER BY dept_id ASC,sal DESC;

SELECT * FROM emp ORDER BY 4 DESC,5;

#查询的是第3+1行开始往后数4条数据,也就是排序后第4、5、6、7行的数据。
SELECT * FROM emp ORDER BY sal DESC LIMIT 3,4;

#数据处理函数又称为单行处理函数。常见:lower、upper、length、trim、concat、substr、round、rand、str_to_date、date_format、format、case..when..then..when..then..else..end。
#聚合函数(分组函数)又称为多行处理函数。常见:min、max、avg、sum、count。一般搭配group by分组使用,若未分组则默认为一组。
#单行处理函数的特点:一个输入对应一个输出(一行数据处理)
#多行处理函数的特点:多个输入对应一个输出(一个字段(列)的数据进行处理)


#单行处理函数
#   注意:SELECT 可以查询字段也可以查询字面量
#           1、查询字段就是根据列显示,将字段中的数据按列显示
#           2、查询字面量则是根据表中有多少行就显示多少条字面量。字面量显示行数据,是查询的数据。
#           3、字面量是可以用单引号'数据',也可以不用单引号' '表示,但是不能是双引号" "。
#           4、查询时SELECT后面放入数字字面量是表示查询第几列,一般是覆盖所有显示行。
#       SELECT 字段(属性列)/字面量 FROM 表名;

# lower() 转小写:SELECT lower(字段/字面量) FROM 表名;

SELECT LOWER('sdaNDFdfsMI') FROM emp;
# upper() 转大写:SELECT upper(字段/字面量) FROM 表名;

SELECT UPPER('sdasdhfjHKDF') FROM emp;
# length() 长度:SELECT length(字段/字面量) FROM 表名; 注意:一个中文字符占3个字节

SELECT LENGTH(name) FROM emp;

SELECT name  FROM emp WHERE LENGTH(name)=6;  #查询两个汉字的名字。
# trim() 去除前后空格: SELECT 字段 FROM 表名 WHERE 字段=trim(前后空格数据);

SELECT TRIM(' 孙悟空     ') FROM emp; #去除空格
SELECT '      孙悟空     ' FROM emp;  #未去除空格
SELECT name FROM emp WHERE name=TRIM(' 孙悟空     '); #判断去除空格的数据
# substr() 截取字符串:SELECT substr(字段/字面量,字符位置,截取长度) FROM 表名;
#           注意:在此处是从1位开始,没有下标0这个说法。所以字符位置根据十进制实际位数来。

SELECT SUBSTR(name,1,1) FROM emp; #截取第一个字符

#给首字母大写
SELECT CONCAT(UPPER(SUBSTR('asdffs',1,1)),SUBSTR('asdffs',2,LENGTH('asdffs')-1));
# concat() 字符拼接:SELECT count(字段/字面量,字段/字面量...) FROM 表名

SELECT CONCAT(name,'HHHH',sal) FROM emp;
# round() 四舍五入:SELECT round(字段/字面量,位置) FROM 表名

SELECT ROUND(233.523); #不设置位置参数,默认对整数操作
SELECT ROUND(233.523,0); #设置0位置忽略小数位置
SELECT ROUND(233.523,1); #设置保留1位小数并四舍五入
SELECT ROUND(233.523,5); #保留5位小数,不足位置补0
SELECT ROUND(233.523,-1); #-1是对个位进行四舍五入,个位补0
SELECT ROUND(233.523,-2); #-2对十位四舍五入,十位个位补0
SELECT ROUND(233.523,-5); #-5对万位四舍五入,这里进位是不足的,补0就是0
SELECT ROUND('233.52a3',4); #碰到不是数字的就不返回后面内容。
# rand() 随机数:SELECT rand([字面量/字段]) FROM 表名;
#       注意:RAND(字面量/字段)括号中添加了字面量或者字段的话,那么就是相当于本次随机数值赋值给该字面量或者字段了,下次运行还是这个结果
#           要是没指定字面量/字段的话那么是没有’容量‘来存储随机值,也就每次运行的随机值结果不一致了。
SELECT RAND(sal) FROM emp;

SELECT ROUND(RAND()*100,2) R; #生成一个0~100之间的随机数并保留两位小数。
# case.. when..then..when..then..else..end;
# 判断语句:case 字面量/字段 when 条件1 then 满条件1执行 when 条件2 then 满足条件2执行 .... else 都不满足条件,执行! end;
#       注意:只能有一个条件执行。
SELECT 
CASE 'hello' 
WHEN substr('hello',1,1)='h' THEN 'H' 
WHEN substr('hello',1,1)<>'h' THEN 'h' 
ELSE 'hello' 
END;
# IFNULL 判断为空 SELECT IFNULL(字段/字面量,如果为空就赋值) FROM emp;
SELECT IFNULL(sal,0) FROM emp; #如果sal字段的某条数据为空就给null=0;


# 多行处理函数
# 分组函数(聚合函数)
#   1、分组函数没使用分组查询group by的话那么默认是在一个组当中
#   2、分组查询是执行group by分组之后的,而select的执行顺序from->where->group by->having->select是处在group by之后所以可以进行聚合操作。
#   3、分组函数不能出现在where子句当中,因为where执行顺序在group by之前
#   4、分组函数是默认不计算null的,也就是忽略null值。想要加入null的数据的话就进行ifnull赋值

# min 最小值
SELECT MIN(sal) FROM emp;

# max 最大值
SELECT MAX(sal) FROM emp;

# avg 平均值
#       注意:求平均值的时候要是字段中存在null值,那么会忽略不计入平均值数据。那么我们需要对它进行ifnull空判断赋值才能达到全字段平均值效果。

#       SELECT AVG(IFNULL(sal,0)) FROM emp; 
#在求平均值之前进行null=0操作,有了值的数据就会算入平均之中。

SELECT AVG(sal) FROM emp;

# sum 求和:

SELECT SUM(sal) FROM emp;
# count 统计:
#       注意:统计表的行数,*是代表全部的字段,因为没有哪一行的数据会全部同时存在null值。

#           SELECT COUNT(*) FROM emp; 
# 因为分组函数不对null数据进行计算,所以我们就把所有的数据进行统计从而得到表中行数

SELECT COUNT(sal) FROM emp;

# group by 分组查询
#       1、对数据进行分组查询操作,并且对聚合函数进行改变。执行在聚合函数之前。
#       2、group by对字段进行分组。可以进行多字段分组
#       3、多字段分组,以第一个字段为主,其后字段为辅
#       4、需搭配聚合函数使用c

#            注意:SELECT sal FROM emp GROUP BY dept_id;
 # 报错! 未对分组进行数据整合,所以我们需要加上聚合函数

SELECT MAX(sal) FROM emp GROUP BY dept_id;

# having 筛选(分组函数/分组字段)
#         1、having筛选的数据可以是字段和聚合函数。但是出于性能考虑一般是用来筛选聚合函数;
#         2、having与where两者都是筛选但最大区别是可以对聚合函数进行操作,where则不行。这就跟他们的执行顺序有关了where执行在group by之前,having在之后
#         3、但是where也有能比having的优势那就是where执行的越前那么对筛序的数据就越早,以此给其他函数和语句减轻不必要的数据量。
#         4、如果having之前没有group by也可以对分组函数进行筛选,因为查询表中没有group by默认分为一组,如果有group by则执行顺序依旧在group by之后。

select sal,name from emp having sal=1250; #没有聚合函数也可以筛选,对应着默认分一组。

select min(sal) from emp having min(sal)>700; #对聚合函数筛选

# 例题:查询所有部门里有哪几种工作,并对该工作高于1000工资进行求平均,筛选出平均结果大于2000的数据并对平均结果降序排序

SELECT dept_id,AVG(sal) avg_sal,job 
FROM emp 
WHERE sal>1000 
GROUP BY dept_id,job 
HAVING AVG(sal)>2000  
ORDER BY dept_id ASC,avg_sal DESC;

End...

DQL多表关系查询见:https://blog.csdn.net/qq_48475590/article/details/126934276?spm=1001.2014.3001.5502

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:35:41  更:2022-09-21 00:38:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:57:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码