SQL运算符优先级及逻辑处理顺序
运算符是保留字或主要用于SQL语句的WHERE子句中的字符,用于执行操作.
例如:比较和算术运算。 这些运算符用于指定SQL语句中的条件,并用作语句中多个条件的连词。
常见运算符有以下几种:
算术运算符
比较运算符
逻辑运算符
否定条件运算符
SQL 运算符优先级:
SQL算术运算符
假设变量 a 的值是:10,变量 b 的值是:20,以下为各运算符执行结果:
运算符 | 描述 | 例子 |
---|---|---|
+ | 加法,执行加法运算。 | a + b 得到 30 |
- | 减法,执行减法运算。 | a - b 得到 -10 |
* | 乘法,执行乘法运算。 | a * b 得到 200 |
/ | 用左操作数除右操作数。 | b / a 得到 2 |
% | 用左操作数除右操作数并返回余数。 | b % a 得到 0 |
SQL比较运算符
假设变量 a 的值是:10,变量 b 的值是:20,以下为各运算符执行结果:
运算符 | 描述 | 例子 |
---|---|---|
= | 检查两个操作数的值是否相等,如果是,则条件为真(true)。 | (a = b) is false. |
!= | 检查两个操作数的值是否相等,如果值不相等则条件为真(true)。 | (a != b) is true. |
<> | 检查两个操作数的值是否相等,如果值不相等则条件为真(true)。 | (a <> b) is true. |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件为真(true)。 | (a > b) is false. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件为真(true)。 | (a < b) is true. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真(true)。 | (a >= b) is false |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件为真(true)。 | (a <= b) is true. |
!< | 检查左操作数的值是否不小于右操作数的值,如果是,则条件变为真(true)。 | (a !< b) is false. |
!> | 检查左操作数的值是否不大于右操作数的值,如果是,则条件变为真(true)。 | (a !> b) is true. |
SQL逻辑运算符:
这是在SQL所有的逻辑运算符的列表。
运算符 | 描述 |
---|---|
ALL | ALL运算符用于将值与另一个值集中的所有值进行比较。 |
AND | AND运算符允许在SQL语句的WHERE子句中指定多个条件。 |
ANY | ANY运算符用于根据条件将值与列表中的任何适用值进行比较。 |
BETWEEN | BETWEEN运算符用于搜索在给定最小值和最大值内的值。 |
EXISTS | EXISTS运算符用于搜索指定表中是否存在满足特定条件的行。 |
IN | IN运算符用于将值与已指定的文字值列表进行比较。 |
LIKE | LIKE运算符用于使用通配符运算符将值与相似值进行比较。 |
NOT | NOT运算符反转使用它的逻辑运算符的含义。 例如:NOT EXISTS, NOT BETWEEN, NOT IN等等,这是一个否定运算符。 |
OR | OR运算符用于组合SQL语句的WHERE子句中的多个条件。 |
IS NULL | IS NULL运算符用于将值与NULL值进行比较。 |
UNIQUE | UNIQUE运算符搜索指定表的每一行的唯一性(无重复项)。 |
sql逻辑处理顺序
from
where
group by
having
select
over
distinct
top
order by
SQL开启和关闭查询
--SET STATISTICS TIME ON------------------------------------------- --请先来看看SET STATISTICS TIME ON会返回什么信息。先运行语句: DBCC DROPCLEANBUFFERS --清除buffer pool里的所有缓存数据 DBCC freeproccache GO --清除buffer pool里的所有缓存的执行计划 SET STATISTICS TIME ON GO set statistics profile on set statistics io on set statistics time on go select * from hk_orders a left join hk_orders_sub b on a.order_no=b.order_no set statistics profile off set statistics io off set statistics time off
执行字段说明 :set statistics profile on :
Rows:执行计划每一步返回的实际行数
Executes:执行计划每一步执行的次数
StmtText:执行计划的具体内容,每一步都有自己的执行内容,且有结果返回,当然每执行一次,都会花费系统资源(时间 cpu 内存)
EstimateRows:SQL Server预估每一步执行返回的行数,我们经常将EstimateRows与Rows的值进行对比,确认SQL Server是否预估准确
EstimateIO:SQL Server预估每一步执行所花费的I/O资源
EstimateCPU:SQL Server预估每一步执行所花费的CPU资源
TotalSubtreeCost:SQL Server根据EstimateCPU和EstimateIO来计算出的每一步执行计划的cost(该值包括了自己和该树下所有子树执行计划的cost的总和)
Warnings:SQL Server预估所预告的警告(例如:某一步执行没能找到统计信息支持SQL Server预估)
Parallel:是否使用了并行的执行计划
StmtText字段具体说明:
1. 【Table Scan】:遍历整个表,查找所匹配的记录行。这个操作将会一行一行的检查,当然,效率也是最差的。
2. 【Index Scan】:根据索引,从表中过滤出来一部分记录,再查找所匹配的记录行,显示比第一种方式的查找范围要小,因此比【Table Scan】要快。
3. 【Index Seek】:根据索引,定位(获取)记录的存放位置,然后取得记录,因此,比起前二种方式会更快。
4. 【Clustered Index Scan】:和【Table Scan】一样。注意:不要以为这里有个Index,就认为不一样了。其实它的意思是说:按聚集索引来逐行扫描每一行记录,因为记录就是按聚集索引来顺序存放的。而【Table Scan】只是说:要扫描的表没有聚集索引而已,因此这二个操作本质上也是一样的。
5. 【Clustered Index Seek】:直接根据聚集索引获取记录,最快!
原文链接: https://www.yukx.com/moran/article/details/972.html 优科学习网SQL运算符优先级及逻辑处理顺序
-
mysql只支持一种join算法:Nested-LoopJoin(嵌套循环连接),但Nested-LoopJoin有三种变种:SimpleNested-LoopJoin,IndexNested-LoopJoin,BlockNested-LoopJoin(简单-索引-缓冲区)原理:1.SimpleNe
-
redis是一个内存数据库,一旦断电或服务器进程退出,内存数据库中的数据将全部丢失,所以需要redis持久化 redis持久化就是把数据保存在磁盘上,利用永久性存储介质将数据保存,在特定的时间将保存的数据进行恢复的工作机制redis提供两种持久化机制RDB:存储数据结果,关注点在数据AOF:存储操作
-
通过SQL的执行过程来介绍MySQL的基础结构. 首先有一个user_info表,表里有一个id字段,执行下面这条查询语句:Select * form user_info where i
-
索引(Index)是帮助MySQL高效获取数据的数据结构,索引的目的在于提高查询效率,就像字典和书籍的目录一样,有了目录,可以帮助你快速查找你需要的内容。可以理解为一个排好序的快速查找数据结构。也就是
-
说到数据库事务,大家脑子里一定很容易蹦出一堆事务的相关知识,如事务的ACID特性,隔离级别,解决的问题(脏读,不可重复读,幻读)等等,但是可能很少有人真正的清楚事务的这些特性又是怎么实现的,为什么要有四个隔离级别。今天我们就先来聊聊MySQL中事务的隔离性的实现原理,后续还会继续出文章分析其他特性的
-
前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句