转载自:http://blog.itpub.net/16436858/viewspace-676265/
下面示例中,查询的数据表参考这一篇的Person表。
一、限制返回的行数
1、Sql Server
| 1 |
SELECT TOP 10 Id,FirstName, LastName |
2、Oracle
| 1 |
SELECT Id,FirstName, LastName |
3、DB2
| 1 |
SELECT Id,FirstName, LastName |
| 2 |
FROM Person FETCH FIRST 10 ROWS ONLY |
4、MySql
| 1 |
SELECT Id,FirstName, LastName |
5、PostgreSQL
| 1 |
SELECT Id,FirstName, LastName |
小结:查询语句都很基础,MySql和PostgreSQL的写法是相同的,可以看到各个DBMS的sql书写可读性都不错,用户(开发者)使用体验很重要。
二、按特定格式查询日期(Sql Server版)
实际开发中通常都直接查询结果,然后用编程语言进行日期格式输出(如C#、Java等),但是数据库同样也提供了这种转换处理能力,下面整理一下Sql Server的常用时间格式查询和对应输出结果:
| 01 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 0)-- 10 17 2010 4:51PM |
| 02 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 1)-- 10/17/10 |
| 03 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 2)-- 10.10.17 |
| 04 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 3)-- 17/10/10 |
| 05 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 4)-- 17.10.10 |
| 06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 5)-- 17-10-10 |
| 07 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 6)-- 17 10 10 |
| 08 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 7)-- 10 17, 10 |
| 09 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 8)-- 16:52:13 |
| 10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 9)-- 10 17 2010 4:52:13:960PM |
| 11 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 10)-- 10-17-10 |
| 12 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 11)-- 10/10/17 |
| 13 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 12)-- 101017 |
| 14 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 13)-- 17 10 2010 16:53:39:403 |
| 15 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 14)-- 16:53:39:403 |
| 16 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 20)-- 2010-10-17 16:53:39 |
| 17 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 21)-- 2010-10-17 16:54:55.100 |
| 18 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 22)-- 10/17/10 4:54:55 PM |
| 19 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 24)-- 16:54:55 |
| 20 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 25)-- 2010-10-17 16:54:55.100 |
| 21 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 100)-- 10 17 2010 4:54PM |
| 22 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 101)-- 10/17/2010 |
| 23 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 102)-- 2010.10.17 |
| 24 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 103)-- 17/10/2010 |
| 25 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 104)-- 17.10.2010 |
| 26 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 105)-- 17-10-2010 |
| 27 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 106)-- 17 10 2010 |
| 28 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 107)-- 10 17, 2010 |
| 29 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 108)-- 16:56:36 |
| 30 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 109)-- 10 17 2010 4:56:36:370PM |
| 31 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 110)-- 10-17-2010 |
| 32 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 111)-- 2010/10/17 |
| 33 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 112)-- 20101017 |
| 34 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 113)-- 17 10 2010 16:57:51:713 |
| 35 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 114)-- 16:59:19:640 |
| 36 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 120)-- 2010-10-17 16:59:19 |
| 37 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 121)-- 2010-10-17 16:59:19.640 |
| 38 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 126)-- 2010-10-17T16:59:19.640 |
| 39 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 130)-- 10 ?? ?????? 1431 4:59:19:640PM |
小结:ms真够贴心的,还有哪种格式它没有帮我们实现呢?
三、从表中随机返回n条记录
1、Sql Server
| 1 |
SELECT TOP 10 Id, FirstName, LastName |
2、Oracle
| 1 |
SELECT Id, FirstName, LastName FROM( |
| 2 |
SELECT Id, FirstName, LastName FROM Person |
| 3 |
ORDER BY DBMS_RANDOM.VALUE() |
3、DB2
| 1 |
SELECT Id, FirstName, LastName FROM Person |
| 2 |
ORDER BY RAND() FETCH FIRST 10 ROWS ONLY |
4、MySql
| 1 |
SELECT Id, FirstName, LastName FROM Person |
| 2 |
ORDER BY RAND() LIMIT 10 |
5、PostgreSQL
| 1 |
SELECT Id, FirstName, LastName FROM Person |
| 2 |
ORDER BY RANDOM() LIMIT 10 |
小结:
(1)、对比各数据库产品(DBMS)的sql查询书写方式,可以发现它们的相似之处都需要使用ORDER BY 子句对行进行随机排序,而随机函数都使用各自的内置函数。好玩的地方在于,虽然各个DBMS的随机函数有相似或相同的地方,但是没有一个查询是相同的。
(2)、Oracle的查询方式相比其他稍显啰嗦,可读性稍差,但是可以看出它的思路,理解它的实现原理,对开发者是很有益的。
四、将空值转换为实际值
通常情况下,我们通过case when可以实现空值到实际值的转换:
| 5 |
WHEN LastName IS NULL THEN '' |
但是,更简洁的写法是使用COALESCE函数:
| 4 |
COALESCE(LastName,'') AS LastName |
最后,在开发中写出简洁高效的sql语句一直是我孜孜追求的目标,每次碰到动辄上百乃至上千行的sql语句或者存储过程需要维护就头疼不已,尤其是那些业务逻辑比较复杂的,不知道大家在开发中有没有过这种经历。如何规避复杂的sql语句和存储过程开发易维护的系统,不知道您有什么看法或者好的解决方案?欢迎讨论。
- 个人工作记录---工作中遇到的sql查询语句解析
在工作中写了人生的第一个查询语句,虽然是在原有基础上改的,但仍然学到了不少知识 代码: select distinct m.id, (select z.jianc from model_zuzjg z ...
- sql查询调优之where条件排序字段以及limit使用索引的奥秘
奇怪的慢sql 我们先来看2条sql 第一条: select * from acct_trans_log WHERE acct_id = 1000000000009000757 order b ...
- 记一个简单的sql查询
在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...
- SQL查询多条不重复记录值简要解析【转载】
转载http://hi.baidu.com/my_favourate/item/3716b0cbe125f312505058eb SQL查询多条不重复记录值简要解析2008-02-28 11:36 以 ...
- 为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录
为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录???原因很简单: SELECT * FROM dbo.TableA AS a WHERE a.id NOT IN ( ...
- sql 查询某个字段最长的记录
sql 查询文本字段中值的长度最长的记录 一.函数1.SQL ServerLEN() 函数返回文本字段中值的长度.SELECT LEN(column_name) FROM table_name;2. ...
- 使用传入的总记录数实现一条sql语句完成分页查询
使用传入的总记录数实现一条sql语句完成分页查询 问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...
- 04、SQL 查询当天,本月,本周的记录
SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111) ORDE ...
- SQL 查询当天,本月,本周的记录
SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111) ORDE ...
随机推荐
- 简单日志LogHelper
public static class LogHelper { //日志存储路径 private static string LogPath = Path.Combine(AppDomain.Curr ...
- Sql Server新手学习入门
Sql Server新手学习入门 http://www.tudou.com/home/_117459337
- JavaScript Debug调试技巧
收藏于:https://blog.fundebug.com/2017/12/04/javascript-debugging-for-beginners/
- 轻量级记事本工具:CintaNotes
本片文章介绍CintaNotes小工具 功能介绍: 方便.快捷的记录笔记: 快捷地从任何地方等截取内容生成笔记: 高效的记事本内容查询: 轻松的标签管理 支持移动设备和电脑同步(估计要收费) 官网下载 ...
- linux sed命令详解 --大量举例
1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...
- tensorflow学习之路-----MNIST数据
''' 神经网络的过程:1.准备相应的数据库 2.定义输入成 3.定义输出层 4.定义隐藏层 5.训练(根据误差进行训练) 6.对结果进行精确度评估 ''' import tensorflow as ...
- jQuery和JavaScript的点击事件区别
// $("#indexPage").click(); // 触发了a标签的点击事件,但是没有触发页面跳转 document.getElementById("indexP ...
- Unityclient通信測试问题处理(一)
Unityclient通信測试问题处理(一) 近期在測试程序的通信模块时.遇到了一个问题:Unity的API函数仅仅能在主线程中调用.而作为client程序,我单独启用了一个监听线程来接收服务端发送的 ...
- 聊聊高并发(十九)理解并发编程的几种"性" -- 可见性,有序性,原子性
这篇的主题本应该放在最初的几篇.讨论的是并发编程最基础的几个核心概念.可是这几个概念又牵扯到非常多的实际技术.比方Java内存模型.各种锁的实现,volatile的实现.原子变量等等,每个都可以展开写 ...
- 获取个人借阅信息---图书馆client
在上一篇利用jsoup解析个人信息----图书馆client,获得个人基本信息后.便有了进一步的需求:获取当前借阅的具体信息 获取的方法还是一样的.利用jsoup解析借阅信息页面,获得所需数据,封装成 ...