MySQL基础查询操作

栏目:生活资讯  时间:2023-07-23
手机版

  😹 作者: gh-xiaohe

  😻 gh-xiaohe的博客

  😽 觉得博主文章写的不错的话,希望大家三连(?关注,?点赞,?评论),多多支持一下!!

  sql92语法:

  SELECT????(存在聚合函数)FROMWHERE???多表的连接条件 AND 不包含聚合函数的过滤条件、不可以使用别名HAVING???包含聚合函数的过滤条件ORDER BY???(ASC / DESC )LIMIT sql99语法:

  SELECT???(存在聚合函数)FROM???(LEFT / RIGHT)JOIN …ON 多表的连接条件(LEFT / RIGHT)JOIN …ON…WHERE???不包含聚合函数的过滤条件、不可以使用别名GROUP BY???AND/OR 不包含聚合函数的过滤条件HAVING???包含聚合函数的过滤条件ORDER BY???(ASC / DESC )LIMIT 总结:

  from:从哪些表中筛选on:关联多表查询时,去除笛卡尔积where:从表中筛选的条件group by:分组依据having:在统计结果中再次筛选order by:排序limit:分页 ????FROM …,…-> ON -> (LEFT/RIGNT JOIN) -> WHERE -> GROUP BY ->HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

  在这里插入图片描述

  ????从执行过程来看 可以向前引用,但是没有办法向下引用

  ????由SQL的执行顺序可知,where的执行在 having的前面,现在where 中过滤一些条件,分组时效率高很多,提升很大,如果此时 过滤条件写在 having 中 先分组后进行条件筛选,很多数据都是不需要的数据,无用功

  1、从适用范围上来讲,HAVING的适用范围更广。

  2、如果过滤条件中没有聚合函数:这种情况下,WHERE的执行效率要高于HAVING

  优点缺点WHERE先筛选数据再关联,执行效率高不能使用分组中的计算函数进行筛选HAVING可以使用分组中的计算函数在最后的结果集中进行筛选,执行效率较低 不推荐你直接使用 SELECT * 进行查询

  使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。不要使用 ’ ’ 单引号

  MySql 中 ’ ’ 单号好使 mysql 不严谨 order 中就不可以 (规定中也不可以)

  ????所有运算符或列值遇到null值,运算的结果都为null

  ????MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。

  ????我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对``(着重号)引起来。

  使用DESCRIBE 或 DESC 命令,表示表结构。

  between and 先写小值、在写大值,不可交换

  in: 判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。not in: 用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值,则返回1,否则返回0。 LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。 “%”:匹配0个或多个字符。“_”:只能匹配一个字符。此时使用了转移字符 后 _ 在此时就不表示任意一人字符 ASC(ascend): 升序DESC(descend):降序ORDER BY 子句在SELECT语句的结尾没有使用排序操作: 默认情况下查询返回的数据是按照添加数据的顺序显示的。在ORDER BY 后没有指名排序的方式 默认按照升序排列。可以使用列的别名,进行排序 公式: (当前页数-1)* 每页条数,每页条数位置: LIMIT 子句必须放在整个SELECT语句的最后。好处: 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回,减少数据表的网络传输量,也可以提升查询效率 在这里插入图片描述

  在这里插入图片描述

  ????连接运算符前后的两个数值或表达式,对数值或表达式进行 加(+)、减(-)、乘(*)、除(/)和取模(%)运算

  在这里插入图片描述

  ????<>(!=)、<=>、<、<=、>、>=,比较运算符用来对表达式左边的操作数和右边的操作数进行比较

  结果为真: 返回1结果为真: 返回0其他情况则: 返回null经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。 在这里插入图片描述

  🛹 空运算符 IS NULL ISNULL 和 非空运算符 IS NOT NULL 判断一个值是否为NULL,如果为NULL则返回1,否则返回0

  🛹 最大小值运算符 LEAST 、GREATEST ????GREATEST(值1,值2,…,值n)。其中,n表示参数列表中有n个值。当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值NULL。

  🛹 REGEXP RLIKE :正则表达式 在这里插入图片描述

  ????逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL。

  ????位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数

  在这里插入图片描述

  ????数字编号越大,优先级越高,优先级高的运算符先进行计算。赋值运算符的优先级最低,使用“()”括起来的表达式的优先级最高。

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  子查询可以应用的位置:

  ? 结论:除了GROUP BY 和 LIMIT 之外,其他位置都可以声明子查询!

  在这里插入图片描述

  ?

  方式一:进行两次查询

  方式二:自连接

  方式三:子查询

  在这里插入图片描述

  子查询(内查询)在主查询之前一次执行完成

  子查询的结果被主查询(外查询)使用 。

  注意事项

  子查询要包含在括号内

  将子查询放在比较条件的右侧

  单行操作符对应单行子查询,多行操作符对应多行子查询

  ?????按内查询的结果返回一条还是多条记录,将子查询分为 单行子查询 、多行子查询

  按内查询是否被执行多次,分为 相关(或关联)子查询 和 不相关(或非关联)子查询

  不相关子查询:子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行相关子查询:如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部嵌套的执行方式: 举例:

  相关子查询的需求:查询工资大于本部门平均工资的员工信息。(变化)不相关子查询的需求:查询工资大于本公司平均工资的员工信息。(固定) 操作符含义=equal to>greater than>=greater than or equal to<less than<=less than or equal to<>not equal to 首先执行子查询向主查询中的HAVING 子句返回结果。 ????在CASE表达式中使用单列子查询

  在这里插入图片描述

  ????子查询不返回任何行

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  操作符含义IN等于列表中的任意一个ANY需要和单行比较操作符一起使用,和子查询返回的某一个值比较ALL需要和单行比较操作符一起使用,和子查询返回的所有值比较SOME实际上是ANY的别名,作用相同,一般常使用ANY 注意:结果中含有空值 内查询还有null值 在含有null的情况下 再去判断 结果 就是一个空的情况

  结果:返回的结果为空

  ????子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表并进行了条件关联因此每执行一次外部查询,子查询都要重新计算一次这样的子查询就称之为关联子查询 。

  ????相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。

  在这里插入图片描述

  ????from型的子查询:子查询是作为from的一部分,子查询要用()引起来,并且要给这个子查询取别名, 把它当成一张“临时的虚拟的表”来使用。

  关联子查询通常也会和 EXISTS操作符一起来使用,用来检查在子查询中是否存在满足条件的行。

  子查询中不存在满足条件的行 条件返回 FALSE继续在子查询中查找 子查询中存在满足条件的行: 不在子查询中继续查找条件返回 TRUE NOT EXISTS关键字表示如果不存在某种条件,则返回TRUE,否则返回FALSE。

  解答:自连接方式好因为在许多 DBMS 的处理过程中,对于自连接的处理速度要比子查询快得多。

  可以这样理解:子查询实际上是通过未知表进行查询后的条件判断,而自连接是通过已知的自身数据表进行条件判断,因此在大部分 DBMS 中都对自连接处理进行了优化。

上一篇:《时光倒流:回忆电影80s》——带你重返激动人心的电影黄金时代
下一篇:《香伯》阅读附答案