SQL查询单表数据(一)

本节讲述 基本的 select 查询单表数据语句

1 从单表中查询所有的行和列

查询表中所有的数据

select * from t_user

在 SQL 中,字符 "*" 具有特殊的含义,使用用它,将从指定的表中返回每一列,在这里由于没有使用 where 子句,所以将会返回每一行,即是 查询表中所有的行与列,就是所有的数据 。

还有一种写法就是分别列出每一列 如下

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

在交互执行的特定查询中,使用 * 写法更容易些,然而,在写程序代码的时候,推荐指定每一列,这样后续开发中就可以很清楚的查看到返回了哪些数据,有利于其他开发者阅读,当然两种写法的性能是一致。

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

使用比较好的别名,可以在实际开发中使其他开发者更容易理解查询结果

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 表达式可以对查询结果的返回值执行条件逻辑,在上述查询中,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行时,会发生如下操作

  • 1 Oracle 执行查询
  • 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 将空值转换为实际值

在一些行中包含空值,我们在实际开发中可以将这些空值设置成一些默认的值,可以使用 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阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容