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与该子查询的值进行过滤。
本文来自博客园,作者:我永远喜欢石原里美,转载请注明原文链接:https://www.cnblogs.com/yuan-zhou/p/15707244.html

浙公网安备 33010602011771号