常用SQL系列之(七):表約束、最大

本系統為 在微頭條上的內容,

為便於查閱,特輯錄於此,都是常用SQL基本用法。。


常用SQL系列之(七):表約束、最大/小值、非null數、平均值等


前兩篇連接:

(一):

(二):

(三):

(四):

(五):

(六):

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.
就這麼簡單,試試吧。


分享到:


相關文章: