mysql使用指南(个人向)

 常规

SQL语句不一定必须要以 ; 结尾,还可以以 \ g 或者 \G 结尾。其中 \g 和 ; 是一样的(类似),而 \G是将结果垂直方式输出。在列数较多的情况下,表格输出反而显得更乱

 

 

 使用以 \G 为行尾,还可以查看表的创建语句,以查看表的结构信息:

 

修改表名:

alter table tab_name1 rename to tb_name2;

 

修改表所在的数据库

alter table rename to other.table;  //将table转移至other数据库下

 

去重

select distinct column from table;

 

限制查询数量

select * from table limit 1,5  //limit n, m  n是偏移量,n=0代表第一条数据,n代表第n+1条数据。m代表查询的条数。当n>=用户记录,得到一个空集

 

表达式 

 

算数表达式

DIV :表示除法,且取结果的整数部分

 

逻辑表达式

 XOR :二者有且只有一个为true时,表达式为true。均为false或均为ture都不为true 

 

 函数

 

字符串函数

left(str, n) / right(str, n) :从左/右取指定字符
ltrim(str)  / rtrim(str):给str左/右边空格去除
lower(str) / upper(str) :将str转成小写或大写
substring(str, n, m):将str从n开始截取m个字符
concat(a, b, c):将a、b、c三个字符串拼接成一个新字符串。concat(a,b)同理
char_length(str):计算str字符数量

 

时间函数

now():获取当前日期+时间(年月日+时分秒)
curdate():获取日期
curtime():获取时间
date_add(datetime, interval xxx):给时间和日期添加指定的时间间隔,xxx为指定时间单位
date_sub(datetime, interval xxx):给时间和日期减少指定的时间间隔,xxx为指定时间单位
支持的单位:
microsecond 毫秒
second 秒
minute 分
hour 时
day 天
week 星期
month 月
quarter 季度
year 年

 

 

 

数值处理单位

abs(str): 取str绝对值
pi():获取圆周率
pow(n, m):获取n的m次方
sqrt(n):获取n的平方根
mod(n, m):获取n除以m的余数
rand():返回一个0~1之间的随机数

 

汇总函数

max():获取列中的最大值
min():获取列中的最小值
sum():计算表达式的总和
avg():求表达式的平均数
count():求列中非null行的数量。count(*)为所有行数量
distinct 去重

 

分组查询

假设需要查询学校内学科的平均分。如果一个个以学科为条件查询其平均分效率会非常低,因为每个学科都需要一句求平均的SQL语句。所以使用GROUP BY语句来完成对每个学科的自动分组,并可以对每个组进行统计。GROUP BY子句中的列为分组列。如果一个SQL语句中使用了分组,查询列表最好只放分组列和汇总函数,非分组列放进去没又意义,甚至可能会报错。

 

在分组时,可使用WHERE在分组前对条件进行过滤。过滤之后,不符合条件的记录将不会参加分组。而HAVING是对分组后的结果进行过滤,它是针对分组的过滤条件(分组列、汇总函数的过滤)。

注意:

  • HAVING并不是固定和GROUP BY搭配使用,在一般情况下,HAVING和WHERE的作用类似,都是起到过滤条件的作用
  • 当多个子句并存时,则顺序为:WHERE、GROUP BY、HAVING、ORDER BY、LIMIT

 

子查询

根据子查询得到的结果集,可以把子查询分为以下几种类型

 

标量子查询

子查询的结果只有一个值,也就是一行、一列。这个值可以放入表达式进行运算,也可以当做查询条件(但感觉作用不大,因为要查的东西子查询已经查出,外层查询的意义存在不大)。

 

 

列子查询

子查询的结果并不是单独的一个值,而是同一个列里面包含了两个值。这种包含两个值的结果集可以当作外层查询的多个查询条件。比如 in (select ……)

 

行子查询

子查询的结果只包含一条记录,且这条记录包含多个列。如果子查询中可能查出多条记录,那么此时的子查询必须使用limit 1限制查询结果集为一条。当行子查询出现在查询条件中时,它的作用在于A表的多个字段与B表的同一条记录的多个字段进行对比。

 

表子查询

子查询的结果包含多行多列,即表子查询

 

不相关子查询与相关子查询

一般来说,使用子查询的场景是:A表中所需要的查询限制条件在本表没有,需要从B表获取。即子查询独立查询出的结果,提供给外层查询使用。这种可以独立运行并产生结果的子查询,就是不相关子查询。

而有些子查询在运行时需要引用外层查询的列,先从外层查询获取到第一条记录,并将查到的字段A传递给子查询(子查询需要用到这个字段作为查询条件)。一般用于判空,即判断A表记录在B表是否存在,存在即返回A表记录,不存在则不返回。

 

同表子查询

如果想要对单表内的汇总函数做过滤,是不可行的。因为汇总函数是用来做数据统计的,如果没有GROUP BY语句,整个表的记录都在同一分组里。因此只能闲用子查询单独统计出汇总数据,做一个标量子查询,再使用WHERE与该子查询的值进行过滤。

 

posted @ 2021-12-19 16:43  我永远喜欢石原里美  阅读(92)  评论(0)    收藏  举报