感恩笔记之SQL查询功能最简使用模板
Posted 感恩的学习空间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了感恩笔记之SQL查询功能最简使用模板相关的知识,希望对你有一定的参考价值。
感恩笔记之SQL查询功能最简使用模板
第一部分:SQL单表功能
1 语句主要关键字
SELECT --查询数据列
INTO --新建数据表
FROM --查询数据表
WHERE --筛选数据表结果
ORDER BY --筛选结果排序
GROUP BY --筛选结果分组
HAVING --筛选分组结果
UNION --合并查询结果
2 新增列功能汇总
SELECT distrint 列名, --1.单列去重
列 AS 新列名, --2.列命名
函数(列) + 列名 AS 新列名, --3.函数+计算式
CASE WHEN 函数(列) + 列 > 80 THEN \'新增处理\' --4.函数+计算式+条件筛选
WHEN 条件2 THEN \'新增处理\'
WHEN 条件3 THEN \'新增处理\'
ELSE \'新增处理\' --如果以上条件都不满足
END as 新列名
FROM 表名
3 筛选条件汇总
SELECT * FROM 数据表
WHERE 列名 >,<,=,!=,<> 数值 --1.比较查询=数值和字符
列名 BETWEEN 500 AND 100 --2.区间查询=数值
列名 IN (\'字符\',\'数值\') --3.批量提取字符
列名 LIKE --4.特定字符查询
LIKE‘%字符%’ --模糊查询
LIKE‘字符%’ --精确查询
LIKE‘_字符%’ --定位查询
LIKE‘%[50%]%’ --数字符号查询
LIKE‘%[^50%]%’ --逆向查询
列名 is NULL 或 is NOT NULL --处理空值
--1 in 和like 功能性探索
注意:()和’’对应数字和字符的使用,两个关键字的查询内容都可以是字符或者数字
注意:默认都是字符型数据,如果要进行计算,改成数值型数据
--2 in :①可以多个查询,②可以查询字符和数字,③能一起查,④内容完全对应
select * from 体检信息 where 姓名 IN (\'宋秋雨\',\'王复学\')
select * from 电话号码 where 姓名 IN (\'13591067891\',\'16604106992\')
--3 like:①可以多个查询,②可以查询数字,③但是要分列查询,④内容可以模糊查询
select * from 体检信息 where 姓名 like \'%宋%\' or 家属年龄 like \'%48%\'
--4 like查询套路:筛选字符中的有用信息
--第一步:可乐和雪碧同时存在的数据
where 列名 like’%可乐%’ and 列名 like’%雪碧%’
--第二步:显示可乐的数据和显示雪碧的数据
where 列名 like’%可乐%’ or 列名 like’%雪碧%’
--第三步:在显示可乐和雪碧的数据同时去掉有牙膏字样的数据
where 列名 like’%可乐%’ or 列名 like’%雪碧%’ and 列名 not like’%牙膏%’ :
--5 数据表中空白格解析:
--如果空白格中无数据:但是又不是null 那就代表空白格中的数据为0,
--如果是数值列:可以直接使用where 年龄 !=\'0\' 姓名列不为0的列
--如果是字符的列:就可以用where 姓名 like \'%_%\' 姓名列不为空的列
4 其他关键字汇总
--1 Order by
SELECT *
FROM 数据表
WHERE 查询条件
ORDER BY 列 DESC --1.单列排序
SELECT *
FROM 数据表
WHERE 查询条件
ORDER BY 列,列 --2.多列排序
--2 Group by
SELECT 列1,COUNT (*)
FROM 数据表
GROUP BY 列1 --1.单列分组求数
SELECT 列1,列2,列3,COUNT (*)
FROM 数据表
GROUP BY 列1 ,列2,列3 --2.多列分组求数
SELECT 列名 , COUNT(求数列)次数 , SUM (求和列)总额
FROM 数据表
GROUP BY 列名 --3.分组求数+求和
--说明:在得出分类名称,分类次数后,对分类后每次的数额进行分类求和,
--可以对分组前,同名的机构进行求和验证数额的正确性
5 函数的应用位置
--1、函数在select中使用:建立as列名,后接where查询,不能使用as列名,需用完整函数表达式
--2、函数在where中使用:单独在where中使用必须完整布尔表达式
--3、在order by中使用:可以使用as列名进行排序
--4、在case when中使用:出现在条件表达式中,而case语句出现在select中
--5 函数组合说明:函数结果数字+比较范围
--函数结果数字+计算数字
--函数使用位置说明:
--函数在select中格式 :select 函数名 (列名) from 表名
--函数在where中格式 : select * from 表名 where 函数名(列名)
第二部分:SQL多表功能
1 两表_父子查询和连接查询架构
1 嵌套查询
select * FROM 父表
WHERE 相同列 IN (SELECT 相同列 FROM 子表) --1.子表在父表中存在的数据
SELECT * FROM 父表
WHERE 相同列 NOT IN (SELECT 相同列 FROM 子表) --2.子表不在附表中存在的数据
--说明:附带属性:用相同字段连接,通过子句属性,显示父句中匹配的数据
2 链接查询
SELECT * FROM 表1 AS a FULL JOIN 表2 AS b --1.两表全部连接,包括空值
ON a.相同列=b.相同列
SELECT * FROM 表1 AS a INNER JOIN 表2 AS b --2.两表有效值链接
ON a.相同列=b.相同列
SELECT * FROM 表1 AS a LEFT JOIN 表2 AS b --3.以左表为准,包括空值
ON a.相同列=b.相同列
SELECT * FROM 表1 AS a RIGHT JOIN 表2 AS b --4.以右表为准,包括空值
ON a.相同列=b.相同列
SELECT * FROM 表1 AS a JOIN 表1 AS b --5.自连接,同一列分类排序
ON a.相同列=b.相同列
--说明:连表后去掉重复列名:逐个显示列
2 三表父子查询和连接查询架构
1 三表子查询_重复
select *
from 表1
where 相同列 in ( select 相同列
from 表2
where 身份证 in ( select 相同列
from 表3 ))
2 三表子查询_不重复
select *
from 表1
where 相同列 in ( select 相同列
from 表2
where 身份证 not in ( select 相同列
from 表3 ))
--说明:三表嵌套,赛选不重复数据,最下一层是not in 上一层是in,这就是一个逻辑反转负负得正的结果
3 三表连接_重复
select *
from 表1 as a join 表2 as b on a.表1相同列 = b.表2相同列
join 表3 as c on b.表2相同列 = c.表3相同列
4 三表连接_不重复
select *
from 表1 as a join 表2 as b on a.表1相同列 != b.表2相同列
join 表3 as c on b.表2相同列 != c.表3相同列
3 多表简便连接
1 二表简便连接
select *
from 表1 , 表2
where 表1.相同列 = 表2.相同列
2 三表简便连接
select *
from 表1 a, 表2 b, 表3 c
where a.身份证号=b.身份证号
and b.参合家庭编号=c.参合家庭编号
--说明:三表连接相同,结果正常显示没毛病,如果是显示三表连接不相同的,那么在连接的 = 号就有一个逻辑关系,类似于负负得正的关系
4 子查询组合连接查询
SELECT * from --1总查询模型
(select * --2子查询1
from 父表1
where 表1相同列 in (select 表1相同列
from 子表1 ) ) AS a
JOIN --3表连接名
(select * --4子查询2
from 父表2
where 表2相同列 not in (select 表2相同列
from 子表2) ) as b
ON a.表1相同列 = b.表2相同列 --5表连接条件
5 多表查询结果处理
--说明:union的功能不仅可以合并相同字段结果,也可以达到去掉重复的结果
--说明:字段必须相同
1 合并结果:列必须相同
SELECT 列1,列2,列3 FROM 数据表 WHERE
UNION
SELECT 列1,列2,列3 FROM 数据表 WHERE
2 结果新建表
SELECT *
INTO 新建表名
FROM (SELECT * FROM 表1
UNION
SELECT * FROM 表2) AS 新表名
3 批量合并结果
careate view 视图名 as
select * from 表1
union all
select * from 表2
......其他所有表
--说明:使用union all 上面不能接别的语句,会报错
6 子查询各位置用法
说明:where位置的子查询是最常用的.
--1单句from位置,具体用途待研究
select * from (select 统筹支付,count(*) 次数 --门诊结算金额出现频率前20名
from T_医院门诊结算单_西丰
where 统筹支付>0
group by 统筹支付
order by 次数 desc)
where rownum<21;
--2union位子 双句子查询,两句结果合并
select count(*)
from (select 身份证号
from T_医院门诊结算单_西丰
group by 身份证号
having sum(统筹支付)>0
union --合并去重
select 身份证号
from T_医院住院结算单_西丰
group by 身份证号
having sum(统筹支付)>0);
--3 from位置 连接查询带子查询
select * from (查询语句) join (查询语句) on 条件连接
--4 select位置的子查询
select *,(select 想要在父表显示的列名1
from 子表1
where 父表.相同列 = 子表1.相同列 ) as 表1 ,
(select 想要在父表显示的列名2
from 子表2
where 父表.相同列 = 子表2.相同列 ) as 表2
from 父表
--格式说明:新增列子查询中:select 只能显示一列信息,多了报错,如果想显示多列可以再写一个,where 中设定的条件就是两个表连接的内容
--重点说明:如果是新增的列参与运算,不能用as后的名字,需要用新增的运算格式
第三部分:SQL变量功能
1 变量使用基本格式
--1定义变量
declare @查询名称 varchar (50)
--2赋值变量
set @查询名称 = \'名称\'
--3使用变量
select 户主姓名1 from dbo.A三表住院信息 where 户主姓名1 = @查询名称
select 户主姓名2 from dbo.B三表门诊信息 where 户主姓名2 = @查询名称
select 户主姓名3 from dbo.B三表门诊信息 where 户主姓名3 like @查询名称
2 视图使用基本格式
create view 视图名 as --1定义视图名称
select * from 表 --2查询模块
执行:select * from 视图名 --3执行视图
3 存储过程使用基本格式
1_存储过程基础
----------------------------------------------------------------
create proc 存储过程名 as --1定义存储过程
select * from 表 --2查询模块
执行:exec 存储过程名 --3执行存储过程
2_带输入参数_存储过程
----------------------------------------------------------------
create proc 存储过程名 --1定义存储过程名
@变量1 int --2定义输入变量
@变量2 char(10)
as
select 列1,列2,列3 --3查询模块
from 表
where 列1=@变量1 --4输入变量对接
and 列2=@变量2
执行1:exec 存储过程名 \'列1内容\' , --5执行输入参数存储过程
\'列2内容\'
执行2:exec 存储过程名 @变量1=\'列1内容\'
@变量2=\'列2内容\'
3_带有输入和输出函数的存储过程
----------------------------------------------------------------
一_定义模块
create proc 存储名称 --1定义存储过程名
@输入变量名 char(10) , --2定义输入变量
@输出变量名1 char(10) output , --3定义输出变量
@输出变量名2 char(10) output
as
二_查询语句模块
select @输出变量名1 = 列名1, --4输出变量对接
@输出变量名2 = 列名2
from 查询表
where 列名 = @输入变量名 --5输入变量对接
三_执行模块
declare @输出变量名1 char(10) , --1声明输出变量
@输出变量名2 char(10)
exec 存储名 \'输入参数对接列内容\' , --2执行带有输出和输出参数的存储过程
@输出变量名1 output ,
@输出变量名2 output
print @输出变量名1 --3执行输出变量
print @输出变量名2
4 游标基本格式待整理
通常情况下,关系数据库中的操作总是对整个记录集产生影响,例如使用SELECT语句检索数据表时,将得到所有满足该语句where子句中条件的记录,而在实际应用过程中,经常需要每次处理一条或者一部分记录。在这种情况下,需要使用游标在服务器内部处理结果集合,他可以有助于识别一个数据集合内部指定的记录,从而可以有选择的按记录执行操作。
( 本章完 )
以上是关于感恩笔记之SQL查询功能最简使用模板的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis -- 动态Sql概述动态Sql之<if>(包含<where>)动态Sql之<foreach>sql片段抽取