一、连接查询

A表
请添加图片描述

B表

UPDATE store_info SET store_name='Washington' WHERE sales=300;

#修改一下表里面的数据方便实验

在这里插入图片描述
请添加图片描述

1、inner join(内连接)

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

select 左表别名.字段 from 左表 坐标别名 inner join 右表 右表别名 on 坐标别名.字段 = 右表别名.字段 

在这里插入图片描述

在这里插入图片描述
内连接的另外几种方式

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);

在这里插入图片描述

2、left join(左连接)

left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录
在这里插入图片描述

select * from location A left join store_info B on A.store_name = B.store_name;

没有交集的字段就会为空
在这里插入图片描述

3、right join(右连接)

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

select * from location A right join store_info B on A.store_name = B.store_name;

左表中没有的值就会为空
在这里插入图片描述

二、CREATE VIEW

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

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

语法:CREATE VIEW "视图表名" AS "SELECT 语句";

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

创建一个原表数据的试图表
在这里插入图片描述

在这里插入图片描述

三、UNION

两表数据
在这里插入图片描述

联集,将两个SQL语句的结果合并起来,两个SQL语句所产生的字段需要是同样的数据记录种类

UNION :生成结果的数据记录值将没有重复,且按照字段的顺序进行排序

语法:[SELECT 语句 1] UNION [SELECT 语句 2];
select store_name from location union select store_name from store_info;

UNION ALL :将生成结果的数据记录值都列出来,无论有无重复

语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];
select store_name from location union all select store_name from store_info;

在这里插入图片描述内连接求去重后的交集
在这里插入图片描述

左连接求交集
在这里插入图片描述

使用子查询的方式求交集的值

SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) IN (SELECT Store_Name FROM store_info);

在这里插入图片描述

求交集

select [distinct] A.字段 from 左表 A inner join 右表 B on A.字段 = B.字段;select A.字段 from 左表 A inner join 右表 B using(同名字段);

select B.字段 from 左表 A left join 右表 B on A字段 = B.字段 where B.字段 is not null;

select A.字段 from 左表 A right join 右表 B on A.字段 = B.字段 where A字段 is not null;

select A.字段 from 左表 A,右表 B where A.字段 = B.字段;select 字段 from 左表 where 字段 in (select 字段 from 右表);

求无交集单表的无交集

select 字段 from 左表 where 字段 not in (select 字段 from 右表);

select A.字段 from 左表 A left join 右表 B on A.字段 = B.字段 where B.字段 is null;

select B.字段 from 左表 A right.join 右表 B on A.字段 = B.字段 where A.字段 is null;

多表的无交集

create view V XXX as select 字段 from 左表 union all select 字段 from 右表select 字段 from V xxx group by 字段 having count(字段) = 1;

select .子段 from (select distinct] 字段 from 左表 union all selet distinct] 字段 from 表)  group by h.字段 having countih.字段) = 1;

取非交集的值

1)联级方法中 count(*<=1
(2)左右内连接 将is not null 改为 is null
(3)子查询 外连接查询 not in (内连接查询)

五、CASE

是 SQL 用来做为 IF-THEN-ELSE 之类逻辑的关键字

语法:
SELECT CASE ("字段名")
  WHEN "条件1" THEN "结果1"
  WHEN "条件2" THEN "结果2"
  ...
  [ELSE "结果N"]
  END
FROM "表名";

# "条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。

SELECT Store_Name, CASE Store_Name 
  WHEN 'Los Angeles' THEN Sales * 2 
  WHEN 'Boston' THEN 2000
  ELSE Sales 
  END 
"New Sales",Date 
FROM store_info;

#"New Sales" 是用于 CASE 那个字段的字段名。

在这里插入图片描述

六、空值(NULL) 和 无值(‘’) 的区别

1.无值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的。
2.IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是无值的。
3.无值的判断使用='‘或者<>’'来处理。<> 代表不等于。
4.在通过 count()指定字段统计有多少行数时,如果遇到 NULL 值会自动忽略掉,遇到无值会加入到记录中进行计算。

sql 正则表达式的常见种类
在这里插入图片描述

select "字段" from "表名" where "字段" regexp '正则表达式';

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐