1. 程式人生 > 其它 >Sql Server(2)Select學習

Sql Server(2)Select學習

一:學會select查詢

①select語句基本應用:

select子句
指定欄位名
ALL與DISTINCT -------我們平時不寫的話,就代表的是All ,當我們加入Distinct後,就不會出現重複的資料(去重)
使用欄位別名 -----------欄位別名我們只能在我們的select 查詢顯示的時候用,它的使用範圍是受限制的。
使用表別名----------------表別名是不受限制的
where子句 ------------條件
Order by 子句----------排序
GROUP BY子句--------分組

②select的語法

SELECT select_list
[INTO new_table]
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression[ASC | DESC] ]

③設定指定的欄位

①*:代表查詢資料表中所有的欄位 
示例   查詢JOBS資料表中所有的欄位。 
SELECT * FROM JOBS 

②column_name:只要查詢資料表中的某些欄位時,就直接將欲查詢的欄位列出,欄位與欄位之間要用逗號相隔。
示例  查詢EMPLOYEE表中的多個欄位。
SELECT fname,lname,minit,emp_id,job_id FROM EMPLOYEE

③expression:利用表示式來指定欄位,表示式的內容可以是欄位名、常數、函式…等的組合 。
示例 利用SQL語法的表示式子句計算書店的利潤。 
SELECT title 書名,
((price * ytd_sales) * CAST( ( (100-royalty) / 100.0 ) AS MONEY)) 
AS 年收入  FROM titles WHERE royalty <> 0

④ALL與Distinct的區別

SELECT子句後加上ALL的功能是指定結果集內可顯示有重複資料的資料列。
而加入DISTINCT引數後,則代表所查詢的結果中如果有重複的多筆資料,將只會顯示一筆資料。
SQL Server 的預設值是ALL,因此通常不須使用ALL引數,只有在不顯示重複資料時才要用DISTINCT來指定。

⑤TOP的使用(Sql server 的)前幾條記錄

 引數TOP n [PERCENT]
如果想查詢資料表中的最前面n筆記錄,可以利用TOP n 的指令。(n為介於0到 4294967295 之間的整數。) 

示例 使用引數TOP的SELECT查詢語句。
	select top 2 * from cv_Po

⑥TOP (PERCENT) 的前百分之幾的資料

如果同時指定 PERCENT,則結果集只輸出頭n個百分比的資料列。以 PERCENT 指定時,n 必須為介於 0 到 100 之間的整數
示例 使用TOP n [PERCENT]的SELECT查詢語句。
	select top 20 percent * from cv_Po

⑦習題檢視中有一筆記錄“金額”不等於“單價*數量”,請找出來
找出我們採購過的物料名稱(要求結果集不重複)

二:對From的新的瞭解(SELECT語句加上FROM子句,是用來設定要查詢的資料來源,如資料表名稱、檢視名稱,語法如下:)

SELECT語句加上FROM子句,是用來設定要查詢的資料來源,如資料表名稱、檢視名稱,語法如下:

FROM table_name [ [AS] table_alias ] [ ,….n]
或
FROM { table_name1[ [AS] table_alias ] }
[ INNER | {{LEFT | RIGHT | FULL } 
[ OUTER ] } ] JOIN table_name2 [AS] table_alias ]
ON search_condition| < table_source > CROSS JOIN<table_source>
 } [ , … n]

三:內連線,左連線,右連線,全連線

四:兄弟們這個是重點啊(看懂他,會寫的sql會越來越多)底下又有列子

習題:

五:where 的使用

SELECT語句若加上WHERE子句時,是用來設定查詢條件,以便過濾需要的資料。其語法如下: 
[ WHERE <search_condition> ]
引數: 
<search_condition>:設定條件 
示例 使用WHERE引數指定關聯條件。
USE PUBS
SELECT titles.title, titleauthor.title_id
FROM titles, titleauthor
WHERE titles.title = titleauthor.title_id 

①inner join 與where 的區別(一般我們選擇用inner join)

②where與having可以同時存在

select jCode,jName,sum(jQty) from jProduct where jCode like '%0123%' group by jCode,jName having sum(jQty)>100

上面這句的執行過程大致應該是這樣的

先根據where條件子句進行過來

再根據group by子句進行聚合

最後再根據having子句對聚合結果進行過濾

③order by 的使用

如果想將查詢的結果做排序,可使用ORDER BY子句,語法如下: 
ORDER BY { order_by_expression [ ASC | DESC ]}
[ ,...n ] 
引數
order_by_expression:設定排序的依據,可用欄位名、欄位別名或欄位值的表示式。來作為排序依據的欄位可以不是SELECT子句所查詢的欄位,但如果是使用SELECT DISTINCT就一定必須是。
另外,我們亦可以使用大於0的整數,來表示所要依照SELECT列表中的第幾個專案值做為排序,例如2,即代表用SELECT的第二個欄位排序。
ASC:以升序的方式或由小至大的方式來排序。但NULL將被視為最小的值。 
DESC:以降序的方式或由大至小的方式來排序。但NULL將被視為最小的值。 

列:

六:group by 的使用

當需要顯示分組的彙總資料時,就應使用GROUP BY子句。該子句的功能是根據指定的列將表中資料分成多個組後進行彙總
其語法格式為:
SELECT column_name1[,…n]
FROM table_name
WHERE search_condition
GROUP BY [ ALL ]colum_name1[,…n]
[ HAVING search_condition ]

①:分組的條件

使用GROUP BY分組,每個組在結果集中只有一行。
SELECT子句中指定的列必須是分組欄位,其它欄位要與聚合函式一起使用。
如果包含WHERE子句,則只對滿足WHERE條件的行進行分組彙總。
HAVING子句與Group by一起使用,進一步排除不滿足條件的組。

select 供應商,sum(金額) as '訂貨總金額' from cv_po group by 供應商

②聚合函式

avg:對數值型別的欄位值求平均,忽略 Null 值。
count:對記錄進行計數。
max:返回最大值。
min:返回最小值。
sum:對某個數值型欄位進行求和。

列:

示例2:統計向各個供應商訂貨的次數,找出訂貨次數一次以上的供應商
select FSupplyID,count(*) as 訂貨次數 
from po 
group by FSupplyID
Having count(FID)>1