1 檢索資料 SQL

2022-04-29 03:30:07 字數 3862 閱讀 5887

結束sql語句

多條sql語句必須以分號(;)分隔。多數dbms不需要在單條sql語句後加分號,但也有dbms可能必須在單條sql語句後加上分號。當

然,如果願意可以總是加上分號。事實上,即使不一定需要,加上分號也肯定沒有壞處。

sql語句和大小寫

請注意,sql語句不區分大小寫,因此select與select是相同的。同樣,寫成select也沒有關係。許多sql開發人員喜歡對sql關鍵字使用

大寫,而對列名和表名使用小寫,這樣做使**更易於閱讀和除錯。不過,一定要認識到雖然sql是不區分大小寫的,但是表名、列名和值

可能有所不同(這有賴於具體的dbms及其如何配置)。

使用空格

在處理sql語句時,其中所有空格都被忽略。sql語句可以寫成長長的一行,也可以分寫在多行

一、檢索單個列:

select

prod_name

from products;

分析▼

上述語句利用select語句從products表中檢索乙個名為prod_name的列。所需的列名寫在select關鍵字之後,from關鍵字指出從哪個表中檢

索資料。

二、檢索多個列

在選擇多個列時,一定要在列名之間加上逗號,但最後乙個列名後不加。如果在最後乙個列名後加了逗號,將出現錯誤。

select

prod_id, prod_name, prod_price

from products;

分析▼與前乙個例子一樣,這條語句使用select語句從表products中選擇資料。在這個例子中,指定了3個列名,列名之間用逗號分隔。

三、檢索所有列

select

*from products;

分析▼四、檢索不同的值(去重distinct)

select

vend_id

from products;

輸出▼

vend_id

----------

brs01

brs01

brs01

dll01

dll01

dll01

dll01

fng01

fng01

select語句返回9行(即使表中只有3個產品**商),因為products表中有9種產品。那麼如何檢索出不同的值?

辦法就是使用distinct關鍵字,顧名思義,它指示資料庫只返回不同的值。

select

distinct

vend_id

from products;

分析▼select distinct vend_id告訴dbms只返回不同(具有唯一性)的vend_id行,所以正如下面的輸出,只有3行。如果使

用distinct關鍵字,它必須直接放在列名的前面。

輸出▼

vend_id

----------

brs01

dll01

fng01

警告:不能部分使用distinct

distinct關鍵字作用於所有的列,不僅僅是跟在其後的那一列。例如,你指定select distinct vend_id, prod_price,除非指定的兩列完

全相同,否則所有的行都會被檢索出來。

五、限制結果

select語句返回指定表中所有匹配的行,很可能是每一行。如果你只想返回第一行或者一定數量的行,該怎麼辦呢?這是可行的,然而遺憾的

是,各種資料庫中的這一sql實現並不相同。

*sql serveraccess中使用select時,可以使用top關鍵字來限制最多返回多少行,如下所示:

select

top5

prod_name

from products;

分析▼上面**使用select top 5語句,只檢索前5行資料。

*如果你使用的是db2,很可能習慣使用下面這一dbms特定的sql語句,像這樣:

select

prod_name

from

products

fetch first 5 rows only;

分析▼fetch first 5 rows only就會按字面的意思去做的。

*如果你使用oracle,需要基於rownum(行計數器)來計算行,像這樣:

select

prod_name

from

products

where rownum <=

5;

*如果你使用mysql、mariadb、postgresql或者sqlite,需要使用limit 子句,像這樣:

select

prod_name

from

products

limit

5;

分析▼上述**使用select語句來檢索單獨的一列資料。limit 5指示mysql等dbms返回不超過5行的資料。這個語句的輸出參見下面的**。

為了得到後面的5行資料,需要指定從哪兒開始以及檢索的行數,像這樣:

select

prod_name

from

products

limit

5 offset 5;

分析▼limit 5 offset 5指示mysql等dbms返回從第5行起的5行資料。第乙個數字是指從哪兒開始,第二個數字是檢索的行數

六、使用注釋

1. 我們這裡使用的sql語句都很短,也很簡單。然而,隨著你的sql語句變長,複雜性增加,你就會想新增一些描述性的注釋,這便於你自

己今後參考,或者供專案後續參與人員參考。這些注釋需要嵌入在sql指令碼中,但顯然不能進行實際的dbms處理。(相關示例可以參見

附錄b中使用的create.sql和populate.sql。)

3. 注釋的另乙個重要應用是暫時停止要執行的sql**。如果你碰到乙個長sql語句,而只想測試它的一部分,那麼應該注釋掉一些**,

以便mariadb將其視為注釋而加以忽略。

select prod_name --

這是一條注釋

from products;

分析▼注釋使用-- (兩個連字元)嵌在行內。-- 之後的文字就是注釋,例如,這用來描述crea te ta ble語句中的列就很不錯。

另一種形式的行內注釋(雖然這種形式很少得到支援)。

# 這是一條注釋

select

prod_name

from products;

分析▼在一行的開始處使用#,這一整行都將作為注釋。你在本書提供的指令碼create.sql和populate.sql中可以看到這種形式的注釋。

你也可以進行多行注釋,注釋可以在指令碼的任何位置停止和開始。

多行注釋

/*

select prod_name, vend_id

from products;

*/select

prod_name

from products;

分析▼注釋從/*開始,到*/結束,/*和*/之間的任何內容都是注釋。這種方式常用於給**加注釋,就如這個例子演示的,這裡定義了兩個select語

句,但是第乙個不會執行,因為它已經被注釋掉了。

SQL技巧(1)檢索記錄

molinaro sql cookbook筆記 select from empbetter style select empno,ename,job,sal,mgr,hiredate,comm,deptno from emp 兩者效能相同,但列出所有列的名稱提高了可讀性。多數廠商都支援的where中...

SQL 排序檢索資料

select prod name from products 返回的資料 prod name fish bean bag toy bird bean bag toy rabbit bean bag toy 8 inch teddy bear 12 inch teddy bear 18 inch te...

SQL基礎 檢索資料

什麼是sql?sql是structured query language 結構化查詢語言 的縮寫。sql是一種專門用來和資料庫溝通的語言。sql的優點 a 幾乎所有重要的dbms都支援sql b sql簡單易學 c sql是一種強有力的語言,可以進行非常複雜和高階的資料庫操作。主鍵 唯一標識表中美行...