SQL基础总结

oracle在起别名的时候,不能使用保留关键字。




distinct只能用在第一列之前,distinct的使用范围是所有在其后边的列,并且distinct会将null行作为一行处理




包含null值的运算,其结果也是null,null除以任意整数,结果都为null(不能对null使用比较运算符使用is null或者is not null




以字符串定义的数字,在使用比较运算符时,需要以字典顺序进行比较,不是以数字大小进行比较

not 可以使用在任意运算之前,例如:not sal>=1000(sal小于1000的值)




可以知道,我的条件是not sal>1300,得到的结果是sal<=1300;


使用and运算符进行的逻辑运算称为逻辑积,使用or运算符进行的逻辑运算称为逻辑和

SQL中的逻辑运算被称为三值逻辑(真、假、不确定)

对于数据类型,只记录了一下integer和numeric两种

   在Oracle中integer类型相当于38长度的number类型

   numeric类型是一种有整数位和小数位一起构成的数据类型

备注:

  Oracle当中from子句必须要有,但在SQLserverpostgreSQLMySQLfrom子句不一定要有


聚合函数会对null以外的数据进行汇总

count函数可以查出包含null值的所有数据,count(列名)不会计算出包含null的行


创建一个只有一列的表,表中有六行数据,其中两行是null值;




count(*)count(1)查询出的数据是一样的




可以知道,count(1)和count(*)得到的数据是一样的,而且两种方式都会计算null值;


所有的聚合函数在以列名为参数时,计算之前会排除null(排除不同视为0计算,两者差别很大)




sum/avg只能应对数值类型的列,max/min原则上可应对任何数据类型的列

想要去掉重复值,并计算总行数,可以使用count(distinct 列名)的方式实现




所有的聚合函数都能类似count函数使用distinct关键字

语句中同时出现wheregroup bywhere子句在前,group by 子句在后

group by子句不会排除null




使用聚合函数时,select子句中只能出现

1.常数

2.聚合函数

3.group by 中出现的列名

having关键字中出现的元素和select子句中一致

where 子句=指定行所对应的条件

having 子句=指定组所对应的条件


在同样的语句中使用where语句可能会提高语句执行速度

         order by子句中,可以使用聚合函数,也可以使用列的编号(尽量不要用)


原则上,一次insert语句插入一行数据

insert时,如果没有设定默认值,会插入null

insert。。。SELECT。。。时,可以使用任何语法,但是order by语法不起作用

    创建一个只有一列的表




deletetruncate

delete可以删除多行也可以删除一行,truncate只能删除整张表

delete不释放内存,truncate释放内存

update时,可以同时对多列进行更新:

set =表达式,列=表达式。。。。

事务:以第一个可执行的dml语句开始,以commitrollback等语句结束的一系列dml操作的集合

事务的特性

1.原子性:要么全部执行,要么全部不执行

2.一致性:从一个一致状态到另一个一致状态

3.隔离性:不同事务之间互不干扰

4.持久性:事务结束后,数据状态永久保存


视图优点

1.无需保存数据

2.可以保存多次使用的复杂SELECT语句

视图中的数据会随着原表的变化而变化

create view 视图名(列名、......)

AS

查询语句;

视图中的AS不同于起别名,是一种语法规定

视图就是保存好的SELECT语句

多重视图:可以在视图的基础上创建视图(多重视图会降低SQL的性能)

注意:

1.定义视图时,不能使用order by子句;

2.对视图进行更新时的条件

1.SELECT未使用distinct

2.from只有一个表

3.未使用group by语句

4.未使用having 语句

虽然子查询可以无限嵌套,但嵌套越多,性能会越差,阅读起来越难懂,所以尽量避免多层嵌套

标量子查询:必须而且只能返回11列值

能够使用常数或者列名的地方都可以使用标量子查询.

where语句中使用子查询,原则上此查询的返回值必须是一行一列的


大多数函数对null求值,都返回null




函数:

abs 求绝对值:abs(参数)

mod:求余数:mod(参数1,参数2)(小数计算中没有余数的概念)

round:四舍五入:round(参数1,参数2)对参数1进行四舍五入运算保留参数2位小数




current_date:求当前的日期:类似Oracle中的sysdate

current_timestamp:求当前的时间

extract:日期截取函数:返回值不是日期类型而是数值类型:extract(日期元素[year/month/day] from 日期)




cast:类型转换:cast(转换前的值 AS 想要转换的数据类型)

COALESCE:处理null值:coalesce(参数1,参数2,。。。)

谓词:

inin无法选取出null数据

exists:通常使用关联子查询作为参数

case表达式

case when 求值表达式then 表达式

。。。

else 表达式 end


集合运算注意事项

1.列数必须相同

2.列的类型必须一致

3.order by关键字只能用一次

注意

except差集在Oracle中相当于minus,在MySQL中无法使用




内联结要点:

1.from子句中有多张表,尽量使用表的别名来增加代码的可读性

2.on子句后面需要写上连接条件

3.写列名时最好写成表名.列名,增加代码可读性





外联结的要点

1.会选取出单张表中的全部信息

2.要决定好那张是主表




窗口函数:将数据以某种条件分组显示,但不同于group by,不会对数据进行汇总

<窗口函数>OVER ([partition by 列名]

order by 列名)

partition by决定分组

order by

rank函数:计数函数:rank() over....

    计数时会跳过重复记录例如

            1,1,3。。。

           dense_rank函数:

    计数时即使存在相同的记录也不会跳过,例如:

            1,1,2。。。

            row_number:

    会唯一连续的记录。




  由于专用窗口函数无需参数,所以多数括号都是空的

  窗口函数只能出现在SELECT 子句中

  聚合函数和窗口函数一起使用,例如

    sum(sale_price)over (order by ...)

 作用类似累加

  指定框架:例如

    avg(sale_price)over (order by ...

    row 2 preceding)

 指范围是当前行和之前两行的平均值

   。。。row 2 following

 指的是当前行和之后两行的平均值




代码的意思是将当前行和当前行的前一行、后一行相加结果是多少
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值