MySQL代码使用教程

本文详细介绍了MySQL中的内置函数,包括字符串处理、日期时间操作、数学计算等,并对比了不同函数的使用方法和性能。同时讨论了SQL语句中的UNION、UNIONALL以及count(*)、count(1)、count(列名)的区别。
摘要由CSDN通过智能技术生成

1.MySQL 提供了大量的内置函数,用于在查询中执行各种操作,如字符串处理、日期和时间处理、数学计算等。以下是一些常见的 MySQL 函数及其使用示例:

1. 字符串函数

  • CONCAT():连接两个或多个字符串。

SELECT CONCAT('Hello', ' ', 'World');  -- 输出 'Hello World'
  • LENGTH() 或 CHAR_LENGTH():返回字符串的长度。

SELECT LENGTH('Hello'); -- 输出 5
  • UPPER() 和 LOWER():将字符串转换为大写或小写。

SELECT UPPER('hello'); -- 输出 'HELLO' 
SELECT LOWER('HELLO'); -- 输出 'hello'
  • TRIM():去除字符串的前导和尾随空格。

SELECT TRIM(' Hello '); -- 输出 'Hello'
  • SUBSTRING():从字符串中提取子串。

SELECT SUBSTRING('Hello World', 1, 5); -- 输出 'Hello'

 2. 日期和时间函数

  • NOW():返回当前的日期和时间。

SELECT NOW(); -- 返回当前的日期和时间,如 '2023-10-23 10:00:00'
  • CURDATE():返回当前日期。

SELECT CURDATE(); -- 返回当前日期,如 '2023-10-23'
  • CURTIME():返回当前时间。

SELECT CURTIME(); -- 返回当前时间,如 '10:00:00'
  • DATE_FORMAT():按指定格式显示日期/时间。

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 按指定格式显示当前日期和时间
  • DATEDIFF():返回两个日期之间的天数差。

SELECT DATEDIFF('2023-10-25', '2023-10-23'); -- 输出 2

3. 数学函数

  • ABS():返回数的绝对值。

SELECT ABS(-10); -- 输出 10
  • ROUND():对数进行四舍五入。

SELECT ROUND(10.75); -- 输出 11
  • CEIL() 或 CEILING():返回大于或等于一个数的最小整数。

SELECT CEIL(10.75); -- 输出 11
  • FLOOR():返回小于或等于一个数的最大整数。

SELECT FLOOR(10.75); -- 输出 10

  • MOD():返回两数相除的余数。

SELECT MOD(10, 3); -- 输出 1

4. 聚合函数

  • COUNT():计算表中的记录数。

SELECT COUNT(*) FROM your_table;
  • SUM():计算某列的总和。

SELECT SUM(column_name) FROM your_table;
  • AVG():计算某列的平均值。

SELECT AVG(column_name) FROM your_table;
  • MAX() 和 MIN():返回某列的最大值和最小值。

SELECT MAX(column_name), MIN(column_name) FROM your_table;

这只是 MySQL 中可用函数的一小部分。MySQL 提供了丰富的函数库,可以根据具体需求选择适合的函数。在使用这些函数时,请确保查阅 MySQL 的官方文档以获取最准确和详细的信息。

2.MySQL的执行顺序

执行顺序

FROM -> JOIN -> ON -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT

执行顺序解释

1.from 要做数据分析,得先有个表

2.join 一个表可能还不够,两个表甚至多个表都可以,关联条件啥也先不用,可以都来个笛卡儿积先

3.on 在诸多表左右连接后,设定两个表之间的关联键,把不符合条件的全部筛掉

4.where 上三步整合各表,形成一个统一大表;在此大表上,设置筛选条件

5.group by 把指定字段相同的行组合在一起,其余没有加入group by的字段,可以用聚合函数如max/min等合并

6.having 在group by了之后,再度指定筛选条件;注意where和having是不同的,主要在于中间多了group by

7.select 在行层面的处理暂告一段落,在列层面再来一波

8.distinct 指定字段去重

9.order by 指定字段排序,升降序

10.limit 指定哪些行

3.varchar与char的区别?

char

  • char表示定长字符串,长度是固定的;
  • 如果插入数据的长度小于char的固定长度时,则用空格填充;
  • 因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;
  • 对于char来说,最多能存放的字符个数为255,和编码无关

varchar

  • varchar表示可变长字符串,长度是可变的;
  • 插入的数据是多长,就按照多长来存储;
  • varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;
  • 对于varchar来说,最多能存放的字符个数为65532

日常的设计,对于长度相对固定的字符串,可以使用char,对于长度不确定的,使用varchar更合适一些。

4.MySQL中 in 和 exists 的区别?

MySQL中的in语句是把外表和内表做hash连接,而exists语句是对外表做loop循环在对内表进行查询,我们可能认为exists比in语句的查询效率要高,这种说法其实是不准确的,要区分表的使用场景:

1.如果查询的两个表大小相当,那么用in和exists差别不大。

2.如果两个表一个较小,一个是大表,则子查询表达的用exists,子查询表小的用in。

3.not in  和not exists:如果查询语句使用not in ,那么内外表都要进行全表扫描,没有用到索引;而not exists 的子查询依然能用到表上的索引。所以无论哪个表大,用not exists 都比not in 要快。

5.drop、delete与truncate的区别?

三者都表示删除,但是三者有一些差别:

deletetruncatedrop
类型属于DML属于DDL属于DDL
回滚可回滚不可回滚不可回滚
删除内容表结构还在,删除表的全部或者一部分数据行表结构还在,删除表中的所有数据从数据库中删除表,所有数据行,索引和权限也会被删除
删除速度删除速度慢,需要逐行删除删除速度快删除速度最快

因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保留表而删除所有数据的时候用truncate。

6.UNION与UNION ALL的区别?

  • 如果使用UNION ALL,不会合并重复的记录行,UNION会合并重复的行
  • 效率 UNION 高于 UNION ALL

7.count(1)、count(*) 与 count(列名) 的区别?

三种计数方式

执行效果

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
  • count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

执行速度

  • 列名为主键,count(列名)会比count(1)快
  • 列名不为主键,count(1)会比count(列名)快
  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
  • 如果有主键,则 select count(主键)的执行效率是最优的
  • 如果表只有一个字段,则 select count(*)最优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值