第二十二天:听课笔记

本文介绍了SQL中的常用日期函数如months_between、add_months等,并详细解释了数据类型转换方法及如何利用nvl、nvl2处理空值。此外还探讨了多表查询、子查询的应用场景,以及分组函数与子句的正确使用方式。
摘要由CSDN通过智能技术生成

1.日期函数
在日期上加上或减去一个数字为日期
..
..

2.日期函数:
months_between(XXX,YYY)
XXX-YYY 相差多少个月
四舍五入:round()
add_months(XXX,YYY):
向XXX加上YYY个月
next_day(XXX,YYY):
指定XXX的下一个YYY
last_day(XXX):
XXX月的最后一天
round():
给日期四舍五入
trunc():
给日期截断

3.数据类型的转换:
对日期:
to_char(date, '....')   ...写具体的格式
年 year ""汉字要 
/ .  不用
使用双引号向日期中添加字符

对数字转换:



4.看书,多遍,精华都出来了

5.nvl
空值和任何值运算是空值
我们用nvl的话,当它为空的话我们就将它变为零
替换的类型要和原来的一致

6.nvl2(XXX,YYY,ZZZ)
XXX不为空的话就YYY,
为空的话就ZZZ

7.nullif

8.coalesce

9.
case
   when  then
   when  then
else
end

10.decode
中的参数传递是怎么实现的
swich case
数组

11.多表查询
笛卡尔积
没有连接条件,我不知道怎么连接,我就都连接

12.等值连接
多表查询

13.自连接

两条select 合为一

manager_id 为employe_id的子集  ------->  联想到两个表连接,有相同的列
我将employees命名为 X 和 Y,让X和Y相连
另外:用子查询(先查到那个manager_id),然后让employee_id=查到的数据

关键是将同一个表命名为两个不同的名字
要是命名为同一个名字的话,就是同一行中manger_id = employee_id

14.非等值连接
等值连接:有相同的列
非等值连接:没有相同的列

15.
内连接:不匹配的不显示
        不匹配是指:null 和 有值  不匹配
外连接:不匹配的看条件显示
    左/右
        哪个表的少就(+),需要补上
        不能左右都有(+)

16.cross join
   natural join 和using一起使用

17.on

join on
join on

right outer join
left outer join
full outer join 满外连接

18.分组函数:
作用于一组数据,返回一个数据

avg
count  count(*)所有 count(exp)exp不为空的
sum
max
min

分组 函数忽略空值
解决:nvl 若为空的话就为XXX

19.group by
在select列表中所有未包含在组函数中的列都应该包含在group by子句中
一个值 多个值 你要我怎么显示

select 中 有分组函数 要特别注意,
因为分组函数只返回一个值,但是select返回的是多个值
那你说我怎么显示
所以要用group by
在select列表中所有未包含在组函数中的列都应该包含在group by子句中

常理:avg(salary)
有员工的城市的平均工资
因为avg(salary)忽略null,同时有工资那么就有人,即有员工的

20.group by 多个列分组

21.不能在where 中使用组函数
能在having中是使用组函数

group by 要放在select语句的末尾
但是group by
    having ...

select avg(salary), job_title
from employees e, jobs j
group by job_title, job_title
having avg(salary) > 6000 and e.job_id = j.job_id //错,having中最好写过滤分组函数

having 最好放组函数
可以既有where 又有having

join on替换

22.
-- 注释

23.
带组函数的放在having中
不带组函数的放在where中
where 紧跟 from
group by 在having前面

24.子查询
两条语句
() 放在比较条件的右侧
单行子查询:返回一个值
多行子查询:返回多个值


select max(avg(salary)), department_id
from employees
group by department_id  //错,max(avg(salary)) 要通过具体的一个分组,不能通过department_id分组

求最大平均工资 把这个问题转化为:
平均工资 = 最大平均

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值