本節(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
完結