mysql必知必会
1. DISTINCT —> 去重
select distinct name from user;
distinct 不能部分使用,该关键字应用于指定的所有列而不单单是前置列。
2. limit 与 offset —-> 偏移开始的位置
select * from user limit 3; //指检索行数为3行
select * from user limit 3 offset 4; //指从行4开始查询3个数据
等同于select * from user limit 4,3
3. 完全限定名
sql语句中可通过完全限定的名字来引用列,即同时使用表名和列名–>表名.列名
4. 排序检索数据
4.1 ORDER BY —> 按指定列进行检索排序(以列数据的字母顺序进行排序,默认升序)
select * from user order by name;
同时,也可指定多个列进行排序:select * from user order by name,age;
当name不唯一时,才会进行age排序比较,否则只按name进行排序。
4.2 DESC —> 指定降序的方向(升序【A-Z】还是降序【Z-A】)
数据排序默认是升序的,若要降序则为:select * from user order by name desc;
desc关键字只应用于前置的列名,如要实现多个列降序,则需每个列都要加上desc关键字。
4.3 ASC —> 指定升序的方向(默认,无需指定)
找出用户里面年龄最大的用户信息: select * from user order by age desc limit 1;
5 数据过滤
5.1 AND 与 OR
需要注意的是,and的优先级大于or,所以同时用到两个操作符,最好加上圆括号表示计算次序。
select * from user where (city="湖南" or city="上海") and age>18;
5.2 IN 与 NOT
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。功能与or语句一样
select * from user where age in (16,18);
select * from user where age = 16 or age = 18;
NOT操作符作用于否定跟在它之后的条件
select * from user where age not in (16,18);
6 通配符进行过滤
为在搜索语句后使用通配符,则必须使用LIKE操作符
6.1 百分号(%)
在搜索语句中,%表示任何字符可以出现任意次数。
查询用户姓张的用户:select * from user where name like "张%"
注意:当搜索条件的%后存在尾空格时,会干扰到通配符匹配,解决办法为在使用函数。
6.2 下划线(_)
下划线表示匹配单个字符。
注意:通配符的搜索时间比其它操作符的搜索时间都要长,当有多个搜索条件时,切记不能将通配符放在搜索模式的开始处,这样的搜索速度是最慢的。
7 正则表达式
要使用正则表达式,则需使用关键字REGEXP,在后面加上匹配条件即可。
select * from user where age like '%0';
select * from user where age regexp '0$';
两条语句都为搜索年龄为0结尾的用户
如果语句是这样的:
select * from user where age like '0';
select * from user where age regexp '0';
则第一条语句不会返回数据,第二条会返回年龄中包含0的用户。因为使用like语句时需搭配上通配符。
7.1 进行OR匹配
正则表达式用‘|’来表示匹配左右条件的匹配符
7.2 使用 [] 匹配单一字符。
[123]相当于 ‘1|2|3’
7.3 使用‘^’可以对搜索条件进行否定
查询年龄没有789的用户:select * from user where age regexp '[^789]'
7.4 匹配范围
匹配数字0到9:[0-9]; 匹配字母a到z:[a-z]
7.5 匹配特殊字符
为匹配特殊字符,需使用\为前导
匹配名字中有’.’的用户 : select * from user where name regexp '\\.';
\同时也可以用来引用元字符(具有特有含义的字符。
\t 制表 、 \f换页、\n换行、\r回车、\v纵向制表
注意:匹配反斜杠’\’,需要使用’\\’; 多数的正则表达式都是实现单个反斜杠即可实现特殊字符的转义,但mysql需要使用两个,因为mysql自己解释用一个,正则表达式库解释另一个。
7.6 匹配多个实例
正则表达式提供重复元字符来匹配多个实例
* : 0个或多个匹配
+: 1个或多个匹配(相当于{1,})
? : 0个或1个匹配 (相当于{0,1})
{n}: 指定数目的匹配
{n,}: 不少于指定数目的匹配
{n,m}: 匹配数目的范围
7.7 定位符
‘^’:文本的开始、’$’:文本的结尾、’[[:<:]]’:词的开始、’[[:>:]]’:词的结尾
其中’^’还可以表示否定的意思,在集合中[^789]指除了789数字外。
LIKE和REGEXP的不同在于,LIKE匹配整个串而REGEXP匹配子串。
简单的正则表达式测试(返回0或1):select 'hello' REGEXP '[0-9]';
返回0,因为字符串hello明显不存在数字。
8 计算字段
8.1 拼接字段:Concat()函数用于拼接字段,每个串用逗号分开。
查询格式为name(age)的用户(按年龄排序):
select Concat(name,'(',age,')') from user order by age;
8.2 去除空格:Trim()函数用于去除串左右两边的空格,RTrim()去除串右边的空格,LTrim()去除串左边的空格
select Concat( Trim(name) ,'(', Trim(age) ,')') from user order by age;
8.3 使用别名,定义返回值的别名。
select Concat( Trim(name) ,'(', Trim(age) ,')') AS nameAge from user order by age;
8.4 算术计算
计算物品的总价格:
select number,price,number*price AS sum from orders where orderId = 1001;
9 函数
9.1 Soundex()函数
能对串的字符发音进行比较。例如需要查询Y.Lee的用户,而用户表里只有Y.Lie。这时就需要用到该函数: select name,age from user where Soundex(name) = Soundex('Y.Lee');
9.2 聚集函数
AVG()计算列的平均值:select AVG(price) AS avg_price from orders where orderId = '1001';
COUNT()对表的行数进行计算:select COUNT(*) as num_use from user;
对特定列的行数计算:select COUNT(email) as num_use from user;
两者的区别在于count(*)不会忽略null值。
MAX()返回指定列中的最大值:select MAX(price) AS max_price from products;
在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行。
SUM()返回指定列的和。
附表:
上一篇: linux系统部署微服务war包