mysql高级查询

高级查询(1)

 

 

1.      行转列的概念

2.      CASE WHENTHEN ELSE应用(重点)

3.      聚合函数SUM实现行转列(重点)

4.      行转列的分组筛选(重点)

5.      行转列的除NULL查询(难点)

 

一:CASE WHEN THEN ELSE END 的应用:


目的: 根据不同的列值进行判断,输出我们指定的值

使用场景: 可以实现类似JAVA中的if条件结构的用法,根据不同的值进行

   流转。

语法:

select 列名,CASE 列名1 WHEN ‘值1’ THEN ‘输出值’end

from 表名

实际代码应用:

select *,CASE items WHEN '苹果7' THEN ‘iphone 7’end

from 表名

 

ELSE

加在 THEN 输出的值后面,END结束之前

实际代码应用:

select *,CASE items WHEN '苹果7' THEN  'iphone7' ELSE

END from 表名

好处: 可以过滤非指定输出的结果(处理NULL)

二:SUM()函数:

目的: 对列进行 求和并返回一个值。

使用场景:可以在数据库中将我们需要累计统计的列进行累加,并最终发挥

一个值。

语法:select sum(列名) from 表名

实际代码应用: select sum(id) fromsalecounts

 

三: Group By( )函数:

目的:对已经查询出的数据进行划分区域,划分区域的目的就是为了保证,

相同的值只出现一次。保证数据在统计时的唯一性。

使用场景:对已经查询的数据进行2次筛选,去掉重复部分。

语法: select * from 表名 group by date

实际代码应用: selectdate,items,sum(CASE items WHEN '苹果7'

   THEN counts end ) as '日销量数'

  from salecounts groupby date

四:ELSE 对结果进行除NULL

目的:对已经查询出的结果,进行处理,达到我们想要的效果。

使用场景: 查询结果中有NULL 就可以使用

实际代码: select date,items,sum(

CASE items '苹果7' THEN counts ELSE 0

)END AS '输出'

from salecounts

五: 使用IFNULL对结果进行处理

目的:对已经查询出的结果,进行处理,达到我们想要的效果。

使用场景: 查询结果中有NULL 就可以使用

 

实际代码:select date,

IFNULLsum(CASEitems WHEN '苹果7' THEN counts

end),0)as '苹果7',

IFNULL(sum(CASE items WHEN '苹果鼠标' THEN

counts end),0) as '苹果鼠标'

from salecounts group by date

注意:

使用IFNULL的时候中间不能有空格,必须保证两个单词是连贯的

 

 

 

高级查询(2)

 

 

目标:

1.表连接

 (1)内连接

 (2)左外连接

 (3)自连接

2.高级子查询

 (1)单行子查询

 (2)多行子查询

 (3)EXISTS子查询

 

 

 

一:表连接

目的:在已经符合主外键关系的基础上,进行联合查询,得到多张表的

数据。

使用场景:需要涉及到多表联合查询数据时使用。

 

语法:select  表名1.列名1,表名1.列名2,表名2.列名1

from 表名 1 表名2

where 表名1.相关列=表名2.相关列

 

二:左外连接|右外连接

目的:表结构特殊,两张表中各有对方没有关系的数据,需要将没有相关

主外键关系的列内容进行输出。

使用场景:

需要将左表或右表的内容全部输出。

语法:

SELECT 别名1.列名1,别名2.列名1

FROM  表1 as 别名1

     [LEFT | RIGHT] JOIN 表2 as 别名2

 ON 别名1.条件列名 = 别名2.条件列名

注意点:

left join right join 都可以代表from的意思。

on 可以代表我们的where

left join: 将左侧表作为主表全部显示。

right join: 将右侧表作为主表全部显示。

某些表中有一些独立列值,是必须要输出的,那么根据实际开发情况

选择其输出在左边或者右边

左边|右边: 主表

主表概念:谁是主表谁全部输出,如果输出的内容没有对应的,则是

  NULL。

 

三:子查询

错误解答:

错误代码:[Err] 1242 - Subquery returns more than 1 row

解决方案: 查看是不是内部子查询返回了多个值,并且外部使用的是‘=’

 

错误代码:[Err] 1241 - Operand should contain 1 column(s)

解决方案: 查看外部子查询的列需要接受几个结果,如果内部子查询返回

了多列,在使用时就会出现这个错误。

 

单行子查询: 返回 一个结果 用‘=’接受结果。

 

 

多行子查询: 返回 多个结果 用  ’in‘ 接受结果。

 

相关子查询: 返回true 或者 false ,如果返回true则执行外部SQL,否则不执行

exists: 如果有结果返回true 否则 false

not exists: 在exists结果的基础上取反。寻找非exists结果的其他值。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(mysql)