《sql必知必會》系列1基礎檢索相關

2021-10-06 14:52:00 字數 4221 閱讀 9501

資料庫:儲存有組織的資料的容器

表:某種特定型別資料的結構化清單

模式:關於資料庫和表的布局及特性的資訊

行:表中的乙個記錄

主鍵:唯一標識表中的一行 總是應該設立主鍵

檢索單個列:

select prod_name

from products;

如果沒有明確查詢的順序,返回的資料沒有特定的順序。而且通常需要應用程式自己格式化資料格式;

sql語句不區分大小寫,經常以大寫表示關鍵字,所有空格都被忽略,換不換行都行;必須以『;』結尾

多個列之間用,隔開,檢索所有列用*

select prod_name,prod_id

from products;

不重複資料.distict關鍵字必須放在列名的前面

select

distinct vend_id

from products;

sql server 和access用top關鍵字 只檢索前5行

select

top5 prod_name

from products;

mysql、 maria db、sqlite用limit關鍵字,比如不超過5行

select prod_name

from products

limit

5;

要得到後面5行的,需要指定從**開始以及檢索的行數

select prod_name

from products

limit

5offset

5;

從第5行氣的5行資料(第乙個被檢索的行是第0行,從0開始)

行內注釋 –

select

top5 prod_name -- 這是條注釋

from products;

多行:/**/

select prod_name

from products

order

by prod_name;

以prod_name字母順序排序

order by 子句要保證是select語句中最後一條語句

用非檢索列排序也是合法的

按多個列排序,指定列名,用,分開。 先按第乙個,然後第乙個相同時按第二個等

select prod_name, prod_price, prod_id

from products

orderby2

,3;

2,3指的是select後的第二個第三個列。不在select清單裡的列不能用,而且很容易發生修改了select清單但沒有修改order by子句的問題

select prod_name

from products

order

by prod_name desc

;

desc只應用到直接位於它前面的列,要是想多個列上降序,每個列名後面都得加desc

一般認為a a在字母順序中一樣,要是修改的話可能需要聯絡資料庫管理員

select prod_name,prod_price

from products

where prod_price =

3.49

;

後面有多少個0是dbms預設的,3.49和3.4900是一樣的

order by要位於where之後

<> 不等於 !《不小於 !>不大於 between 兩者之間 is null 為null值

select prod_name,prod_price

from products

where prod_price between

5and

10;

between必須指定低和高兩個,由and連線,閉區間

檢查是否為空要用is null

select prod_name,prod_price

from products

where prod_price is

null

;

在過濾資料時,不滿足某條件的返回結果裡並不會包含null,null必須單獨判斷

and, or, in, not

select prod_name,prod_price

from products

where prod_price <=

4and vend_id =

'dll01'

;

or的話,許多dbms只看第乙個滿足,後面就不看了,一併檢索出來

可以用括號()來明確多個and or之間的優先順序

select prod_name,prod_price

from products

where vend_id in

('dll01'

,'brs01'

);

in後的選項必須在()裡,逗號隔開,其實就是完成了or的操作。合法選項很多時,用in更清楚,求值順序更容易管理,而且一般比or執行的快。in的最大優點是可以包含其他select子句

用來匹配值的一部分的特殊字元

%表示任意字元出現任意次數

select prod_id, prod_name

from products

where prod_name like

'fish%'

;

萬用字元可以在任意位置,使用任意多個

但是要注意,許多dbms會用空格在後面填充,有時候』f%y』這樣可能匹配不到,最好是』f%y%』

另外,萬用字元匹配不到null

where prod_name like

'%';

是匹配不到null的

_只匹配單個字元

不能多也不能少

select prod_id, prod_name

from products

where prod_name like

'__ inch teddy bear'

;

只匹配10-99 inch的

用來指定乙個字符集,必須匹配指定位置的乙個字元。只有access和sql server支援

儲存在表中的資料一般不是應用程式要用的,有時候需要從資料庫中檢索出轉換、計算或格式化後的資料。

只有資料庫知道select中哪些列是實際的表列,哪些是計算字段。客戶端看不出區別來。

多數dbms使用+號

select vend_name +

'('+vend_country +

')'from vendors

order

by vend_name;

mysql 和mariadb中使用的是concat

select concat(vend_name +

'('+vend_country +

')')

from vendors

order

by vend_name;

可以用rtrim(列名)來去掉多餘的空格

乙個欄位或值的替換名

select rtrim(vend_name)

+'('

+rtrim(vend_country)

+')'

as vend_title

from vendors

order

by vend_name;

可以在計算欄位中+ -* /

select prod_id, quantity, item_price,quantity*item_price as expanded_price

from orderitems

where order_num =

20008

;

SQL必知必會 2 檢索資料

select的用途就是從乙個表或多個表中檢索資訊。注意 1 關鍵字 作為sql組成部分的保留字,關鍵字不能用作表或列的名字 2 sql是一種語言而不是乙個應用程式。select pro name from products 上述語句利用select語句從prodcts表中檢索乙個名為prod nam...

《SQL必知必會》系列 03

question 要怎樣努力,才能成為很厲害的人?answer 如果你注定要成為厲害的人,那問題的答案就深藏在你的血脈裡 如果你注定不是厲害的人,那你便只需要做好你自己。為什麼對這個問題印象最深刻?因為曾經的自己非常渴望成為與眾不同很厲害的人,而且還讀了很多成功學的書,很擅長給自己打雞血,也是乙個非...

sql檢索資料 mysql必知必會閱讀

select name from users select name,password,age from users select from users select distinct name from users 使用distinct之後,只返回不同的值,放在列名前面 可以通過limit子句,返...