首页 > 数据库 >MySQL随笔1

MySQL随笔1

时间:2022-10-07 22:56:55浏览次数:73  
标签:随笔 JOIN 函数 查询 MySQL 窗口 null WHERE

MySQL随笔

fJ8SJ.png

fJxlw.png

​ 国庆期间花一点时间刷了牛客和力扣的MySQL入门,两个网站的题目各有各的特色。不过最大的感触就是牛客的SQL题你都可以做,但力扣就只给你SQL入门里的题,其他专项等级你就要开VIP了,而且还邪贵。牛客的简单题那就真的太弱智了,力扣相比之下还装一下,虽然也很弱智,但不至于让你写都懒得写。但力扣的中等题明显难度不如牛客的大,而且题型也不如牛客多。总之这两边都总结一下,写个记录

​ MySQL函数手册:MySQL ASCII() 函数 (w3schools.cn)

coalesce()函数

​ 这个函数可以拿来和ISNULL比较,但是coalesce更强大一些。语法如下

COALESCE(expression [,……n])

​ 如果入参均为null,那么coalesce函数会返回null。如果有非null参数,那么就返回第一个非null参数。因为函数会返回第一个非NULL参数的值,所以如果我们用COALESCE(null,null,null……)这种用法,就会报错

​ 这个函数可以这么应用:如果为null,就在查询表中记录为0,如果非null,就为查询到的值

COALESCE(getdate(),0)

Column 'xxx' in field list is ambiguous报错

​ 这个英文的意思很好懂,就是他说有一个字段是模糊的。出现的原因是在涉及查询的表中,有多张表具有同一名字的字段,比如表1中有一个字段是name,表2中也有一个字段是name,如果不在name前加表的名字或别名,就会报这个错误。

​ 所以解决方式也很简单,在查询语句中报错的模糊字段前加上表的名字即可

LEFT JOIN和JOIN的区别

​ INNER JOIN和JOIN在MySQL中是相同的,使用JOIN时默认是INNER JOIN

​ LEFT JOIN和JOIN的区别如下:

  • JOIN只返回两个表中连结字段相等的行,而LEFT JOIN会返回左表中的所有记录和与右表连结字段相等的记录
  • INNER JOIN的数量小于等于左表和右表的记录数量,而LEFT JOIN的数量与左表的记录数量相同
  • INNER JOIN中不足的记录属性会被直接舍弃,而LEFT JOIN中不足的属性会用NULL填充

HAVING和WHERE

​ 如果有GROUP BY子句的情况下,我们可以用HAVING子句进行分类依据的限定,而不是使用WHERE

COUNT(*)

​ COUNT(*)的作用是返回本次SELECT语句所查询到的行数

DATEDIFF()函数

​ DATEDIFF()函数会返回两个日期值之间的天数差值,语法如下:

DATEDIFF(date1,date2)

​ 计算方式为date1-date2,参数形式均为yyyy-MM-dd形式

窗口函数

窗口函数在何种场景下使用:

​ 窗口函数可以在topN场景下使用:按照某一标准找出每个部门排名前N的员工

什么是窗口函数:

​ 窗口函数又名OLAP函数,可以对数据库的数据进行实时分析处理。窗口函数的语法如下:

<窗口函数> over (partition by <用于分组的列名>
             	order by <用于排序的列名>)

​ 窗口函数的的位置可以放如下两种函数:

  • 专用窗口函数,比如rank、dense_rank、row_number等
  • 聚合函数,比如sum、avg、count、max、min等

​ 因为窗口函数是以where或者group by子句处理后的结果为操作对象,所以原则上窗口函数只能写在SELECT子句中

使用示例:

​ 这部分可以看猴子大佬的教程,写的非常通俗易懂。

通俗易懂的学会:SQL窗口函数 - 知乎 (zhihu.com)

小应用:

​ 比如我们现在想要找到每个部分中的TOP1,我们可以使用row_number这个窗口函数,并且将查询结果设置一个别名,比如为rn,那就可以使用WHERE rn=1来获取每个部门的TOP1

SUBSTRING_INDEX()函数

​ SUBSTRING_INDEX()函数可以返回一个字符串出现指定数量的分隔符之前的字符串,语法如下:

SUBSTRING_INDEX(string,delimiter,number)

使用示例:

​ 比如我们现在有一个url是:http:/url/bisdgboy777,那一般来说每个url的前缀都相同,实际场景可能就是最后一个分隔符后的内容是有具体含义的,需要我们提取之后拿来进行一些操作。这时候我们就可以使用这个函数。SUBSTRING_INDEX(url,'/',-1)意思就是按照/分隔符进行分割,从右往左取第一个分隔符后的内容,即bisdgboy777,这点和Python的语法一样,-1就是右往左第一个,0就是左往右第一个。

​ 有时候可能我们需要倒数第二个字符,那就出现一个问题,如果我们用-2,就连带着把-1的内容也加上了,这时候我们可以连着用两次这个函数,每次都要倒数第一个就行了

LIKE子句中的通配符

​ LIKE子句中可以有如下四种通配符

  • _:匹配任意一个字符
  • %:匹配0或多个字符
  • []:匹配[]中的任意一个字符,若比较字符是连续的,可以用'-'来表达
  • [^]:不匹配[]中的任意一个字符
#查询学生中姓张的学生
SELECT * FROM student_table WHERE name LIKE '张%'
#查询学生中姓张且名字是三个字的同学
SELECT * FROM student_table WHERE name LIKE '张__'
#查询学生中姓张,姓刘,姓李的同学
SELECT * FROM student_table WHERE name LIKE '[张刘李]%'
#查询学生中不姓刘的学生
SELECT * FROM student_table WHERE name NOT LIKE '刘%'
#查询学号最后一位不是2、3、5的学生
SELECT * FROM student_table WHERE student_number LIKE '%[^235]'

三表联查

​ 在牛客刷题时,遇到很多题目需要三表联查,之前一直都是两表联查,第一次还犹豫了一下,三表联查语法支持吗,结果发现是可以的。后来差了一些资料,推荐最好是不要进行三表联查的,这样效率太低了,更应该在设计数据库时安排好表中的字段,尽可能尝试能否避免三表联查

标签:随笔,JOIN,函数,查询,MySQL,窗口,null,WHERE
From: https://www.cnblogs.com/appletree24/p/16767413.html

相关文章

  • day07-2MySQL索引
    MySQL索引说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就能提高千百倍。例子首先,创建一个有800万条数据的表--创建测试数......
  • centOS安装MySQL
    一、检查系统上是否有mysqlrpm-qa|grepmysql#检查是否安装过MySQLrpm-qa|grepmariadb#检查是否存在mariadb数据库(内置的MySQL数据库),有则强制删除rpm-e--n......
  • day07-1MySQL约束
    MySQL约束基本介绍约束用于确保数据库的数据满足特定的商业规则在mysql中,约束包括:notnull,unique,primarykey,foreignkey和check5种1.primarykey(主键)字段名字......
  • sqoop导入数据到mysql代码:
    bin/sqoopexport--connectjdbc:mysql://hadoop102:3306/company--usernameroot--password000000--tableticket01--num-mappers1--export-dir/user/hive/wareh......
  • 软件技术基础---第一次随笔
    这个作业属于哪个课程https://edu.cnblogs.com/campus/zjlg/22rjjc这个作业的目标<自我介绍及课程展望>姓名-学号<高源><2020330301122>一.自我介绍......
  • CentOS 7.9 安装 mysql-5.7.35
    一、CentOS7.9安装mysql-5.7.351 下载地址:https://downloads.mysql.com/archives/community/ 2 mysql-5.7.35安装包上传到linux服务器使用Xftp或者 wget ......
  • 从头开始学MySQL-------存储过程与存储函数(1)
     10.1.1 创建存储过程    存储过程就是一条或者多条SQL语句的集合,可以视为批文件。它可以定义批量插入的语句,也可以定义一个接收不同条件的SQL。    创......
  • MySQL 环境搭建之解压方式安装
    一.MySQL服务安装1.下载:地址:http://dev.mysql.com/downloads/mysql/ 2.安装:将下载的mysql-5.7.16-winx64压缩包解压后的整个目录放在自己喜欢的位置,我的放在E:\software......
  • Mysql之Innodb锁场景
    mysql锁分类基于锁的属性分类:共享锁(读锁)、排他锁(写锁)基于锁的粒度分类:行级锁(innodb)、表锁(innodb、myisam)、页级锁(innodb引擎)、记录锁、间隙锁、临建锁。mys......
  • mysql之事务隔离级别以及MVCC
    1.事务特性:ACID原子性:undolog--要么全部成功,要么全部失败 一致性:最核心和最本质的要求隔离性:MVCC(多版本并发控制)持久性:redolog......