目录
- 一、连接查询
- 1、inner join(内连接)
- 2、left join(左连接)
- 3、right join(右连接)
- 二、CREATE VIEW
- 三、UNION
- 取非交集的值
- 五、CASE
- 六、空值(NULL) 和 无值('') 的区别
一、连接查询
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 2000ELSE 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 '正则表达式';