数据库命令

count()空括号,代表查询表所有条数,即使为空,如果(*)值查询非空的总条数

avg()某个字段平均值

min()某个字段最小值

max()某个字段最大值

sum()某个字段数值总和

以上函数使用方法在select后面或配合以下聚合函数使用

group by 分组  使用在from和where条件后面,并且可以和having(过滤)配合使用,不可以单独使用

order by 排序 默认asc升序   desc降序   使用在where 后面

 

1.常用函数--聚合函数:

a:MAX,返回指定数据的最大值。

eg:查询借款逾期天数最多的用户

SELECT us.name 姓名,MAX(r.overdue) 逾期天数 from user_info us,repay r
WHERE us.user_id = r.user_id;

b:MIN,返回指定数据的最小值。

eg:查询借款逾期天数最少的用户

SELECT us.name 姓名,MIN(r.overdue) 逾期天数 from user_info us,repay r
WHERE us.user_id = r.user_id;

c:COUNT,返回指定组中项目的数量。

eg:select count(*) from user_info where current_quota >1500;

d:AVG,返回指定组中的平均值,空值被忽略。

eg:SELECT us.name 姓名,AVG(r.overdue) 逾期天数 from user_info us,repay r

WHERE us.user_id = r.user_id;

e:SUM,返回指定数据的和,只能用于数字列,空值被忽略。

eg:SELECT us.name 姓名,SUM(r.overdue) 逾期天数 from user_info us,repay r

WHERE us.user_id = r.user_id;

2.其他一些函数

a:截取字符串 

LEFT/RIGHT函数返回field最左边/最右边的length个长度的字符串   SUBSTRING函数返回field从start开始共length个长度的字符串

eg:SELECT LEFT('miaoying.new@qq.com',3);

     SELECT RIGHT('miaoying.new@qq.com',3);

     SELECT substring('miaoying.new@qq.com',2,7);

b:日期函数–显示当前系统时间    格式:yyyy-MM-dd hh:mm:ss

eg:SELECT NOW();

c:显示当前日期   格式:yyyy-MM-dd

eg:SELECT CURDATE();

d:显示当前时间   格式:hh:mm:ss

eg:SELECT CURTIME();

e:WEEK(date,first)   返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始) 

eg:select WEEK('2018-08-06'); 

    select WEEK('2018-08-06',0); 

    select WEEK('2018-08-06',1);

f:DATE_FORMAT:根据format字符串格式化date值 (%Y:年,4位   %y:年,2位    %H:时, 24小时格式     %h:时, 12小时格式)

SELECT DATE_FORMAT(regist_time, '%Y/%m/%d/%h:%i') FROM `user` WHERE phone = 18632156680;

3.Case when的用法:

eg:select user_id ,CASE when current_quota >= 1100 then '高额' else '低额' end from user_info;

4.distinct用来去除重复数据

eg:select distinct user_id from loan_apply;

5.模糊查询:like

_代表匹配任意一个字符

%代表匹配任意0-n个字符

Like 与 rlike 的区别:

like是完全匹配。rlike和regexp是不完全匹配.like不是正则,而是通配符。这个通配符可以看一下SQL的标准,例如%代表任意多个字符。rlike是正则。

eg:SELECT * from user_info WHERE name like '王%志';

     SELECT * from user_info WHERE name like '_志涛%';

     SELECT * FROM user_info WHERE name rlike '[张王]志涛';

6.Where与having的区别(主要体现在查询速度上)

where是在查询前做条件限制,having是在查询后的结果集上做条件限制。

查询前做限制的话,返回的件数会少;而在查询后的结果集上做限制的话,之前的查询结果可能会很多,这样就会影响性能。

eg:select state,sum(amount) from loan_apply group by state having state = '10';

     select state,sum(amount) from loan_apply WHERE state = '10' group by state;

7.limit 分页

这里M表示从(M+1)条记录开始,N表示返回的记录条数
eg:select * from user limit 4,5;

     select * from user limit 10;

8.关系型运算符优先级高到低为:NOT>AND>OR

如果where 后面有OR条件的话,则OR自动会把左右的查询条件分开。

eg:SELECT * from `user` WHERE id =356879586 and info_state = 7 or info_state = 8;   等同于第二句(找出的是info_state为8 或者id为356879586并且info_state为7)

     SELECT * from `user` WHERE (id =356879586 and info_state = 7 )or (info_state = 8;

      SELECT * from `user` WHERE id =356879586 and (info_state = 7 or info_state = 8);(找出的是id为356879586的info_state为8或info_state为7)

9、联合查询分类

内连接(inner Join 或 Join):仅显示两个表中匹配行,即两表中都有才显示。

 外连接(outer Join)

          左外连接(left outer Join 或 left Join):以左表作为基准表,右表中无结果的字段为null。 

           右外连接(right outer Join 或 right Join):以右表作为基准表,左表中无结果的字段为null。

          全外连接(full outer Join 或 full Join)::左表/右表,有一个有就显示。

 交叉连接 (cross Join):A的每条记录都有和B中所有记录相对应的信息。

结果集链接 (union 和 union all):将多个select结果集进行合并。值得注意的是,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

eg:

 select DISTINCT(u.id),la.amount from user u  INNER JOIN loan_apply la on u.id = la.user_id;

select u.id,la.amount from user u LEFT JOIN loan_apply la on u.id = la.user_id;

 

select u.id,la.amount,la.user_id from user u RIGHT JOIN loan_apply la on u.id = la.user_id;

select * from `user` u1 UNION select * from `user` u2;

10、查询某一字段为空

is NULL 而不是 =NULL

eg:SELECT * from user_info WHERE idcard_address is NULL;等同于

SELECT * from user_info WHERE idcard_address ='';

posted @ 2018-08-22 10:24  林中秋天  阅读(146)  评论(0编辑  收藏  举报