重温SQL查询基础知识
运算符
算术运算符有4个:加减乘除 + - * /
Select id,name, age * 2 as "age"
from Student
比较运算符有8个
= , <> , >= , <= , > , <
is null 、is not null
- 不能对null使用比较运算符 ,查询为null数据;
select * from students
where sex is null
逻辑运算符有3个
not and or
- and运算优先于or运算符
对表进行聚合查询
- 使用聚合函数对表中的列进行合计值或平均值等合计操作
- 通常,聚合函数会对null以外的对象进行合计,但是只有Count(*)函数例外
- 使用Distinect关键字删除重复值
将多行汇总成一行
count:计算表中的记录数(行数)
sum:数据合计值
avg:数据平均值
max:数据最大值
min:数据最小值
不能在where语句中使用聚合函数!
select avg(a) from shohin;
对表分组 Gruop by
- 使用group by子句可以像切蛋糕那样将表进行分割,通过使用group by子句,将表分割后再进行聚合
- 聚合键中包含NULL时,在结果中会以空行形式表现出来
- where子句不能使用聚合函数
select 商品名称,count(*)
from store
group by 商品名称
为聚合结果指定条件 Having
- 使用COUNT函数等碓对表中的数据进行聚合操作时,为其指定条件的不是where子句,而是需要Having子句
- 聚合函数可以在SELECT子句,HAVING子句,和ORDER BY子句中使用
- having子句要写在group by子句之后
- where 子句用来指定数据行的条件,Having子句用来指定分组的条件
select a, count(*)
from shoin
group by a //1
having count(*) > 2 //2
排序
- order by desc 降序 asc升序 放在最后
- 指定多个排序键,会优先使用左侧的建,如果存在相同值的话,会接着参考右侧的键。
- null的顺序,会在开头或者末尾进行汇总
事务
- 事务是需要在通一个处理单元中执行的一系列更新处理的集合,通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理.
- 事务处理的提交指令COMMIT 和 ROLLBACK取消处理两种.
- dbms的事务具有原子性(Atomcity)一致性(Consistency),隔离性(Isolation)和持久性(Durablity)四种特性,统称为ACID特性
sql sever:
begin transaction;
update ...
update ...
commit;
回滚事务
begin transaction;
update ...
update ...
rollback;
视图
- 从sql的角度来看,视图和表是相同的,两者的区别在于表中保存的是实际的数据,而视图中保存的是SQL语句(视图本身并不保存数据)
- 是用视图,可以轻松的完成跨多表查询数据等复杂操作
- 可以将常用的select语句做成视图来使用
- 创建视图需要使用CREATE VIVE语句
- 视图包含“不能使用 order by”和 “可对其进行有限制的更新”两项限制
- 删除视图需要使用DROP VIEW语句
- 多重视图 以视图为基础创建视图 消耗性能 不建议使用7.多重视图 以视图为基础创建视图 消耗性能 不建议使用
创建/删除视图
create view 视图名称(<视图列名1>,<视图列名2>,...)
AS
<select语句>
create view ShohinSum(商品名称, 合计)
as
select 商品名称,count(*)
from store
group by 商品名称
drop view ShohinSum;
视图子查询
标量子查询的书写位置(几乎所有地方都可以使用)
select shohin_id, shohinmei, hanbai_tanka
from Shohin
where hanbai_tanka > avg(hanbai_tanka)
函数/谓词/case表达式
函数有以下几种:
算术函数(±*/)
abs (数值)–求绝对值
mod(被除数,除数) --求余
round(对象数值,保留小数的位数) --四舍五入
字符串函数
str1 || str2 --拼接
length(str) – 计算字符串长度
lower(str) --小写转换
upper(str) --大写转换
REPLACE(对象字符串,替换前的字符串,替换后的字符串),可以将字符串的一部分替换成其他的字符串
SUBSTRING(对象字符串 from 截取的起始位置 for 截取的字符数)
例如截取出字符串中第3位和第4 位的字符
select str1,SUBSTRING(str1 from 3 for 2) as sub_str from sampleStr
日期函数
select CURRENT_DATE; 查询当前日期
select cast(current_timestamp as date) as cur_date; 日期
select cast(current_timestamp as time) as cur_date; 时间
select current_timestamp; 日期和时间
获取年月日时分秒
select current_timestamp,
DATEPART(YEAR ,current_timestamp ) as year,
DATEPART(MONTH ,current_timestamp ) as month,
DATEPART(DAY ,current_timestamp ) as day,
DATEPART(HOUR ,current_timestamp ) as hour,
DATEPART(MINUTE ,current_timestamp ) as minute,
DATEPART(SECOND ,current_timestamp ) as second;
转换函数 CAST
字符串转数值
select CAST('0001' as integer) as int_col;
字符串转日期
select CAST('2019-12-14' as date) as date_col;
COALESCE - 将null转换为其他值
select COALESCE(NULL ,1) as col_1;
谓词(判断是否存在满足条件的记录)
- like
- between
- is null, is not null
- in, not in
- exists
select shohin_mei,hanbai_kanka
from Shohin sa S
where EXIST (select *
from TenpoShohin as TS
where ts.tenpo_id = '000'
and ts.shoin_id = s.shohin_id
)
case 表达式
正如CASE(情况)这个词的含义所示,是在区分情况时使用的,这种情况的区分在程序中通常称为“条件分歧”
使用case表达式能够将select语句的结果进行组合
CASE WHEN <判断表达式> then <表达式>
WHEN <判断表达式> then <表达式>
WHEN <判断表达式> then <表达式>
。。。
ELSE <表达式>
END
case 表达式的便利之处就在于它是一个表达式,之所以这么说,是因为表达式可以书写在任意位置,也就是像“1+1”这样写在上面位置都可以,例如,可以使用Case表达式将下述select语句结果中的行和列进行互换。
集合运算(集合运算会导致记录行数的减少)
- 集合运算就是对瞒住同一规则的记录进行的加减等四则运算
- 使用union(并集)、intersect(交集)、except(差集)等运算符来进行集合运算
- 集合运算符可以去除重复行
- 如果希望保留重复行,就需要使用All选项
select shohin_id, shohin_mei
from Shohin
except
select shohin_id, shohin_mei
from Shohin2
order by shohin_id;
联结运算(以A中的列为桥梁,将B中满足同样条件的列汇总到同一个结果中)
内连接 inner join 选取同时存在于两张表中的数据
外连接 outer join 相反 只要数据存在于某一张表中,就能够读取出来
外连接的要点 - 指定哪张表作为主表?
外链接指定哪张表作为主表,最终的结果会包含主表内所有的数据,指定主表的关键字是left 和 right
使用left 时from 子句中写在左侧的表是主表,反之,使用right时右侧的表是主表
链接: 原文链接.
本文首发自公众号:Web小项目
Web小项目收录了优质项目源代码,不同场景解决方案,有大量的开发资料和面试资源,利用碎片时间掌握基础,欢迎大家的关注,并提出宝贵意见,共同学习!
每个程序员,心里都有一片花海!
孤勇之后,世界尽在眼前!