2.1 SELECT 語句
關(guān)鍵字(keyword)?作為SQL 組成部分的保留字。關(guān)鍵字不能用作表或列的名字。附錄 D 列出了某些經(jīng)常使用的保留字。
為了使用SELECT 檢索表數(shù)據(jù),必須至少給出兩條信息——想選擇什么,以及從什么地方選擇。
2.2 檢索單個列
輸入:SELECL?prod_name
???? ? ? ? FROM?products;
分析:利用SELECT 語句從 Products 表中檢索一個名prod_name的列。
輸出:
說明:未排序數(shù)據(jù)。數(shù)據(jù)沒有過濾(過濾將得出結(jié)果集的一個子集),也沒有排序。
提示:結(jié)束SQL 語句。多條SQL 語句必須以分號(;)分隔。
提示:SQL 語句和大小寫。請注意,SQL 語句不區(qū)分大小寫,因此 SELECT 與 select 是相同的。同樣,寫成 Select 也沒有關(guān)系。許多 SQL 開發(fā)人員喜歡對 SQL 關(guān)鍵字使用大寫,而對列名和表名使用小寫,但是表名、列名和值可能有所不同。

2.3 檢索多個列
輸入:SELECT prod_name,prod_id,prod_price
????????? FROM products;
分析:使用SELECT 語句從表 Products 中選擇數(shù)據(jù)。在這個例子中,指定了 3 個列名,列名之間用逗號分隔。
輸出:
?
提示:當(dāng)心逗號
在選擇多個列時,一定要在列名之間加上逗號,但最后一個列名后不加。如果在最后一個列名后加了逗號,將出現(xiàn)錯誤。
說明:數(shù)據(jù)表示
SQL 語句一般返回原始的、無格式的數(shù)據(jù)。數(shù)據(jù)的格式化是表示問題,而不是檢索問題。如何表示一般會在顯示該數(shù)據(jù)的應(yīng)用程序中規(guī)定。
2.4 檢索所有列
輸入:SELECT *
?????????? FROM?products;
分析:如果給定一個通配符(*),則返回表中所有列。

2.5 檢索不同的值
輸入:SELECT distinct?vend_id
?????????? FROM?products;
分析:SELECT DISTINCT vend_id 告訴 DBMS 只返回不同(具有唯一性)的
vend_id 行,所以正如下面的輸出,只有 3 行。如果使用 DISTINCT 關(guān)鍵字,它必須直接放在列名的前面。
輸出:(三行)

2.6 限制結(jié)果
輸入(MySQL):SELECT?prod_name
????????????????????????????? FROM?Products
????????????????????????????? LIMIT?5;
分析:上述代碼使用SELECT語句來檢索單獨的一列數(shù)據(jù)。LIMIT 5指示MySQL等 DBMS 返回不超過 5 行的數(shù)據(jù)。
輸出:
輸入:SELECT ?prod_name
FROM Products
LIMIT 5 ?OFFSET 5;
分析:LIMIT 5 OFFSET 5 指示 MySQL 等 DBMS 返回從第 5 行起的 5 行數(shù)據(jù)。第一個數(shù)字是檢索的行數(shù),第二個數(shù)字是指從哪兒開始。一共9列,故輸出4列(6 7 8 9)
輸出:
注意:第0 行
第一個被檢索的行是第0 行,而不是第 1 行。因此,LIMIT 1 OFFSET 1 會檢索第 2 行,而不是第 1 行。
提示:MySQL、MariaDB 和 SQLite 捷徑
MySQL、MariaDB和 SQLite可以把LIMIT 4 OFFSET 3 語句簡化為LIMIT 3,4。使用這個語法,逗號之前的值對應(yīng)OFFSET,逗號之后的值對應(yīng)LIMIT(反著的,要小心)。
?說明:并非所有的SQL 實現(xiàn)都一樣
2.7 使用注釋
輸入1:SELECT ?prod_name --第一種注釋
???????????? FROM Products
???????????? LIMIT 5,5;
分析:注釋使用-- (兩個連字符)嵌在行內(nèi)。-- 之后的文本就是注釋,要注意空格。
輸入2:--第二種注釋 SELECT ?prod_name FROM Products ;
輸入3:#第三種注釋 SELECT ?prod_name FROM Products ;
分析:在一行的開始處使用#,這一整行都將作為注釋。
輸入4:/*第四種注釋
???????????? SELECT ?prod_name
???????????? FROM Products
???????????? LIMIT 5 ?OFFSET 5;*/
分析:注釋從/*開始,到*/結(jié)束,/*和*/之間的任何內(nèi)容都是注釋。這種方式
常用于把代碼注釋掉,
2.8 code
# 檢索單行
SELECT prod_name?FROM products;
#檢索多行
SELECT prod_name,prod_id,prod_price?FROM products;
#檢索所有行
SELECT *?FROM products;
#檢索不同值
SELECT distinct vend_id?FROM products;
SELECT DISTINCT vend_id, prod_price FROM Products;
SELECT vend_id, prod_price FROM Products;
#檢索指定數(shù)目的行,0-4
SELECT ?prod_name FROM Products?LIMIT 5;
#檢索指定數(shù)目的行,6-9
SELECT ?prod_name?FROM Products?LIMIT 5 ?OFFSET 5;
#MySQLworkbench的注釋
SELECT ?prod_name --第一種注釋
FROM Products
LIMIT 5,5;
--第二種注釋 SELECT ?prod_name FROM Products ;
#第三種注釋 SELECT ?prod_name FROM Products ;
/*第四種注釋
SELECT ?prod_name
FROM Products
LIMIT 5 ?OFFSET 5;*/
2.9 挑戰(zhàn)題
1. 編寫 SQL 語句,從 Customers 表中檢索所有的 ID(cust_id)。
SELECT cust_id
FROM customers;
2. OrderItems 表包含了所有已訂購的產(chǎn)品(有些已被訂購多次)。編寫SQL 語句,檢索并列出已訂購產(chǎn)品(prod_id)的清單(不用列每個訂單,只列出不同產(chǎn)品的清單)。提示:最終應(yīng)該顯示 7 行。
SELECT DISTINCT prod_id
FROM orderitems;
3. 編寫SQL語句,檢索 Customers 表中所有的列,再編寫另外的 SELECT語句,僅檢索顧客的 ID。使用注釋,注釋掉一條 SELECT 語句,以便運行另一條 SELECT 語句。(當(dāng)然,要測試這兩個語句。)
/*SELECT *
FROM customers;*/
SELECT cust_id
FROM customers;
答案
https://forta.com/books/0135182794/challenges/