子查询
子查询:连接表格,在WHERE 子句或HAVING 子句中插入另一个SQL语句。
语法:
SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符] #外查询
(SELECT "字段1" FROM "表格2" WHERE "条件") ; #内查询
#可以是符号的运算符,例如=、>、<、>=、<= ;也可以是文字的运算符,例如LIKE、 IN、BETWEEN
#先执行内查询,再执行外查询。内查询的查询结果,作为外查询的条件
left join(左连接)
left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录。
select * from location A LEFT JOIN store_info B on A.store_name=B.store_name; #左连接
right join(右连接)
right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录。
select * from location A RIGHT JOIN store_info B on A.store_name=B.store_name; #右连接
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()是函数,必须保证括号内的字段在两个表中是同名的
视图
视图:可以被当作是虚拟表或存储查询。
- 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。
- 临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
- 视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。 比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写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; #删除视图表