【SQL从一点一滴分析系列文章】为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询
在分析 SQL 时,也会同时分析 mybatis 、Hibernate 中的相关操作
点击查看详情

本节讲述 在 DB2 、Oracle 、 PostgreSQL 、mysql 、 SQL Server 数据库中 基本的 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  statusfrom 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_userorder by rand() fetch first 5 rows only

在 MySQL 中,同时使用 内置的 rand 函数、limit 和 order by

select * from t_userorder by rand() limit 5

在 PostgreSQL 中 ,同时使用 random 函数 limit 和 order by

select * from t_userorder by random() limit 5

在 SQL Server 中同时使用内置函数 newid top orderby

select top 5 * from t_userorder 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_addressend
from t_user

完结

SQL查询单表数据(一)相关推荐

  1. SQL查询单表数据之组合(三)

    [SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...

  2. SQL查询单表数据之排序(二)

    [SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...

  3. SQL数据查询——单表查询(二)

    集合查询+单表查询相关实例 集合查询 1.UNION 2.INTERSECT 3.EXCEPT 相关实例 实例1 实例2 集合查询 SQL SERVER集合操作主要包括 并操作 UNION 交操作 I ...

  4. MySQL8单表记录多少_mysql学习笔记之8(单表数据记录查询)_mysql

    mysql学习笔记之八(单表数据记录查询) 查询数据记录,就是指从数据库对象中获取所要求的数据记录.mysql中提供了各种不同方式的数据查询方法. 一.简单数据记录查询 select field1,f ...

  5. mysql查询单表的销售额_MYsql数据库单表百万数据量查询

    最近总在意自己的网页刷新数据的速度,mysql5.7和mysql8.0单表数据库导入百万甚至千万数据的时候,会不会卡死,会不会慢? 因此编写测试用例,通过Navicat Premium来查询单表的时间 ...

  6. mysql 将a表数据插入b表_查询A表数据插入到B表中 sql

    前言: 最近遇到一个 查询A表数据插入到B表中sql的问 所以就发文章记录下,希望能帮助到家 开发环境 win10专业版本(其他操作系统具体安装mysql请百度 ) 准备工作: 安装MySQL 1 m ...

  7. mysql单表数据列_MySQL 之 数据操作及单表查询

    1.数据操作 (1)insert 增加数据 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); 语法二: ...

  8. oracle单表数据量上亿_MySQL数据库中,数据量越来越大,有什么具体的优化方案么?...

    个人的观点,这种大表的优化,不一定上来就要分库分表,因为表一旦被拆分,开发.运维的复杂度会直线上升,而大多数公司和开发人员是欠缺这种能力的. 所以MySQL中几百万甚至小几千万的表,先考虑做单表的优化 ...

  9. 单表数据量过大处理策略

    今天和一个朋友在讨论怎么样应对单表数据量过大,比如一些交易数据,每天都有10W的交易量.没有多久该表的查询,插入速度将变慢,最终将不可用. 对于关系数据库来说,应对单表数据量过大的策略大体上有两种. ...

最新文章

  1. 你不应该关注区块链的“杀手级应用”
  2. 请与计算机管理员联系,电脑的限制被取消,请与管理员联系 解决方案
  3. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
  4. 独家 | 手把手教你用Python的Prophet库进行时间序列预测
  5. 为什么字节跳动、腾讯、阿里都在用Python??
  6. python默认参数惹得祸
  7. IE8 chrome 中 table隔行换色解决办法
  8. Atom相关资料整理
  9. 【深度学习】CornerNet: 将目标检测问题视作关键点检测与配对
  10. springmvc+mybatis+dubbo+zookeeper分布式架构
  11. WPF 使用值转换器进行绑定数据的转换IValueConverter
  12. JS页面跳转页面大全
  13. 数字孪生交通仿真(一)
  14. win FlashFxp与ubuntu vsftpd共享文件
  15. 好嗨哟!OneOS 图形组件显示自己喜欢的图片
  16. Nutch安装第四天,进入正题,Nutch2.4的配置和编译
  17. Linux系统的时间管理及优化
  18. twrp显示 failed to mount system
  19. React使用过程知识点随手记
  20. 程序员小说 Out Of Memory (一)

热门文章

  1. Mask TextSpotter v3 来了!最强端到端文本识别模型
  2. CV Papers|计算机视觉论文推荐周报20200501期
  3. 零基础应该先学习 java、php、前端 还是 python?
  4. linux 开发板传文件,linux下使用minicom传送文件到开发板
  5. 轻量化版本优于MobileNet系列 | Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet
  6. Facebook田渊栋谈人生挑战与选择
  7. GAN模型计算量减少至1/9!MIT韩松团队提出GAN压缩法,已开源
  8. Matlab线性/非线性规划优化算法(4)
  9. java怎么指定父窗口大小_[Java教程]jQuery如何获取div距离窗口顶部或者父元素顶部的距离...
  10. 小程序和android联调,小程序打开APP指定页面