一、组函数(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