SQL查询单表数据(一)
【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查询单表数据(一)相关推荐
- SQL查询单表数据之组合(三)
[SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...
- SQL查询单表数据之排序(二)
[SQL从一点一滴分析系列文章]为实际开发中的点点滴滴的总结,从最最简单的SQL 查询 到 综合分析查询 在分析 SQL 时,也会同时分析 mybatis .Hibernate 中的相关操作 点击查看 ...
- SQL数据查询——单表查询(二)
集合查询+单表查询相关实例 集合查询 1.UNION 2.INTERSECT 3.EXCEPT 相关实例 实例1 实例2 集合查询 SQL SERVER集合操作主要包括 并操作 UNION 交操作 I ...
- MySQL8单表记录多少_mysql学习笔记之8(单表数据记录查询)_mysql
mysql学习笔记之八(单表数据记录查询) 查询数据记录,就是指从数据库对象中获取所要求的数据记录.mysql中提供了各种不同方式的数据查询方法. 一.简单数据记录查询 select field1,f ...
- mysql查询单表的销售额_MYsql数据库单表百万数据量查询
最近总在意自己的网页刷新数据的速度,mysql5.7和mysql8.0单表数据库导入百万甚至千万数据的时候,会不会卡死,会不会慢? 因此编写测试用例,通过Navicat Premium来查询单表的时间 ...
- mysql 将a表数据插入b表_查询A表数据插入到B表中 sql
前言: 最近遇到一个 查询A表数据插入到B表中sql的问 所以就发文章记录下,希望能帮助到家 开发环境 win10专业版本(其他操作系统具体安装mysql请百度 ) 准备工作: 安装MySQL 1 m ...
- mysql单表数据列_MySQL 之 数据操作及单表查询
1.数据操作 (1)insert 增加数据 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3-字段n) VALUES(值1,值2,值3-值n); 语法二: ...
- oracle单表数据量上亿_MySQL数据库中,数据量越来越大,有什么具体的优化方案么?...
个人的观点,这种大表的优化,不一定上来就要分库分表,因为表一旦被拆分,开发.运维的复杂度会直线上升,而大多数公司和开发人员是欠缺这种能力的. 所以MySQL中几百万甚至小几千万的表,先考虑做单表的优化 ...
- 单表数据量过大处理策略
今天和一个朋友在讨论怎么样应对单表数据量过大,比如一些交易数据,每天都有10W的交易量.没有多久该表的查询,插入速度将变慢,最终将不可用. 对于关系数据库来说,应对单表数据量过大的策略大体上有两种. ...
最新文章
- 你不应该关注区块链的“杀手级应用”
- 请与计算机管理员联系,电脑的限制被取消,请与管理员联系 解决方案
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
- 独家 | 手把手教你用Python的Prophet库进行时间序列预测
- 为什么字节跳动、腾讯、阿里都在用Python??
- python默认参数惹得祸
- IE8 chrome 中 table隔行换色解决办法
- Atom相关资料整理
- 【深度学习】CornerNet: 将目标检测问题视作关键点检测与配对
- springmvc+mybatis+dubbo+zookeeper分布式架构
- WPF 使用值转换器进行绑定数据的转换IValueConverter
- JS页面跳转页面大全
- 数字孪生交通仿真(一)
- win FlashFxp与ubuntu vsftpd共享文件
- 好嗨哟!OneOS 图形组件显示自己喜欢的图片
- Nutch安装第四天,进入正题,Nutch2.4的配置和编译
- Linux系统的时间管理及优化
- twrp显示 failed to mount system
- React使用过程知识点随手记
- 程序员小说 Out Of Memory (一)
热门文章
- Mask TextSpotter v3 来了!最强端到端文本识别模型
- CV Papers|计算机视觉论文推荐周报20200501期
- 零基础应该先学习 java、php、前端 还是 python?
- linux 开发板传文件,linux下使用minicom传送文件到开发板
- 轻量化版本优于MobileNet系列 | Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet
- Facebook田渊栋谈人生挑战与选择
- GAN模型计算量减少至1/9!MIT韩松团队提出GAN压缩法,已开源
- Matlab线性/非线性规划优化算法(4)
- java怎么指定父窗口大小_[Java教程]jQuery如何获取div距离窗口顶部或者父元素顶部的距离...
- 小程序和android联调,小程序打开APP指定页面