欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql必知必会

程序员文章站 2022-03-26 21:42:24
...

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 计算字段

mysql必知必会

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 聚集函数

mysql必知必会

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()返回指定列的和。

附表:
mysql必知必会

mysql必知必会

mysql必知必会

相关标签: mysql 数据库