資料庫:儲存有組織的資料的容器
表:某種特定型別資料的結構化清單
模式:關於資料庫和表的布局及特性的資訊
行:表中的乙個記錄
主鍵:唯一標識表中的一行 總是應該設立主鍵
檢索單個列:
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子句,返...