您的位置:首页 > 数据库 > MySQL

数据库——MySQL(三)(常用函数、聚合函数、内链接、外链接、子查询)

2018-03-03 23:15 609 查看
常用函数:(当取固定值时,使用数据库自带的虚表,可以不写表名称,取表记录时,正常写法既可)
●  把字符转化成ASCII值:select  ascii ('a');
●  把ASCII值转化成字符:select  char (97);
●  取字符串的长度: select  char_length ("中国");
●  取占位符: select  length ("中");(utf8编码下,一个中文字占3个字符长度)
●  拼接字符串:         select  concat ('My', 'S', 'QL');(字段个数没有限制)
●  大写转小写: select  lower ("ABC");(upper:小写转大写)
●  字符串替换: select  replace (原字符,需要替换字符串,新字符串);
●  取指定方向指定长度的值:select  right ('adfnvadfa',1);(left)
●  取整数部分: select  floor (4.9);
●  四舍五入:    select  round (4.99999999,2);
注意:四舍五入第二个函数,如果为正整数,表示保留多少位小数。如果为0或者不写,表示不保留小数。如果为负整数,表示从小数点前的第几位进行四舍五入
●  查询当前日期时间: select  now();
●  查询当前日期:       select  curdate();
●  查询当前时间:       select  curtime();
注意:返回的是数据库安装那台电脑的系统时间。只返回年份year(now( )),月份与天数方法相同
------------------------------------------------------------------------------------------------------------------
聚合函数:(count:统计记录数)
●  语法:select  count(列名) from  表名称;
●  例子:select  count(*) from  user;
注意:如果指定了列名,那么列的个数有且只能有一个。如果不知道列名可以使 * 代替
------------------------------------------------------------------------------------------------------------------
聚合函数:(sum:求和)
●  语法:select  sum(列名) from  表名称;
●  例子:select  sum(age) from  user;
注意:只能作用在数值类型的列上,不能作用在字符串列上,作用在日期字段上无意义
------------------------------------------------------------------------------------------------------------------
聚合函数:(avg:求平均)
●  语法:select  avg(列名) from  表名称;
●  例子:select  avg(age) from  user;
注意:只能作用在数值类型的列上,不能作用在字符串列上,作用在日期字段上无意义。不会统计值为null的数,avg(ifnull(列名,0))把null的值换成0
------------------------------------------------------------------------------------------------------------------
聚合函数:(max:求最大值。min:求最小值)
●  语法:select  max(列名) from  表名称;
●  例子:select  max(age) from  user;
注意:字符串根据ASCII值
------------------------------------------------------------------------------------------------------------------
聚合函数:(group  by:分组)
●  语法: select  列名  from  表名  group  by  列名;
●  例子: select  age  from  user  group  by  age;
注意:使用了group by。那么在select后未使用聚合函数出现的列,必须出现在group by子句中,否则没意义
------------------------------------------------------------------------------------------------------------------
聚合函数:(having:过滤)
●  语法: select  列名  from  表名  group  by  列名  having  条件;
●  例子: select  age,count(*)  from  user  group  by  age  having  count(*)>5;
注意:having是对分组之后的结果进行过滤。having关键字必须和group by一起使用,不能单独使用
------------------------------------------------------------------------------------------------------------------
聚合函数:(综合使用)



注意:聚合函数都不会处理null的值
------------------------------------------------------------------------------------------------------------------
内链接:(取多个表中同时满足条件的记录(取公共部分))
一种写法:
●  语法: select  *  from  表名1,表名2...表名n;
●  例子: select  *  from  user  u,student  s  where  u.id = s.id;
另一种写法:(inner  join、inner  outer  join两种写法)
●  语法: select  *  from  表名1  inner  join  表名2  on  条件...  inner  join  表名n  on  条件;
●  例子: select  *  from  user  u  inner  join  student  s  on  u.id = s.id ;
注意:如果使用的列名在多个表中存在,那么必须指明当前使用的是哪一个表中的列,给表取一个别名,取了别名就不能在使用表名
------------------------------------------------------------------------------------------------------------------
外链接:(取出指定方向外链接表的全部信息和指定条件中多表公共的信息)
左外链接:(left  join、left  outer  join两种写法)
●  语法: select  *  from  表名1  left  join  表名2  on  条件...  left  join  表名n  on  条件;
●  例子: select  *  from  user  u  left  join  student  s  on  u.id = s.id ;
右外链接:(right  join、left  outer  join两种写法)
●  语法: select  *  from  表名1  right  join  表名2  on  条件...  right  join  表名n  on  条件;
●  例子: select  *  from  user  u  right  join  student  s  on  u.id = s.id ;
注意:如果被关联的表按照条件未查询到关联的记录则把这个表的值用null代替。外链接必须指明关联关系
------------------------------------------------------------------------------------------------------------------
子查询:(当前一个select的条件或者显示的值,需来源于其他查询的结果,那么这种情况就可以使用子查询)
●  例子: select  *  from  user  where  id in(select  id  from  student  group  by  id  having  avg(ifnull(score,0))>80);
注意:每个查询出来的结果都相当于一个临时表。子查询返回的数据类型需和主查询列的数据类型一致。子查询返回列的数量必须和主查询列的数量一致。子查询可以使用在任意的地方(如果子查询放在列上,那么返回的值最多只能是一行记录。如果子查询在where条件上(可能返回多行记录),那么建议使用in关键字进行链接)
-----------------------------------------------------------------------------------------------------------------
自己整理,有些地方是扒拉的,如有侵犯,还望告知
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息