本教程將介紹SQL Server SELECT語句的基礎知識,重點介紹如何針對單個表進行查詢。
SQL Server SELECT語句簡介
資料庫表是存儲資料庫中所有數據的對象。 在表中,數據按行和列格式邏輯組織,類似於電子錶格(Excel)。
在表中,每行代表一個唯一記錄,每列代表記錄中的一個字段。 例如,customers
表包含客戶數據,如客戶標識號,名字,姓氏,電話,電子郵件和地址資訊,如下所示:
SQL Server使用模式對表和其他資料庫對象進行邏輯分組。 在示例資料庫(bb_stores
)中,有兩個模式:sales
和production
。 sales
模式將所有與銷售相關的表分組,而production
模式將所有與生產相關的表分組。
要從表中查詢數據,請使用SELECT
語句。 以下是SELECT
語句的最基本形式:
SELECT
select_list
FROM
schema_name.table_name;
在上面語法中,
- 首先,
select_list
指定要在SELECT
子句中查詢數據的逗號分隔列的列表。 - 其次,
schema_name.table_name
是在FROM
子句中指定源表及其模式名稱。
處理SELECT語句時,SQL Server首先處理FROM
子句,然後處理SELECT
子句,即使SELECT子句首先出現在查詢中也是一樣。
SQL Server SELECT語句示例
下麵將使用示例資料庫中的customers
表進行演示。
1. SQL Server SELECT檢索表部分列示例
以下查詢查找所有客戶的名字和姓氏:
SELECT
first_name,
last_name
FROM
sales.customers;
執行上面查詢語句,得到以下結果 -
查詢的結果稱為結果集。
以下語句返回所有客戶的名字,姓氏和電子郵件:
SELECT
first_name,
last_name,
email
FROM
sales.customers;
執行上面查詢語句,得到以下結果:
2. SQL Server SELECT從表中檢索所有列的示例
要從表的所有列獲取數據,可以指定選擇列表中的所有列。 還可以使用SELECT *
作為速記來減少一些書寫:
SELECT
*
FROM
sales.customers;
執行上面查詢語句,得到以下結果:
SELECT *
對於檢查不熟悉表的列和數據非常有用,它對即席查詢也很有幫助。
但是,由於以下主要原因,不應將SELECT *
用於實際生產代碼:
- 首先,
SELECT *
經常檢索比應用程式需要運行的數據更多的數據。它會導致不必要的數據從SQL Server傳輸到客戶端應用程式,從而花費更多時間使數據通過網路傳輸並減慢應用程式的速度。 - 其次,如果為表添加了一個或多個新列,則
SELECT *
只檢索包含新添加的列的所有列,這些列不打算在應用程式中使用,這可能會導致應用程式崩潰。
3. SQL Server SELECT - 對結果集進行排序
要根據一個或多個條件篩選行,請使用WHERE
子句。在此示例中,查詢返回位於CA
的客戶。如以下示例所示:
SELECT
*
FROM
sales.customers
WHERE
state = 'CA';
執行上面查詢語句,得到以下結果:
當WHERE子句可用時,SQL Server按以下順序處理查詢的子句:FROM
,WHERE
和SELECT
。要基於一個或多個列對結果集進行排序,請使用ORDER BY
子句,如以下示例所示:
SELECT
*
FROM
sales.customers
WHERE
state = 'CA'
ORDER BY
first_name;
執行上面查詢語句,得到以下結果:
在此示例中,ORDER BY
子句按名字按昇冪對客戶進行排序。在這種情況下,SQL Server按以下順序處理查詢的子句:FROM
,WHERE
,SELECT
和ORDER BY
。
4. SQL Server SELECT - 將行分組為組示例
要將行分組,請使用GROUP BY
子句。 例如,以下語句將返回位於CA
的所有客戶以及每個城市的客戶數量。參考以下查詢語句:
SELECT
city,
COUNT (*)
FROM
sales.customers
WHERE
state = 'CA'
GROUP BY
city
ORDER BY
city;
執行上面查詢語句,得到以下結果:
在這種情況下,SQL Server按以下順序處理子句:FROM
,WHERE
,GROUP BY
,SELECT
和ORDER BY
。
5. SQL Server SELECT - 過濾分組示例
要根據一個或多個條件篩選組,請使用HAVING
子句。以下示例返回CA
州擁有10個以上客戶的城市:
SELECT
city,
COUNT (*)
FROM
sales.customers
WHERE
state = 'CA'
GROUP BY
city
HAVING
COUNT (*) > 10
ORDER BY
city;
執行上面查詢語句,得到以下結果:
請注意,WHERE
子句在HAVING
子句篩選器分組時篩選行。
在本教學中,學習了如何使用SQL Server SELECT
語句從單個表中查詢數據。