SQL查詢單表數據(一)

本節(jié)講述 基本的 select 查詢單表數據語句

1 從單表中查詢所有的行和列

查詢表中所有的數據

select * from t_user

在 SQL 中扁凛,字符 "*" 具有特殊的含義忍疾,使用用它,將從指定的表中返回每一列谨朝,在這里由于沒有使用 where 子句卤妒,所以將會返回每一行,即是 查詢表中所有的行與列字币,就是所有的數據 则披。

還有一種寫法就是分別列出每一列 如下

select user_name,user_age,user_agent,user_flag,user_address from t_user

在交互執(zhí)行的特定查詢中,使用 * 寫法更容易些洗出,然而士复,在寫程序代碼的時候,推薦指定每一列翩活,這樣后續(xù)開發(fā)中就可以很清楚的查看到返回了哪些數據阱洪,有利于其他開發(fā)者閱讀,當然兩種寫法的性能是一致菠镇。

2 從單表中查詢部分數據

使用 where 子句指定查詢結果要保留哪些行冗荸,例如 要查詢 年齡為28的所有用戶信息,我們可以這樣寫

select * from t_user where user_age=28
3 從單表中查詢滿足多個條件的數據

可以使用 where 結合 or 利耍、and 子句綜合查詢

例如查詢 地址為山西中的所有用戶蚌本,以及地址為北京的所有年齡不超過28歲的用戶盔粹,我們可以這樣寫

select * from t_user 
    where user_province="山西" 
    or user_age<= 28 and user_province="北京" 
4 從單表中查詢部分列

要查看一個表中特定的列,而不是所有的列的值程癌,例如要查詢 用戶的 姓名舷嗡、年齡,可以這樣寫

select  user_age,user_name from t_user

通過 select 子句中指定列嵌莉,可以保證不會返回多余的數據咬崔,在跨域網絡查詢數據時,可以避免查詢不需要的數據所帶來的時間的浪費烦秩。

5 為查詢的列指定別名

改變查詢所返回的列名,使這些數據更具有可讀性郎仆,可以使用 AS 關鍵字: 原列名 as 新名稱

select user_age as userAge,user_name as userName from t_user

或者可以 省略 as 關鍵字

select user_age userAge,user_name userName from t_user

使用比較好的別名只祠,可以在實際開發(fā)中使其他開發(fā)者更容易理解查詢結果

6 在 where 子句中引用別名的列

例如查詢 年齡不大于 28 歲的所有用戶,如下

select user_age as userAge ,user_name as userName from t_user where userAge <=28
7 將查詢的多個列值組合成一列

例如在 查詢用戶表的時候扰肌,返回這樣的結果集

張三 的年齡是 24
李四的年齡是 25

...

然而在 t_user 表中抛寝,姓名,年齡是不同的列曙旭,要把不同的列數據連接起來
在 DB2 盗舰、Oracle 、 PostgreSQL 中使用雙豎線作為連接運算符

select user_name || '的年齡是' || user_age as msg form t_user

在 mysql 中使用 concat 函數

select concat(user_name,'的年齡',user_age) as msg from t_user

在 SQL Server 中使用 "+" 運算符進行連接操作

select user_name +'的年齡' + user_age as msg from t_user

查詢的結果最終會以 msg 返回

8 在select查詢語句中使用條件邏輯

要在 select 查詢結果中桂躏,使用 if-else 篩選數據操作钻趋,例如 用戶的年齡小于 18 就返回信息 "少年人",年齡大于60 就返回 "老年人"剂习,其他的返回中年人蛮位,可以這樣寫

select user_name ,user_age,
    case when user_age <18 then '少年人'
         when user_age>60 then '老年人'
         else '中年人'
    end  as  status
    from t_user

case 表達式可以對查詢結果的返回值執(zhí)行條件邏輯,在上述查詢中,case 篩選的結果 使用的別名是 status

在這里插入圖片描述
9 限制返回的行數

例如要查詢一個表中的前100條數據鳞绕,可以使用 數據庫提供的內置函數來控制返回的行數

在 DB2 中,使用 fetch first 子句

select * from t_user fetch first 100 rows only 

在 mysql postgreSQL 中

select * from t_user limit 100

在 Oracle 中失仁,使用 where 子句通過 rownum 來限制行數

select * from t_user where rownum <=100

在 SQL Server 中 使用 top 關鍵字來限制返回的行數

select top 100 * from t_user
注意 :

在 Oracle 中,必須使用 rownum 函數開得到每行的行號们何,從1開始遞增萄焦,在使用 rownum <=100 來返回 前100行時,會發(fā)生如下操作

  • 1 Oracle 執(zhí)行查詢
  • 2 Oracle 獲取第 1個合條件的行冤竹,稱為第1行
  • 3 判斷結果是否有 100 行了嗎拂封,如果沒有,那么贴见,Oracle 就再返回行烘苹,因為要滿足行號小于先于100的條件,如果到了100行片部,那么 Oracle 就不再返回行
  • 4 Oracle 獲取到下一行镣衡,并遞增行號霜定,然后再返回到步驟3中
10 從表中隨機返回 n 條記錄

可以使用數據庫中內置函數來生成隨機數,例如隨機返回表中的5條數據

在 DB2 中,使用內置函數 rand 與 order by 和 fetch

select * from t_user
    order by rand() fetch first 5 rows only 

在 MySQL 中廊鸥,同時使用 內置的 rand 函數望浩、limit 和 order by

select * from t_user
    order by rand() limit 5

在 PostgreSQL 中 ,同時使用 random 函數 limit 和 order by

select * from t_user
    order by random() limit 5

在 SQL Server 中同時使用內置函數 newid top orderby

select top 5 * from t_user
    order by newid()
11 查找表中的空值

要查找某列中值為空的所有的行惰说,要確定值是否為空磨德,可以使用 IS_NULL

select * from t_user 
      where user_addres is null

null 不能使用等于或者不等于,為了確定某一行是否有空值吆视,必須使用 is null 或者 is not null

12 將空值轉換為實際值

在一些行中包含空值典挑,我們在實際開發(fā)中可以將這些空值設置成一些默認的值,可以使用 coalesce 函數來替換空值

select * coalesce(user_address,'北京') from t_user 

在這里查詢的結果集中啦吧,user_address 的值非空就返回 user_address的值您觉,如果是空,就返回 北京授滓,當然使用 case 也可以實現相同的效果

select * 
    case when user_address is null then '北京'
    else user_address
    end 
from t_user

完結

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末琳水,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子般堆,更是在濱河造成了極大的恐慌在孝,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淮摔,死亡現場離奇詭異私沮,居然都是意外死亡,警方通過查閱死者的電腦和手機和橙,發(fā)現死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門顾彰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胃碾,你說我怎么就攤上這事涨享。” “怎么了仆百?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵厕隧,是天一觀的道長。 經常有香客問我俄周,道長吁讨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任峦朗,我火速辦了婚禮建丧,結果婚禮上,老公的妹妹穿的比我還像新娘波势。我一直安慰自己翎朱,他們只是感情好橄维,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拴曲,像睡著了一般争舞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澈灼,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天竞川,我揣著相機與錄音,去河邊找鬼叁熔。 笑死委乌,一個胖子當著我的面吹牛,可吹牛的內容都是我干的荣回。 我是一名探鬼主播福澡,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驹马!你這毒婦竟也來了?” 一聲冷哼從身側響起除秀,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤糯累,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后册踩,有當地人在樹林里發(fā)現了一具尸體泳姐,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年暂吉,在試婚紗的時候發(fā)現自己被綠了胖秒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡慕的,死狀恐怖阎肝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情肮街,我是刑警寧澤风题,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站嫉父,受9級特大地震影響沛硅,放射性物質發(fā)生泄漏。R本人自食惡果不足惜绕辖,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一摇肌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仪际,春花似錦围小、人聲如沸昵骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涉茧。三九已至,卻和暖如春疹娶,著一層夾襖步出監(jiān)牢的瞬間伴栓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工雨饺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钳垮,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓额港,卻偏偏與公主長得像饺窿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子移斩,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容