MYSQL 高级SQL语句

220 阅读2分钟

子查询

子查询:连接表格,在WHERE 子句或HAVING 子句中插入另一个SQL语句。

语法:


 SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符]     #外查询
 (SELECT "字段1" FROM "表格2" WHERE "条件") ;             #内查询
 ​
 #可以是符号的运算符,例如=><>=<= ;也可以是文字的运算符,例如LIKEINBETWEEN
 ​
 #先执行内查询,再执行外查询。内查询的查询结果,作为外查询的条件

image.png

left join(左连接)

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

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

1-2.png

1-3.png

right join(右连接)

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

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

1-4.png

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()是函数,必须保证括号内的字段在两个表中是同名的

1-5.png

1-6.png

1-7.png

视图

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

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

语法:

sql
复制代码
 CREATE VIEW "视图表名" AS "SELECT 语句";   #创建视图表
 ​
 DROP VIEW "视图表名";                     #删除视图表

示例:

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

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

csharp
复制代码
 #将两个表的连接查询,创建为视图表
 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;         #删除视图表

2-1.png

2-2.png

2-3.png