MYSQL 高级SQL语句(二)

目录

一、表连接查询

1.1 left join(左连接)

1.2 right join(右连接)

1.3 inner join(内连接)

二、视图

2.1 视图表与派生表比较


一、表连接查询

MYSQL数据库中的三种连接:

  • inner join(内连接):只返回两个表中联结字段相等的行(有交集的值)
  • left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录
  • right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录

注:oracle数据库支持 outer join(外连接),mysql不支持。

MYSQL 高级SQL语句(二)_第1张图片

1.1 left join(左连接)

left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录。

 
  

select * from location A LEFT JOIN store_info B on A.store_name=B.store_name;  #左连接

MYSQL 高级SQL语句(二)_第2张图片

MYSQL 高级SQL语句(二)_第3张图片

1.2 right join(右连接)

right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录。

 
  

select * from location A RIGHT JOIN store_info B on A.store_name=B.store_name; #右连接

MYSQL 高级SQL语句(二)_第4张图片

1.3 inner join(内连接)

inner join(内连接):只返回两个表中联结字段相等的行。

 
  

方法一:
 select * from location A inner join store_info B on A.store_name=B.store_name;
 ​
 方法二:
 select * from location A, store_info B where A.store_name=B.store_name;
 ​
 方法三:
 select * from location A inner join store_info B using(store_name); #using()是函数,必须保证括号内的字段在两个表中是同名的

MYSQL 高级SQL语句(二)_第5张图片

MYSQL 高级SQL语句(二)_第6张图片

MYSQL 高级SQL语句(二)_第7张图片

示例:

设置location表的别名为A、store_info表的别名为B,查询A表和B表中store_name字段值相等的行,之后对region字段进行分组汇总,并计算组内销售额之和。

 
  

select A.region region,sum(B.sales) sales from location A,store_info B where A.store_name=B.store_name group by region;

MYSQL 高级SQL语句(二)_第8张图片

二、视图

视图:可以被当作是虚拟表或存储查询。

  • 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。
  • 临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
  • 视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。 比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。

语法:

 
  

CREATE VIEW "视图表名" AS "SELECT 语句";   #创建视图表
 ​
 DROP VIEW "视图表名";                     #删除视图表

示例:

视图表就是保存了select语句的查询结果,可以理解为select语句的别名。

原表数据变化后,视图表的结果也会发生变化。

 
  

#将两个表的连接查询,创建为视图表
 create view v_region_sales as select A.region region,sum(B.sales) sales from location A inner join store_info B on A.store_name=B.store_name group by region;
 ​
 select * from v_region_sales;     #查看视图表的存储结果
 ​
 drop view v_region_sales;         #删除视图表

MYSQL 高级SQL语句(二)_第9张图片

MYSQL 高级SQL语句(二)_第10张图片

MYSQL 高级SQL语句(二)_第11张图片

2.1 视图表与派生表比较

派生表,两个select查询写在一个句子当中,比较复杂冗长。

视图表,简化复杂的查询。只需创建一次,后面可以直接对已创建好的视图表进行操作。

 
  

#派生表:C就是子查询中select语句的派生表。
 select sum(C.sales) from (select A.region region,sum(B.sales) sales from location A,store_info B where A.store_name=B.store_name group by region) C;
 ​
 ​
 #视图表:只需创建一次,后面可以直接对已创建好的视图表进行操作。
 create view v_region_sales as select A.region region,sum(B.sales) sales from location A inner join store_info B on A.store_name=B.store_name group by region;
 ​
 select sum(sales) from v_region_sales;    #对视图表进行操作

MYSQL 高级SQL语句(二)_第12张图片

MYSQL 高级SQL语句(二)_第13张图片

你可能感兴趣的:(mysql,sql,数据库)