天天看点

coalesce函数用法 sql_常用SQL系列之(七):表约束、最大/小值、非null数、平均值等...SQL点滴(42):如何直接通过SQL语句查看数据表的约束信息?SQL点滴(43):数据表中对数字列的平均值计算问题 。SQL点滴(44):如何找出某列中的最大/最小值 ?SQL点滴(45):如何计算数据表中某列非NULL值的数量?

本系统为@牛旦教育IT课堂在微头条上的内容,

为便于查阅,特辑录于此,都是常用SQL基本用法。。

coalesce函数用法 sql_常用SQL系列之(七):表约束、最大/小值、非null数、平均值等...SQL点滴(42):如何直接通过SQL语句查看数据表的约束信息?SQL点滴(43):数据表中对数字列的平均值计算问题 。SQL点滴(44):如何找出某列中的最大/最小值 ?SQL点滴(45):如何计算数据表中某列非NULL值的数量?

前两篇连接:

(一):SQL点滴(查询篇):数据库基础查询案例实战

(二):SQL点滴(排序篇):数据常规排序查询实战示例

(三):常用SQL系列之(三):记录叠加、匹配、外连接及笛卡尔等

(四):常用SQL系列之:Null值、插入方式、默认值及复制等

(五):常用SQL系列之(五):多表和禁止插入、批量与特殊更新等

(六):常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等

SQL点滴(42):如何直接通过SQL语句查看数据表的约束信息?

也就是说,我想查看数据库中某一表的约束定义以及所基于的约束列信息,那在数据库中如何实现呢?

1)在MySQL中,可以通过这样系统表(information_schema.table_constraints 和information_schema.key_column_usage)进行关联查询。参考语句如下:

SELECT

a.table_name,

a.constraint_name,

b.column_name,

a.constraint_type

FROM

information_schema.TABLE_CONSTRAINTS a,

information_schema.key_column_usage b

WHERE

a.TABLE_NAME = 'tx_department'

AND a.TABLE_SCHEMA = 'test'

AND a.TABLE_NAME = b.TABLE_NAME

AND a.TABLE_SCHEMA = b.TABLE_SCHEMA

AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME

以上实现也可以直接适用SQL Server和PostgreSQL。

2)在Oracle中,通过查询系统表SYS.ALL_CONSTRAINTS和SYS.ALL_CONS_COLUMNS参考语句如下所示:

select a.table_name,a.constraint_name,b.column_name,a.constraint_type

from all_constraints a, all_cons_columns b

where a.table_name = 'mytable'

and a.owner = 'mydb'

and a.table_name = b.table_name

and a.owner = b.owner

and a.constraint_name = b.constraint_name ;

3)在DB2中,通过查询系统表SYSCAT.TABCONST和SYSCAT.COLUMNS来查看约束,具体实现,自己动手来试试吧。

SQL点滴(43):数据表中对数字列的平均值计算问题 。

如果我们我们要对员工表的 薪资列进行平均值进行统计计算,需要注意如下问题:

1)按部门计算各部门的薪资平均值,参考SQL如下:

select deptno,avg(salary) as avg_sal from employee group by deptno ;

注意这里是按部门进行分组在进行平均值计算的;

2)对所有员工进行平均值进行计算,参考SQL如下:

select avg(salary) as avg_sal from employee ;

不带where子句,对所有非null值进行计算;

3)若要对null值也进行平均计算,你可以使用我们前面说过的函coalesce函数,参考如下:

select avg(coalesce(salary,0)) from employee ;

需要注意,group by 列 不一定要包含在select列表中。

好了,你自己操练一把吧。^_^

SQL点滴(44):如何找出某列中的最大/最小值 ?

比如计算雇员列表中薪资列中的最大值和最小值。当然你还可以扩展每个部门的最高值和最低值。要实现这个目的,我们可以这么干,参考SQL如下:

select min(salary) as min_sal,max(salary) as max_sal from employee ;

若要查看每个部门的最高工资和最低工资,那要怎么做?也就是要根据部门分组再进行类似上面的查询,参考SQL如下:

select deptno, min(salary) as min_sal,max(salary) as max_sal

from employee group by deptno ;

特别注意:min和max函数会忽略null值。假设上述有两个部门10和99的,而salary为null,那上面的结果就会有只有部门号而没有大小值的行出现。

好了今天的一则分享就这些,试试看看。^_^

SQL点滴(45):如何计算数据表中某列非NULL值的数量?

也就是说,数据表某类的列值,可以有值,也可以为空,如何只计算非空的列数呢?

其实这是个细节问题,只要稍加注意就可计算出。当我们用count(*)来计算行时,是包含null值和非null值的的。但如果是指明列明,则就不会把null计算在内。所以,为了完成上述任务,比如想计算有奖金的员工数量,可以这样来实现:

select count(reward) from bonus.

就这么简单,试试吧。

本篇就辑录到这,点个赞分享出去吧。