一、数据库的查询
1. 查询语句语法和逻辑执行顺序

2. from部分

注意1:
3. where部分
(1)mysql中的逻辑运算符

A. = 和<=>
a. <=> :就是逻辑运算符中的全等,能够进行NULL 和 NULL之间的比较,视为true(1)
b. = :判断是否相等,不能进行NULL和NULL之间的比较。
B. BETWEEN AND :注意:这里是闭区间
a. 用法

b. 实例

C. IN :
a. 用法:

b. 实例

D. 关于NULL的理解来分析ISNULL和ISNOTNULL
a.

注意:第三条是在进行布尔运算的时候才能看作是false

b. 关于null和其他值的比较,不能简单的使用 = 或者! =。单使用这两种只会得到null。需要使用is null或者is not null。或者是使用<=>逻辑相等


E. 关于字符串的模式匹配:like
a. 通配符

b. 一些例子

c. sql中的select实例


(2)与非

A. AND运算符的优先级高于OR运算符的
B. 支持扩号,扩号的优先级最高
(3)where部分小结

4. select部分
(1)select逻辑上,表示对记录进行了投影,实际上就是选定了展示哪些列
注意:由于上面的解释,因此有下列注意

(2)投影规则:
A. 直接写个*,代表所有字段都展示,并且展示的顺序按照建表的顺序来,select*不太建议使
B. 给出字段名称,字段与字段之间用逗号分割
注意:这里的字段名称可以写为全名称(表名称+字段名称或者是库名+表名+字段名), 因此可以出现下列例子

C. 有字段或者常数参与的表达式
例如:
注意:表达式是一行记录一行记录的运算,例如上面的total + current 是一行一行计算的
D. 投影出来的字段,可以起别名

E. 字段也支持函数运算,这里不一一例举了。(实践中不建议使用mysql函数,性能很差)
下面写几个例子

F. select distinct 字段或者表达式(不能是*)
a. 规则:注意,这里的相同的记录指的是字段或者表达式相同的记录

b. 例子:上面是每家distinct,下面是加了distinct


c. 注意:有了distinct + 字段,就不能有其他的字段了。因为如果出现其他字段,那么根据不同的字段投影出的行数都不一样,那么就会造成冲突,例如下列报错例子。
![]()
G. 投影小结

5. 检索排序,order by
(1)如果没有指定排序规则,则认为检测出来的顺序是无序的。
(2)order by其中的order 是排序的意思,by是以什么作为依据进行排序
A. 语法
order by + 字段1 + 升降序(如果不写,默认为升序;升序为asc,降序为desc),字段2 + 升降序...;
从左到右依次根据字段和升降序进行多次排序,每次排序的规则由逗号分开
(3)当根据字符串字段进行排序,和字符集的排序规则相关(建库时候选定的排序规则)

(4)如果用来排序的字段,存在多条该字段相同的记录的情况,那么这些记录之间的顺序依旧是处于无序
A. 例子如下:

B. 为了解决这个问题,就需要二次排序,甚至是多次排序
以上面的例子来说,这三个根据total来排序,则这三个记录的相对顺序是无序的,那么可以根据bid再次排序,则这三个记录的相对顺序就确定了,例如下面的例子。

(5)order by 可以对表达式进行排序

6. 分片
(1)分片规则:
A. 必须在已经有序的结果上才有确定的结果
B. offset和limit:
a. offset表示偏移量,其实就是记录的起点,也就是从哪条记录开始取(记录的起点是从0开始的)。
b. limit表示最多取得记录的条数(如果不够则不展示)。
(2)语法

(3)利用分片实现分页

7. 基本查询总结
注意:from和select的时候可以起别名,别名只能在当前语句生效。从from的时候起的别名,其他地方都能用,因为逻辑上数据源最开始。在select中起的别名只能在排序和分片中使用,也是根据逻辑上
这篇博客主要介绍了MySQL数据库的查询操作,包括查询语句的逻辑执行顺序、FROM和WHERE部分的用法,如逻辑运算符(=,BETWEEN AND,IN,ISNULL等)、投影规则(SELECT *和指定字段)、排序(ORDER BY)以及分片(LIMIT和OFFSET)。还强调了DISTINCT关键字用于消除重复行,以及在排序和分页中的应用。
2146

被折叠的 条评论
为什么被折叠?



