mysql基础语法神马滴...

1.处理空值数据

select  pk_id  ,  ifnull ( f_num ,  0 )  from  t_test ;

判断 f_num 列的每一个值是否为null ,如果为 null  就用数字 0 来代替。

语法格式:

select  列1  ,  ifnull (列2 , A)  from  表名 ;    为 null 就用 A  来代替。

2. 测试是否为空用 is  null   。 

    判断是否不为空用  is not null  。

select  列A  ,  列B  from  表名 where  列C  is  not  null  ;

3.多列排序是根据后面列名的顺序确定优先级。

默认排序为升序:asc   。

 降序为: desc  。

select  列1  ,  列2  from  from  表名  order  by 列3  ,  列4  desc  ;

4. 数据库建、用、删:

create  database  数据库名 ;

use  数据库名 ;

drop  database  数据库名 ;

5. 聚合函数:

sum 求和  、avg  求平均 、count 记录行的数目、 max 求最大值、min 最小值 。

用 as  取别名,别名直接跟在 as  后面。

使用  all  包含 null  值。

max、min  函数自动忽略 null 值。

select   sum (all  列名)  as  总和  from  表名 ;

select   avg (all 列名) as 总和 from 表名 ;

select  count  ( * ) as 总和 from 表名 ;

select  max (  列名 ) as 总和 from 表名 ;

select  min (  列名 ) as 总和 from 表名 ;

6.  select  count ( * )  from  表名 ; 计数所有选择行,包括 null 值,包括重复 。

     select count ( all  列名 ) from 表名 ;计数非 null 值,包括重复 。

     select count ( all 列名 ) from 表名 ;查询列时,不计数 null 值,去掉重复 。

7.  group  by 分组:

select  列1  ,  聚合函数 (聚合函数作用范围) from  表名  where  过滤条件 group  by   列2  ;

select  city  ,   count ( *  ) from   t_temp   where  temp > 35  group by  city  ;

select  后面有聚合函数,也有非聚合函数  就需要分组。

8. having  过滤

having  后面跟的是聚合函数,有 having  必定有 group by  。

例:统计个城市高温天气(气温>35度)天数大于3天的城市:

select  city  ,  count ( * ) from  t_temp  where  temp  > 35  group  by  city  having  count ( * ) > 3 ;

9. sql 语句书写顺序:

select  =>  from  =>  where  =>  group  by  =>  having  =>  order  by  ;

执行顺序:  from  =>  where  =>  group  by  =>  select  =>  having  =>  order  by  ;

10.  子查询:

非相关子查询可以单独运行。

从结果集中查询需要给结果集命名:

select   *   from  (  select  f_classname  ,  f_teacher  from  t_class  )  x ;          此句中 x 为别名。

11. where 子句中的子查询

select   列A  from  表1  where  列B   =  (子查询);

返回多个结果的子查询:

select  列A  ,   列C  from  表1  where 列B  in(s0elect   列D  from  表2);

12. 子查询中的运算符

    1).   exists后面必须跟子查询且必是非相关子查询,有返回行就为真,无返回行即为假。

exists语句通常写在where后面。

select   *   from   t_class   where  exists  (  select  *  from  t_student  )  ;

   2).    all 和  any  :

select   列A   from   表1   where   列B  >  (  子查询语句 )  ;

比较运算符 =  、   >  、  < 、   >=   、 <=后面只能跟单个值。

如果有多个返回值就用 any  或者  all  。

>  all  表示比最大值还大    。

 >any   表示比最小值大   。

select   列A   from   表1   where   列B  >  ( 子查询语句 )  ;

只要有一行满足就为真,所有行都不满足就为假。

13.  union  运算符:

使用 union  查询多个表时,列数必须一致且所有对应列的数据类型也要一致。

select  列A  ,  列B  from   表1  union   all  select  列C  ,  列D   from  表2 ;

如果不写  all  ,显示结果会自动去掉重复数据信息。

14.  联接

    1).   相等联接

select   表1.列A  ,   表1.列A  ,  表1.列A   from   表1  join   表2   on   表1.列m  =  表2.列n ;

可多表联接

select  *   from   表1   join   表2   on   表1.列m  =  表2.列n    join   表3   on  表1.列A = 表3.列B  ;

   2). 非相等联接

select   表1.列A  ,  表1.列A  ,  表1.列A   from   表1   join   表2   on   表1.列m  > 表2.列n  ;

使用别名:

select   SE . examID  ,  SE . mark  ,   S.name   as  studentname   from   StudentExam  as  SE  

      join  Student  as  S  on  SE . studentID  =  S . studentID  order  by  examID  ;

多个条件用 and   连接 :

select    c . *    ,    p . name    from    class  c   ,  professor   p   where   c . professorID  =  p . professorID   and   c . professorID  >=  2 ;

使用别名时  as  可以省略不写。

    3). 外联接不能简写

left   join   ...  on    此写法 join 左边的表会完整显示 。

reght   join  ...  on      此写法  join  右边的表会完整显示 。

 

 

 

 

 

你可能感兴趣的:(mysql基础语法神马滴...)