Mysql之高级查询

一.MySQL外键设置及定义

定义:为了满足关系型数据库的第三范式,降低数据冗余,在表与表之间需要满足相应的约束关系,可以为表和表之间设置外键

 设置外键语法    (表类型不能是myisam存储引擎)

foreign key(col_name) references f_table(col_name)

 

 二.视图:

视图:VIEW

 是一种虚表(存储下来的select语句),表结构为空。

 创建视图:CREATE VIEW vtbl_name as select_statement;

受到母表控制,不用可以删除

也可以牵连母表(视图里面的数据发生变化,母表也会受到牵连)   

视图不要随便变更里面数据,否则会破坏原有表的数据体系

 

 

 三.DML语句之查询语句SELECT高级查询

SELECT语句的执行过程

 过程详解:   from clause ---> where clause ---> group by ---> having clause --->order by ---> select --->limit

 写法顺序: select col1,col2... from clause ---> where clause ---> group by ---> having clause ---> order by ---> limit

 SELECT语句默认查询后会被缓存,方便下次查询

 SQL_CACHE:显示指定存储查询结果于缓存之中。

 查询sql缓存是否开放  show global variables like ‘query%’;

(1)DISTINCT:数据去重

格式:select distinct col_name from tbl_name;

 

联合去重:

 

(2)SELECT支持算术操作以及调用函数

 

 

 (3)where子句其他用法

 

比较操作符之IN

IN (元素1,元素2.....)

 

 

(4)group子句之聚合运算

group:根据指定的条件把查询结果进行“分组”   目的   ----->以用于做聚合运算

 avg(),平均数  max(), 最大值  min(),最小值  count(),做统计  sum(),和数

 select avg(col_name) from tbl_name group by an_col_name;

 

 

 

查询年龄最大的那个班级,以及最大的年龄

 

having:对分组聚合后的结果做过滤

 

 

 

同时对分组聚合运算后的查询结果根据指定条件进行排序(order by),默认升序,降序使用desc

另外最后也可以进行偏移限制查找  limit [m,[n

(5)SELECT语句之连表查询

为了在设计表时,为了符合范式方面的要求,很有可能要将一张表拆分成2张甚至多张的表。 

将来在查询时,需要将2张表中的数据按照指定字段(或者某种模式)联合起来,然后显示其相应的结果。

多表查询的表连接方式

交叉连接:笛卡尔乘积(最耗资源,效率极其低)

连表查询:执行表连接操作是按照指定字段间的关系进行连接。

内连接:

等值连接:表的字段以等值建立连接关系,两个表中具有相同意义的字段(有关联意义的字段)以相等方式进行判断,进行连接, 左右表能相等的行直接构建成新行,不相等的排除在外。

 

自连接:自己跟自己字段建立等值连接(定义别名进行查询)

外连接:(也是基于等值连接,但是要考虑空的情况)

左外连接:FROM tb1 LEFT JOIN tb2 ON tb1.co1=tb2.col

  

右外连接:FROM tb1 RIGHT JOIN tb2 ON tb1.co1=tb2.col

 

子查询:在查询语句嵌套着查询语句(尤其在ORACLE里面用的非常广泛)

               基于查询结果再次进行查询。

where子句中   例子:select name,age from students where age>(select avg(age) from students);

 in中的子查询:例子:mysql> select age from students where age in (select age from teachers);

 表联合查询:将多个表的查询结果进行联合在一起   select col_name from tb1_name union select col_name from tb2_name;

            例如mysql> select name,age from students union select name,age from teachers;

 套表查询:

将查询的结果做为表来嵌套查询

 格式:select col1,col2…… from (select语句) as vtb_name where……

 

posted @ 2020-03-24 15:28  乘风破浪的小落夜  阅读(340)  评论(0编辑  收藏  举报