• MySQL 高级(进阶) SQL 语句


    SQL高级语句:

    ---- SELECT ----显示表格中一个或数个字段的所有数据记录

    1. 语法: select * from 表名 #显示表的所有数据
    2. selcet 字段 from 表名 #显示对应字段的表数据

    ---- DISTINCT ----不显示重复的数据记录

    select distinct 字段 from 表名    #不显示重复字段的数据记录

    ---- WHERE ----有条件查询

    1. select 字段 from 表名 where 条件 #查询满足条件的字段
    2. select * from 表名 where 条件 #查询表中满足条件的所有数据

    ---- AND (且)

    select * from 表名 where (条件1 and 条件2);  #满足条件1和条件2

    -----OR   (或)

    select 字段 from 表名 where 条件1 0r 条件2   #满足条件1或条件2

    ---- BETWEEN ----显示两个值范围内的数据记录
     

    1. 语法:SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';
    2. SELECT * FROM store_info WHERE Date BETWEEN '2020-12-06' AND '2020-12-10';

    通配符 ----通常通配符都是跟 LIKE 一起使用的

    1. % :百分号表示零个、一个或多个字符
    2. _ :下划线表示单个字符
    3. 'A_Z':所有以 'A' 起头,另一个任何值的字符,且以 'Z' 为结尾的字符串。例如,'ABZ' 和 'A2Z' 都符合这一个模式,而 'AKKZ' 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。
    4. 'ABC%': 所有以 'ABC' 起头的字符串。例如,'ABCD' 和 'ABCABC' 都符合这个模式。
    5. '%XYZ': 所有以 'XYZ' 结尾的字符串。例如,'WXYZ' 和 'ZZXYZ' 都符合这个模式。
    6. '%AN%': 所有含有 'AN'这个模式的字符串。例如,'LOS ANGELES' 和 'SAN FRANCISCO' 都符合这个模式。
    7. '_AN%':所有第二个字母为 'A' 和第三个字母为 'N' 的字符串。例如,'SAN FRANCISCO' 符合这个模式,而 'LOS ANGELES' 则不符合这个模式。
       

    ---- LIKE ----匹配一个模式来找出我们要的数据记录

    select * from 表名 where 字段 like 条件   


    ---- ORDER BY ----按关键字排序

    1. select * from 表名 (where 条件) order by 字段 asc/desc
    2. asc 升序 默认
    3. desc 降序

    数学函数

    1. rand()   返回 0 到 1 的随机数
    2. round(x,y)  保留 x 的 y 位小数四舍五入后的值
    3. truncate(x,y)   返回数字 x 截断为 y 位小数的值
    4. greatest(值1, 值2, ....)   返回集合中最大的值,也可以返回多个字段的最大的值
    5. least(值1, 值2, ....)   返回集合中最小的值,也可以返回多个字段的最小的值
    6. mod(x,y) 返回   x 除以 y 以后的余数
    7. power(x,y)      返回 x 的 y 次方
       

    聚合函数 用于获取一个字段里的值:

    1. avg()     返回指定列的平均值
    2. sum()    返回指定列的所有值之和
    3. count()  返回指定列中非 NULL 值的个数
    4. min()     返回指定列的最小值
    5. max()    返回指定列的最大值
       

    字符串函数:

    1. concat('字符串1', '字符串2', ....)    将提供的参数 x 和 y 拼接成一个字符串
    2. substr(x,y,z)               获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
    3. replace(x,y,z)             将字符串 z 替代字符串 x 中的字符串 y
    4. length(x)                    返回字符串 x 的长度
    5. upper(x)                     将字符串 x 的所有字母变成大写字母
    6. lower(x)                     将字符串 x 的所有字母变成小写字母
    7. left(x,y)                      返回字符串 x 的前 y 个字符
    8. right(x,y)                     返回字符串 x 的后 y 个字符
       

    字符串截取: 面试题

    1. echo abcdefg
    2. i=abcdefg #定义变量
    3. echo ${i:2:2} #从下标2开始截取两个 下标从0开始计算
    4. echo abcdefg | cut -b 3-4 #截取下标34个的 cut下表从1开始
    5. expr substr $i 3 2 #expr下表从1开始

    使用字符串函数连接两个字段:

    1. select concat (字段,字段2from 表名; 字符串要加 ' '
    2. select 字段1 || 字段2 from 表名 字符串要加 ' ' #要开启PIPES_AS_CONCAT 模式

    1.

    2.

    使用字符串函数截取

    1. select substr(字段,y,z) from 表名 where 语句;
    2. slect substr(store_name,5,6)form location where store_name='los Angles';

    GROUP BY :

    对GROUP BY后面的字段的查询结果进行汇总分组,通常是结合聚合函数一起使用的 

    原则:GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现;凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后面。

    HAVING:

    用来过滤由 GROUP BY 语句返回的记录集,通常与 GROUP BY 语句联合使用
    HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足。

    原因:是因为SQL语句执行顺序中having优先级低于where。
     

    1. select 字段1 聚合函数(字段2fromgroup by 字段1 #分组,通常会结合聚合函数使用,分组也有去重的效果
    2. select 字段1 聚合函数(字段2fromgroup by 字段1 having (函数条件); #having的作用:过滤group by分组后的结果

    别名 :字段別名 表格別名

    语法:SELECT "表格別名"."字段1" [AS] "字段別名" FROM "表格名" [AS] "表格別名"; 【】代表可以省略
    

    子查询  :用于连接表格,内查询的结果会作为外查询的条件来使用

    select 字段 from 表名1 where 字段 比较运算符(select 字段 from2 where 条件表达式)

    EXISTS:用来根据条件过滤查询结果,并只返回满足条件的行  

    SELECT "字段1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");
    

    #这里的子查询作为条件进行判断。如果子查询返回至少一行结果,则外部查询的结果将包含该行

    ---- 连接查询 ----

    1. inner join(内连接):只返回两个表中联结字段相等的行
    2. left join(左连接):   返回包括左表中的所有记录和右表中联结字段相等的记录 ,不相等的行返回NULL
    3. right join(右连接): 返回包括右表中的所有记录和左表中联结字段相等的记录,不相等的行返回NULL 

    求交集

    1. 内连接:select A.字段 from 左表 A inner join 右表 B on A.字段=B.字段;
    2.                select A.字段 from 左表 A inner join 右表 B using(字段);
    3. using(字段)= on A.字段=B.字段;

     

    联集

    1. union 联集,将两个select查询语句的结果合并,并去重
    2. union all 联集,将两个select查询语句的结果合并,不去重

     用联集求两个表无交集

    1. select 字段 from 左表 A left join 右表 B on A.字段=B的字段 where B字段 is null
    2. #求右表与左表无交集的字段
    3. select 字段 from 左表 A right join 右表 B on A.字段=B。字段 where A字段 is null
    4. #求左边与右表无交集的字段
    5. 再使用联集
    6. select 字段 from 左表 A left join 右表 B on A.字段=B的字段 where B字段 is null
    7. union all
    8. select 字段 from 左表 A right join 右表 B on A.字段=B。字段 where A字段 is null
    9. 就可以显示出两表无交集的字段

  • 相关阅读:
    打造智能物品租赁平台:Java与SpringBoot的实践
    Python数据分析-笔记01
    vue 使用v-cloak
    6 HTTP&Tomcat&Servlet详解
    uniapp vue2、vue3 页面模板代码块设置
    codeforces:D. Chip Move【dp + 逆向思维考虑】
    一次性彻底解决 Web 工程中文乱码问题
    基于随机森林实现特征选择降维及回归预测(Matlab代码实现)
    文档参考888
    SpringMVC01、回顾MVC
  • 原文地址:https://blog.csdn.net/Vince15dvd/article/details/139837082