1. 程式人生 > >SQL 築基 初階1

SQL 築基 初階1

1   返回每個產品相關的賬號數量

Select product_id,count(*) as accounts_per_product

from Contacts

Group by product_id;

注 :

這裡引出了一個小問題:

SELECT Count(*) As MyCount FROM name 這個語句是什麼意思?

 答:Count()是一個聚合函式,name是表名。這條語句是統計name這個表有多少條資料,並將查出的總數的結果列名設為MyCount。

小知識:

select * 查詢出的是所有的記錄 select count(*)查詢出的是記錄的條數

count行數....有幾行,就得到幾

   相反, 獲取每個賬號相關的產品資訊:

SELECT account_id,Count(*)as products_per_account

FROM Contscts

GROUP BY account_id;

更復雜的,比如找到相關賬號最多的產品:

Select c.product_id,c.account_per_product

From(

select product_id,Count(*)as accounts_per_product

from Contacts 

group by product_id

) AS c

Having c.accounts_per_product=Max(c.accounts_per_product)

注:關於欄位作為其中某一步的查詢結果

2    子查詢補充:

oracle:   子查詢(子查詢自身只能返回一個單獨的值): 1子查詢放在select後面,作為其中的一個欄位返回。      select u.username,(select d.departname from t_depart d where d.departid = u.departid) from t_user u; 2子查詢放在from後面,作為一張臨時表。              select * from (select username,sex s from t_user where departid=1) where s = '男'; 3 子查詢放在where後面,作為條件的一部分。                 select * from t_user where departid = (select departid from t_depart where departname = '財務部');

3    接上面,更新或刪除

insert into Contacts(product_id,account_id)Values(456,34);

delete from Contacts where product_id =456 and account_id=34

使用交叉表的好處:

在許多資料庫中,宣告某一列為外來鍵會隱式地為該列建立索引,這可比用逗號做分隔符高效的多了。