一、组函数(Group Functions)
1、max/min:对数字,字符,日期取最大/最小
内置操作:先排序后取大/小,在数据库中排序是非常消耗资源的
2、count:计数
select count(*) from table 等同于 select count(1) from table
select count(字段) from table --若字段中有空值则不计数,
3、avg:求平均值
--如有3条记录,其中记录3为空值,则计算为(记录1+记录2)/2,忽略了记录3
select avg(commission_pct) from employees;
--实际应用场景中需将空值转为可计算的值,如下
select avg(nvl(commission_pct,0)) from employees;
4、sum:求和
5、stddev:求标准偏差
6、variance:方差
以上6种函数是对整个表分组,且不计算空值,可嵌套使用
select max(avg(salary)) from employees group by department_id
7、group by:将表分成更小的组
7.1:可跟排序一起用
select department_id,avg(salary)
from employees
group by department_id
order by avg(salary)
7.2:若group by后跟多个列,从左至右依次分组
7.3:having之前的语句查出新的表,再用having对新表实现过滤
select department_id,avg(salary) from employees
group by department_id
having avg(salary) > 5000
7.4:
where在group by之前,having在group by之后
where和having后,不要用别名
-----------------------------------------------------------------------------
二、连接(Joins)
主键:能标识唯一的一行,但主键不一定只有一列
外键:存在约束
连接时,用小表去驱动大表(即小表写在左边),减少消耗
1、自然连接(Natural Joins):
隐式的关联(关联的字段名必须一致),不建议写
2、内连接(Inter Joins)
2.1:等值连接
2.2:非等值连接
3、自连接(Self-join)
4、外连接(Outer Join)
4.1:左外连接(将左边表全部列出,右边表无匹配行则自动补空值)
4.2:右外连接(同上反之)
4.3:全连接(Full Outer Join,没匹配的也全列出来)
5、交叉连接(Cross Join):即迪卡尔积
返回行数为两张表行数的乘积
-----------------------------------------------------------------------------
三、子查询(Subquery)
子查询能查需排除空值,因为空值不能比较
--not in:<>all,与空值进行比较,故查不到记录
select last_name from HR.EMPLOYEES where
employee_id not in (select manager_id from HR.EMPLOYEES);
--in:=any,允许空值,响应查得到记录
select last_name from HR.EMPLOYEES where
employee_id in (select manager_id from HR.EMPLOYEES);
in/not in:判断单列值
exists/not exists:判断行(即记录)
-----------------------------------------------------------------------
四、集合运算符(Set Operators)
1、union/union all(内置有排序)
union去掉重复值,union all包含重复值
空值会被保留下来
比较的多张表,字段类型要一致
注:
join:实际是为了过滤值,将两张表符合条件的记录产生一个记录集
union:实际是为了取集合,将两个记录集并在一起
2、intersect:取公共部分记录
3、minus:取(左边表记录减去公共部分记录)
-----------------------------------------------------------------------------
五、insert,update,delete
1、插入空值两种方法
insert table values ('aaa',NULL)
insert table values ('aaa','')
注:
delete与truncate
truncate做的是定义的修改,产生的日志很少
delete删除是一行行删除
-----------------------------------------------------------------------------
六、小谈事务
1、隐式提交(Implicit Commit):
DDL会触发事务提交:如果在一堆DML语句中误写了一条DDL语句,则默认commit
正常关闭窗口会触发事务提交,而异常关闭窗口,触发回滚(rollback)
2、显示提交(Explicit Submit):
commit
3、
设置还原点:
savepoint A
回到还原点:
rollback to A
转载于:https://blog.51cto.com/zjwliunx/1759871