SQL学习笔记0826

首先,放一个SQL教程链接: SQL教程|菜鸟教程
其次,pgsql和oracle、mysql在有些方面还是存在区别,但大体上是差不多的。
最后,笔记来咯😀~

1.varchar长度是字节还是字符?
见链接:MySQL的varchar定义长度到底是字节还是字符,varchar字符长度的计算

2.关于select后的内容
select 后写具体字段,不要写*,有性能差距

3.group by和distinct都可以去重,如何选择?
不到万不得已不用distinct,因为对性能影响很大,尽量使用逻辑筛选。group by比distinct更灵活,可以多用它。
贴个链接:MySQL去重中 distinct 和 group by 的区别

4.order by后跟多个字段的情况
也贴个链接:mysql order by 多个字段及其多字段排序原则,和 order by 后跟数字
关于order by,pgsql和mysql是一样的。

5.oracle中有rownum,而pgsql无
贴一个从oracle迁移到pgsql的解决办法:PostgreSQL rownum实现方法(兼容oracle)

6.limit和offset用法
链接:PostgreSQL LIMIT和OFFSET

7.聚合函数结果作为筛选条件时,不能用where,而是用having,为什么?
(1)什么是聚合函数?count(),sum(),avg(),min(),max()都是聚合函数。
(2)聚合函数是基于结果集运算的,当在where子句使用聚合函数时此时根据group by 分割结果集的子句还没有执行,此时只有from 后的结果集。所以无法在where子句中使用聚合函数。

8.in关键字的使用
例:如果要查询学号为01、02、03、04的学生信息
直接写法:

select * from student s 
where s.s_id = ‘01’ or s.s_id = ‘02’ or s.s_id = ‘03’ or s.s_id = ‘04’

使用in后的简便写法:

select * from student s 
where s.s_id in (‘01’,’02’,’03’,’04’);

9.pgsql中的between and包不包含边界?
包含边界

--这两个是等效的
x between a and b
x >= a and x <= b

10.inner join的两种写法

--写法1
select s.*,s2.c_id,s2.s_score
from student s,score s2 
where s.s_id = s2.s_id;
--写法2
select s.*,s2.c_id,s2.s_score 
from student s 
     inner join score s2 
     on s2.s_id = s.s_id;

两种写法得到的结果是一样的,但写法1是比较古老的一种写法,看起来不够清晰,现在更建议采用写法2,这样无论inner join多少个表看起来都不会太乱。

11.oracle特有写法:where后面的字段写上(+)
(+)写在where后面,不能与 or/in 连用

--在等号右边字段的后面写上(+),是左外连接,s是主表,s2是附属表
select s.*,s2.* 
from student s,score s2 
where s.s_id = s2.s_id (+)
--在等号左边字段的后面写上(+),是右外连接,s2是主表,s是附属表
select s.*,s2.* 
from student s,score s2 
where s.s_id (+) = s2.s_id 

关于使用(+)的一些注意事项:
(+)操作符只能出现在 WHERE 子句中,并且不能与 OUTER JOIN 语法同时使用。
当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
(+)操作符只适用于列,而不能用在表达式上。
(+)操作符不能与 OR 和 IN 操作符一起使用。
(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

12.mysql不支持full outer join

13.使用union和union all时需注意
使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。 但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。

14.mysql数据库不支持SELECT INTO语句,但支持INSERT INTO SELECT语句

15.sql约束

16.索引

17.null值,is null和is not null(在查询成绩的时候考虑一下null的意义)

18.常用函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值