酆叔のBlog

  • 首页
  • 分享技术
  • 八卦黑料
  • 生活日常
  • 日记
酆叔のBlog
上辈子作恶多端,这辈子早起上班。
  1. 首页
  2. IT技术
  3. 正文

MySQL知识

2023年7月17日 800点热度 0人点赞 0条评论

1.SQL语句中使用 * 的缺点有

  • a) 查询出了不必要的列
  • b) 效率上不如直接指定列名

2.mysql中or和and的区别:

  • 写法无差异,他们最大的差异只有两点: 一个是 and 一个是 or;
  • 本身的含义,and(并且)、or(或者)
  • and 要满足所有条件,两者必须同时成功才可以显示对应条件下的数据,否则没有。
  • or 则是只要满足一条即可。
  • 简明的说:and必须满足所有条件;or满足一个条件即可

3.字段长度

# 查询员工表所有名字长度为4 的员工的员工编号,姓名 
# length() 获取指定字段值的长度 
select empno,ename from emp where length(ENAME)=4;

4.表连接(Inner JOIN,Left Join,Right Join)

# 内连接(inner join):又称等值连接,只返回两个表中联结字段相等的行 
# 范围:交集(A∩B) 
# 说明: 组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分 select * from a_table a inner join b_table b on a.id = b.id 

# 左连接(left join):全称是左外连接(left outer join),是外连接中的一种。返回包括左表中的所有记录和右表中联结字段相等的记录 
# 说明:左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
select * from a_table a left join b_table b on a.a_id = b.b_id; 

# 右连接(right join):全称是右外连接(right outer join),是外连接中的一种。返回包括右表中的所有记录和左表中联结字段相等的记录 
# 说明:与左(外)连接相反。右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。 
select * from a_table a right outer join b_table b on a.a_id = b.b_id;

5.GROUP BY和ORDER BY的区别

  • ORDER BYQ 和GROUP BY是两个用于对查询结果进行排序和分组的关键字。它们在功能上有一些相似之处,但使用方式和结果是不同的。
  • order by(排序查询),asc升序,desc降序(默认升序,可缺省)
//查询所有信息按id升序排序 
select * from 表名 order by id 
//先按id升序排序,后按年龄降序排序 
select * from 表名 order by id,age desc
  • having只能用于group by子句,作用于组内,having条件子句可以直接跟函数表达式,使用group by子句的查询语句需要使用聚合函数
  • 如果在 SELECT 子句中选择了非聚合列(如 dept.deptno),那么必须在 GROUP BY 子句中对其进行分组。否则,查询将出错
//按照学号分组,查询每个学号的总成绩 
select 学号,SUM(成绩) from 选课表 group by 学号 
//查询平均成绩大于001课程平均成绩的学号,并按平均成绩降序排序 
select 学号,AVG(成绩) from 选课表 group by 学号 having AVG(成绩)>(select AVG(成绩) from 选课表 where 课程号="001") order by AVG(成绩) desc

6.日期/时间函数

  • now():返回当前的日期时间。
  • curdate():返回当前的日期。
  • curtime():返回当前的时间。
  • year():提取年份。
  • month():提取月份。
  • day():提取天(号/日)。
  • hour():提取小时。
  • minute():提取分钟。
  • second():提取秒。
  • dayname():返回传入日期对应的星期数。
  • monthname():返回传入日期对应的字符串形式的月份。

7.统计函数Count()

  • count() 是一个聚合函数,返回指定匹配条件的行数。开发中常用来统计表中数据,全部数据,不为null数据,或者去重数据。
  • count(1):统计所有的记录(包括null)。
  • count(*):统计所有的记录(包括null)。
  • count(字段):统计该"字段"不为null的记录。
  • count(distinct 字段):统计该"字段"去重且不为null的记录。
  • 根据不同情况会有不同区别,MySQL 会对count()做优化。
  • (1)如果表中只有一列,则count( )效率最优。
  • (2)如果表有多列,且存在主键,count (主键列名)效率最优,其次是:count (1) >count( *)。
  • (3)如果表有多列,且不存在主键,则count(1 )效率优于count( *)
  • 阿里开发手册规范相关规定:
  • 1.【强制】不要使用 count(列名)或 count(常量)来替代 count(),count()是 SQL92 定义的标 准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关. 说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行.
  • 2.【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1, col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0.
  • 实例: select month(hiredate) 月份,count(*) 人数 FROM emp WHERE year(hiredate) = 1981 group by month(hiredate)

8.函数max()、min()、sum()、avg()

  • MAX()返回指定列中的最大值。
  • MIN()的功能正好与MAX()功能相反,它返回指定列的最小值。
  • SUM()用来返回指定列值的和(总计)。
  • AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值。
  • AVG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。

9.LIMIT 语句

  • LIMIT 语句是 MySQL 中常用的语句之一,它主要用于从关系型数据库中读取数据时,指定需要读取的行数。可以利用该语句实现分页功能,或者限制结果集返回的行数。

10.between语句

  • BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围。BETWEEN 同 AND 一起搭配使用,语法如下:
  • WHERE column BETWEEN value1 AND value2
  • WHERE column NOT BETWEEN value1 AND value2 BETWEEN
  • 数据比较BETWEEN 还具有数据比较功能语法如下: expr BETWEEN min AND max 当 expr 表达式的值大于或等于 min 且小于或等于 max 时, BETWEEN 的返回值为 1 ,否则返回 0 。利用这个功能,可以判断一个表达式或值否则在某个区间。
标签: MySQL
最后更新:2024年5月10日

酆叔

上辈子作恶多端,这辈子早起上班。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 随机
最新 热点 随机
2025/05/15 周四 晴 2025/05/12 周一 晴 2025/05/08 周四 多云 2025/05/07 周三 阵雨 2025/05/06 周二 阵雨 2025/04/30 周三 多云
改变 PHP for循环运用和九九乘法表 2025/05/08 周四 多云 观察者模式 山东一刀流 PHP 接口类
腾讯云
又拍云
订阅
订阅

COPYRIGHT © 2024 酆叔のBlog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备2023016219号