DQL的原理:一篇文章让你豁然开朗

简介: DQL的原理:一篇文章让你豁然开朗

DQL查询语句


DQL是一种用于查询数据库中数据的语言。它是SQL(Structured Query Language)的一部分,用于从数据库中检索所需的数据。


FROM子句

别名

SELECT kname,sal*12 sal FROM K

别名本身不区分大小写,而且不能含有空格。如果希望别名区分大小写或者含有空格,在别名使用时用双引号括起来就行。

写别名时,AS 可写可不写,默认。在别名与本来字段名中,中间不能写逗号。

最好写上别名。

WHERE子句

WHERE 子句用于提取那些满足指定条件的记录。(过滤条件)

SELECT  id,kname FROM  K WHERE id=9;

下面的运算符可以在 WHERE 子句中使用

=

等于

<>

不等于

!=

不等于

>

大于

<

小于

>=

大于等于

BETWEEN

在某个范围内

LIKE

搜索某种模式

IN

指定针对某个列的多个可能值

SELECT name,id,age,FROM K where id>2
SELECT name,id,age,FROM K where id<>2

between ...and...

between... and ...判断是否在某一个区间内,

SELECT name,id,age FROM K WHERE id BETWEEN 1 AND 4

LIKE(模糊查询)

通配符可用于替代字符串中的任何其他字符。

通配符

描述

%

替代 0 个或多个字符

_

替代一个字符

select kname,id FROM K where name LIKE '_o%'
//查询第二个字符为o的名称。

IN 和NOT IN

in / not in 判断值是否在列表中或者不在列表中。

SELECT name,id FROM K WHERE id IN(1,2)//等于1或者2
SELECT name,id FROM K
WHERE id NOT IN(1,5)//不能等于1,和5

关键字AND ,OR

SELECT kname,id FROM K WHERE id>1 AND kname='bob'

AND 优先级高于 OR,通常使用括号来提高or的优先级,

SELECT kname,id ,depino FROM K WHERE sal>1500 AND id>5 OR depino=20

SELECT kname,id ,depino FROM K WHERE sal>1500 AND (id>5 OR depino=20)

上面理解为,sal>1500 并且 id>5 这个作为一个条件,或者 depino=20.

可以改为,sal>1500 AND (id>5 or depino=20),这样就可以表示为 sal>1500,并且id>5,或者sal>1500,depino=20

IS NULL 和IS NOT NULL

判断是否为空。

SELECT id,kname FROM K WHERE pid  IS NULL

ANY 和 ALL

ANY和ALL 常用于子查询。

SELECT id,kname,sal FROM K WHERE sal>ANY(1000,1500,2000)

distinct关键字

distinct  对结果中的指定字段值重复记录。(去重)

对于多字段去重,只要组合不同即可。但是distinct,需要放在所有属性名前面。

SELECT DISTINCT id FROM K 
SELECT DISTINCT id,age FROM K

排序---order by 子句

order by 子句,可以根据其后指定的字段对结果集按照该字段的值进行升序或者降序排列。

ASC:升序,不写默认是升序。

DESC:降序

order by 子句必须放在sql语句后面。

select sal,kname from K order by sal DESC

order by 多字段排序

首先先按照第一个字段的排序方式对结果集进行排序,当第一个字段有重复值时才会按照第二个字段排序方式进行排序,一次类推,每个字段都可以单独指定排序方式。

select id,depino,sal from k order by depino,sal DESC

排序字段中含有null 值,null被认作为最大值。

select id,kname,pid from k order by pid DESC

聚合函数

聚合函数(多行函数,分组函数),用来对结果集某些字段的  值进行统计。

MAX,MIN

max,min求给定字段的最大值和最小值。

select max(sal) FROM k
select min(sal) FROM k

AVG,SUM

avg求平均值,sum求总和

select avg(sal),sum(sal) from k

count()函数

count 函数不是对给定的字段值进行统计,而是对给定字段不为null的记录数进行统计。

实际上所有聚合函数都忽略null值统计。

通常查看表的记录数可以使用count(*)

select count(pid) from k
select count(nvl(pid,0)) from k
select count(*) from k

分组

group by 子句

group by 可以将结果集按照其后指定的字段相同的记录看做一组,然后配合聚合函数进行更细分的统计工作。

select avg(sal),depino from k group by depino

group by 也可以根据多个字段进行分组,分组原则为这几个字段值都相同的记录看做一组。

select kname,sal ,depino from k group by sal,depino

在查询select子句中,出现了聚合函数,那么凡是不在聚合函数中的其他的字段必须出现在group by子句中。反过来并不是必须的。

where 中不能使用聚合函数作为过滤条件,原因是过滤时机不对。

where在数据库检索表中数据时,对数据逐条过滤以决定是否查询出该数据时使用的,所以where 用来确定结果集的数据。

使用聚合函数的结果作为过滤条件,那么一定是数据从表中查询完毕(where在查询过程中发挥作用)得到的结果集,并且分组完毕才能进行聚合函数统计结果,得到后才可以对分组进行过滤,由此可见这个过滤时机在where之后进行的。

聚合函数的过滤条件要在having子句中,使用HAVING必须跟在group by子句之后。HAVING是用来过滤分组的。

select avg(sal),depino
from k
group by depino
Having avg(sal)>1000

查询语句的顺序

目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySql基础三之【单表查询进阶操作】
MySql基础三之【单表查询进阶操作】
24 0
|
3月前
|
SQL 缓存 数据库
DML的原理:一篇文章让你豁然开朗
DML的原理:一篇文章让你豁然开朗
68 1
|
3月前
|
SQL Oracle 关系型数据库
DDL的原理:一篇文章让你豁然开朗
DDL的原理:一篇文章让你豁然开朗
26 0
|
11月前
|
存储 算法 数据库
第9章 关系查询处理和查询优化——复习笔记
第9章 关系查询处理和查询优化——复习笔记
|
C语言
你真的学懂if语句了嘛,看完这篇文章你一定会让你有所收获,彻底玩转if语句!(上)
你真的学懂if语句了嘛,看完这篇文章你一定会让你有所收获,彻底玩转if语句!(上)
67 0
|
C语言
你真的学懂if语句了嘛,看完这篇文章你一定会让你有所收获,彻底玩转if语句!(下)
你真的学懂if语句了嘛,看完这篇文章你一定会让你有所收获,彻底玩转if语句!(下)
75 0
|
设计模式 SQL 数据库
《数据库系统原理》第一遍阅读
又是一年自考,总是听师哥师姐说,自考第一遍不过,第二遍再学习的时候感觉会不一样。很开心我有了一次重学《数据库系统原理》的机会,果然就像师哥师姐所说的,我收获到了知识之外的东西。第二遍学习,我体会到的不仅仅是自己的那份从容和淡定,更感受到了大脑自动编织知识网的神奇。
|
SQL 数据库
图解 SQL 执行顺序,通俗易懂!
图解 SQL 执行顺序,通俗易懂!
539 0
|
SQL XML 缓存
面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他(一)
MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简单的 XML 和注解配置规则。使 Map 接口和 POJO 类映射到数据库字段和记录。
157 0
面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他(一)
|
存储 SQL 关系型数据库
MySQL基础——DQL语言的学习(常见函数)
DQL语言学习进阶四(常见函数)!