数据库
笔者是第一次写论坛,如有不足和错误,请各位大神多多包涵和指正。
概念 :数据库就是用来存放数据的仓库,将来存放都是按照指定的数据格式来存放的,通过特定的语法,可以获取数据库中存储的数据。
SQL语法
1、DQL 数据库检索语句,主要用来做查询的,关键字是select
2、DML 数据库中表数据管理语句,用来增加、修改、删除表中数据,关键字 insert、update、delete
3、DDL 数据库表结构管理语句,用来创建、修改、删除表,关键字 create、alter、drop
4、DCL 数据库表权限控制语句,用来授权及事务控制 ,关键字 grant(授权)、 revoke(回收)、
commit(提交事务)、rollback(回滚事务)
作者从DQL,数据库查询开始。数据库查询语句基于现代公司比较常用的数据库Oracle进行编写,该语言比MySQL严格,一般来说会Oracle,MySQL就没有太大的问题。同时我们需要注意的是Oracle不区分大小写,一般来说大写或者小写都是可以的,但是在查询数据的时候,表中的数据如果大写,那么相应的你的需要查询的字段也要写成大写,在写SQL语句的全程,请保持你的输入法处于英文状态。SQL注释:--这是一段注释的内容。或者按CTRL+/进行注释。
DQL
1、基本查询语法
select * from 表名
--这段指的是从一个表中查询该表的所有信息
2、查询表中指定的字段
select 字段1,字段2,....... from 表名
--这段指的是从表中查询字段1 ,字段2,字段3的信息
3、根据条件查询
select 字段1,字段2 ,....from 表名 where 条件 /where 条件1 and 条件2
--这段表示是从表中查询字段1,字段2 等符合条件的信息
4、比较运算符
比较运算符有以下几个> < = >= <= != between and
我们在使用条件查询的同时也可以使用比较运算符进行条件的限制。
5、null值判断
在判断null值的时候 我们有以下两个语句 is not null / is null(注意不能使用=null)
6、distinct 的使用
select distinct 需要去重字段 from 表 .....
通过distinct关键字可以将查询返回的重复的值,进行去重的操作。
7、like模糊查询(不要过度使用通配符,会影响查询的性能)
模糊查询有两种方式一种是_。一种是%。这两种模糊查询都可以使用,区别是_,表示的是一个_代表模糊查询一次,如果你要查询4次,那么就需要写四个_。该种方式的使用通常是在你知道你要查询的语句有多长的时候使用,如果不知道那么我们用%即可。因为%代表的是多次查询。
基本使用语法为
select * from 表名 where 字段 like ' 模糊查询符号 需要查询的字段'
其中 %a 代表以a结尾
a%代表以a开头
8、order by
order by作为排序语法进行使用,通常对查询的语句进行排序,默认使用order by 是从小到大 相当于 asc ,当然有从小到大,我们肯定也有一种符号是从大到小,那就是我们的desc。
基本使用语法 select ...... from 表名 where 条件 order by 字段 asc/desc
9、数据库中的运算符(null值和任何字段、数字做计算后,还是返回null)
数据库中也是有运算符的:+ - * / 主要就是在数据库中做加减乘除
10、使用nvl()函数和nvl2()解决null值计算的问题
nvl(值1,值2) :可以传入字段,如果值1是null,那么就按值2参与运算
nvl2(值1,值2,值3) : 如果值1为null,返回值3,否则返回值2
11、数据库还可以自己给表中的字段起名字。别名的使用 ,可以用来给字段、表取的一个别名。
字段 as 别名 / 字段 别名 / 表 别名
12、逻辑运算符
and(与) 连接多个条件,每个条件都是true,才有结果
or(或) 连接多个条件,只要有一个是true,就有结果(如果条件字段相同,值不同,可以使用in关键字)
not(非) 在单个条件之前使用,如果原来的结果是false,最终的结果才为true
13、函数的用法
概念: 函数就是系统中,将某些需要执行指定功能的代码,封装了起来,取了一个名字,供用户去使用。用户通过调用函数,就能够达到执行指定了功能这个作用了,
写法 : 函数名(参数列表)
调用 : select 函数名(值/字段) from 表
13.1基本的字符串函数
用法:转大写upper(字符串)、转小写lower(字符串)函数
首字母大写 initcap(字符串)
连接字符串 :连接多个字符串 concat(字符串1,字符串2)
|| 连接符,可以用来连接字符串
字符串长度 length(字符串) 字符串字节数 lengthb(字符串)
字符串截取substr(字符串,数值)
字符串位置查找 instar(字符串,查找内容)
instar(字符串,查找内容) --从头开始找查找内容
instar(字符串,查找内容,数字) --从数字位开始查找
14、数学函数 : 操作数字相关的函数
round(数值,位数) 四舍五入
trunc(数值,位数)截取函数
mod(数值1,数值2)求余函数
floor() 向下取整 ceil()向上取整
15、日期相关函数
sysdate 返回当前日期(日期做减法就是相差的天数,日期和数值做计算,这个数值就是天数)
months_between() -- 返回两个日期之间的月数
add_months() -- 给指定时间加上月数
last_day() 返回指定日期的当月最后一天的日期
需要注意的是(日期的四舍五入和截断,按照月份四舍五入,以月的中间值15(舍弃)/16(增加)来划分)
转换函数 (用来转换数据格式的)
to_char() --日期转字符串
to_date() --字符串转日期
to_number() --字符串转数值
16、decode()函数 选择判断函数
用法:decode (字段,值1,返回值1,值2,返回值2,值3,返回值3.....,缺省值)
-- 如果字段的值 和值1相同,最终这个字段的值就显示为 : 返回值1
-- 和值2相同,最终这个字段的值就显示为 : 返回值2 ...
17、case when 选择语法
语法1 : case when 条件1 then 返回值1
when 条件2 then 返回值2
when 条件3 then 返回值3
else 其他值
end 名字
语法2 : case 字段 when 值1 then 返回值1
when 值2 then 返回值2
when 值3 then 返回值3
else 其他值
end 名字
18、分组函数/聚合函数
分组函数:min() max() avg() count() sum()
分组函数用 group by 进行分组(使用group by 函数需要将select后面选用的字段除了分组函数,进行体现,并且进行分组之后,where条件语句后面不能出现分组函数,如果要出现分组函数,需要将其放在having 后面。出现在group by后面的字段,不一定要出现在select后面) order by进行排序
having:对执行完的语句进行进一步的过滤(一般是分组函数放在后面进行条件过滤)
sql语句的执行规则如下:一般看sql语句按照以下的顺序进行查看
select 6
from 1
where 2
group by 3
having 4
order by 5
19、多表查询:将几个表连接在一起进行查询
笛卡尔积:n*m:一张表有n行,另一张表有m行
自连接 :自己连自己的表进行查询。
等值连接和非等值连接:使用=号就是等值连接,使用不等号就是非等值连接
内连接查询、和外连接查询
内连接:select * from 表1 inner join 表2 on 条件
外连接:
左外连接:left join 将左边的表作为基准表
语法 : 表1 left join 表2 on 条件 where 条件
右外连接: right join 将右边的表作为基准表
语法 : 表1 right join 表2 on 条件 where 条件
全外连接: full join 两张表数据都显示,不足补null
语法 : 表1 full join 表2 on 条件 where 条件
子查询 :指的是将某个查询的结果,带入到另一个查询中, 查询结果可以作为新的表,也可以作为某个条件中比较的值。子查询作为值的时候,里面只能有一个值。如果子查询中有多行值,那么该查询只能当作表来使用,该表不能进行作为值进行比较。如果子查询返回为空值,那么该查询不返回任何值。
TOPN查询
TOPN指的是按照某个指标进行倒序或者正序排列数据,然后取其中的N项
数据库中提供了一个rownum这个关键字,来定义数据库返回数据的顺序编号。一个select就有一个rownum 关键字也是做系统的分页查询的关键。
内部排序使用开窗函数 over()
over(partition by 分区字段 order by 排序字段 desc)
over()函数不能单独使用,需要配合其他的几个函数一起用
row_number()、rank()、dense_rank()、max()、min()、sum()....