常用查询技巧

1、获取数据的前3(n)行

;

2、SQL语句中if语句

在SQL语句中没有直接的if语句,但是有两个函数:DECODE和CASE,他们能够实现if语句的功能

2.1)decode

--语法:decode (条件, 值1, 返回值1, 值2, 返回值2, ... 值n, 返回值n, 默认值)
--含义:
if 条件=值1 then
   return(返回值1)
elsif 条件=值2 then
   return(返回值2)
...

elsif 条件=值n then
   return(返回值n)
else
   return(默认值)
end if

--使用:
select produce_id,
decode (warehouse_id,
, 'south1',
, 'south2',
, 'south3',
, 'south4',
'unknown') as "location of inventory"
from inventories;

2.2)case

 then 'D'
  then 'C'
  then 'B'
 and then 'A'
else 'no score' end)
from score_table;

3、连接字符串

select dept_name||name||'doc' from test_table;
select concat(dept_name,name) from test_table;

4、查询中使用算术运算符

   --在DML语句中,可以使用加(+)、减(-)、乘(*)、除(/)等各种运算符。如:
   ) from employee;

5、行列互换显示(固定列数的行列转换)

--任务描述:
table:
student  subject grade
---------------------------
student1 语文
student1 数学
student1 英语
student2 语文
student2 数学
student2 英语
...

--转换为:
student  语文 数学 英语
student1
student2
...

--1)把列转换成行:
select student,
sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'英语', grade,null)) "英语"
from table
group by student;

--2)把行转换成列(逆向完成任务):
select student, '语文' as subject, 语文 as grade
from table

union all
select student, '数学' as subject, 数学 as grade
from table

union all
select student, '英语' as subject, 英语 as grade
from table

;

6、在SQL语句中实现换行

)||'my puppy!' from dual;

7、随机数产生

--1)返回一个大于或等于0且小于1的随机数(小数):
   select dbms_random.values from dual;

--2)返回一个大于或等于1且小于50的随机数:
   ,) from dual;
   ,)) from dual;   --取整

--3)返回一个指定长度的随机字符串:
   ) from dual;     --'u'或'U':返回大写字母、'l'或'L':返回小写字母、'a'或'A':大小写字母混合、'x'或'X':大写字母和数字混合、'p'或'P':任意可显示字符

--4)返回一个随机整数:
   select dbms_random.random from dual;

8、测试值是否位于某个区间

select '测试字符' from dual where 'c' between 'a' and 'd';   --测试字符c是否介于a和d之间

9、空值陷阱

 , null);   --返回空,而不是TURE

10、exists(和not exists)

--用于测试数据行的存在性,语法:exists (subquery),如:
   select * from student S where exists (select * from dept E where S.deptid = E.deptid);

11、记录为空时返回一条默认记录

select name, deptname from table
union select '马小明', '未知' from  dual where not exists (select * from table); 

12、找出表中的重复记录(完全重复)

--完全重复
select * from table
);
--查询同一表内多字段同时重复记录的SQL语句(比如现在有一人员表,表名:peosons,若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来)
select p1.* from persons p1, persons p2 where p1.id<>p2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address;

13、分级汇总(rollup

table:
DEAL_NAME   MONEY   DEAL_DATE
------------------------------
足球鞋
...

select to_char(deal_name,'YYYY') 年, to_char(deal_name,'MM') 月, SUM(money) 销售收入
from table
group by rollup(to_char(deal_name,'YYYY'),to_char(deal_name,'MM'));

14、多维汇总(cube

select to_char(deal_name,'YYYY') 年, to_char(deal_name,'MM') 月, SUM(money) 销售收入
from table
group by cube(to_char(deal_name,'YYYY'),to_char(deal_name,'MM'));

15、集合运算(union、union all、intersect、minus)

select id, name from product_a
union all                          --查询两个集合中的所有记录,包括重复的记录
select id, name from product_b;

select id, name from product_a
union                              --查询两个集合中的所有记录,不包括重复的记录
select id, name from product_b;

select id, name from product_a
intersect                          --查询两个集合中相同的记录
select id, name from product_b;

select id, name from product_a
minus                              --查询只存在于第一个集合而不存在于第二个集合的记录(相减)
select id, name from product_b;

16、构造[批量]命令

) from user_all_tables;

17、多行子查询

--1)any:比较子查询返回的每一个值;<any:小于最大值;>any:大于最小值
select empno, ename, job
from emp
where sal < any (select sal from emp where job = 'clerk')
and job <> 'clerk';

--2)all:比较子查询返回的每一个值;>all:大于最大值;<all:小于最小值
select empno, ename, job,sal
from emp
where sal < all (select avg(sal) from emp group by deptno)
and job <> 'clerk';

18、把查询当计算器使用

 from dual;

19、常见字符串处理

--1)批量替换特殊字符
select replace('ckna is great and i am from ckna','ck','Chi') from dual;   --整体替换:China is great and i am from China
') from dual;   --逐个字符替换:r1f23yp
') from dual;     --r1fyp

--2)去除字符串中的数字
select translate('m8y 3d4e5al','#1234567890','#') from dual;

--3)统计某个字符在字符串中出现的次数
select length(translate('bbcyyddkbbc','b'||'bbcyyddkbbc','b')) from dual;

--4)统计某个字符串在另一个字符串中出现的次数
select (length(string1) - length(replace(string1,string2))) / length(string2) from dual; --replace(string1,string2)表示从string1中去掉string2

--5)去掉字符串中的空格
select replace ('so me th ing',' ','') from dual;
select translate ('so me th ing','# ','#') from dual;

--6)删除字符串的前几个字符
) from dual;  --删除前两个字符,substrb与其类型,单位是字节

--7)字母大小写转换
select lower('My Dog!') from dual;   --转为小写
select upper('my dog!') from dual;   --转为大写
select initcap('my doG!') from dual;   --首字母转为大写,其他小写

20、常见日期和时间处理

--1)获取系统当前日期和时间
select sysdate  from dual;
select to_char(sysdate,'MM-DD-YYYY') "NOW" from dual;  --只显示日期
select to_char(sysdate,'HH24-MI-SS') "NOW" from dual;  --只显示时间
select to_char(sysdate,'MM-DD-YYYY HH24-MI-SS') "NEW" from dual;  --日期和时间都显示

--2)修改日期的显示格式
alter session set nls_date_formate='MM-DD-YYYY HH24-MI-SS';   --只对本次会话有效,想要一直有效需要修改初始化文件中的nls_date_formate参数

--3)求某个月有多少天
select sysdate, to_number(to_char(last_day(sysdate),'DD')) from dual;

--4)计算一个月还剩多少天
select sysdate,last_day(sysdate) - sysdate "days left" from dual;

--5)今天星期几
select to_char(sysdate,'day') from dual;
select extract(say from sysdate) "今天几号" from dual;   --今天几号
select to_char(sysdate,'DDD') from dual;   --今天是一年的第几天

SQL查询(二)的更多相关文章

  1. SQL Server-聚焦深入理解动态SQL查询(三十二)

    前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...

  2. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

  3. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  4. ThinkPHP(3)SQL查询语句

    ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...

  5. Hibernate SQL查询 addScalar()或addEntity()

    本文完全引用自: http://www.cnblogs.com/chenyixue/p/5601285.html Hibernate除了支持HQL查询外,还支持原生SQL查询.          对原 ...

  6. SQL 查询性能优化----解决书签查找

    先来看看什么是书签查找: 当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求.对一个有聚簇索引的表来说是一个键查找(key lookup), ...

  7. 【T-SQL基础】01.单表查询-几道sql查询题

    概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...

  8. Hibernate原生SQL查询

    最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...

  9. SQL总结二

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  10. Hibernate5.2之原生SQL查询

    Hibernate5.2之原生SQL查询 一. 介绍  在上一篇博客中笔者通过代码的形式给各位读者介绍了Hibernate中最重要的检索方式--HQL查询.在本博文中笔者将向各位读者介绍Hiberna ...

随机推荐

  1. 简单灵活的 PHP页面跳转函数

    <?         function Location($url = ,) == ,) === ,) ===  ) {                                 $pro ...

  2. C#的GC机制(来自网摘复制,未整理)

    第一个就是很多人用.Net写程序,会谈到托管这个概念.那么.Net所指的资源托管到底是什么意思,是相对于所有资源,还是只限于某一方面资源?很多人对此不是很了解,其实.Net所指的托管只是针对内存这一个 ...

  3. 【HTML5】Server-Sent服务器发送事件

    Server-Sent 事件 - 单向消息传递 Server-Sent 事件指的是网页自动获取来自服务器的更新. 以前也可能做到这一点,前提是网页不得不询问是否有可用的更新.通过服务器发送事件,更新能 ...

  4. Memcached GUI工具

    1, http://www.junopen.com/memadmin/   或 https://github.com/junstor/memadmin 帐号和密码都是:admin 在左下的数据读取里面 ...

  5. 单元测试框架-TestNG的安装

    一.在eclipse中安装TestNG插件 1)打开eclipse,选择help--> Install New Software

  6. maven 问题汇总

    尽量用高版本maven 3以上的版本 1.maven环境变量相关 maven环境变量配置依赖于JAVA_HOME配置 maven环境变量配置为M2_HOME maven配置完环境变量需要重启操作系统 ...

  7. 转-CSS3 圆角(border-radius)

    CSS3 圆角(border-radius)   前缀 例1 例2:无边框 书写顺序 其它 支持性 值:半径的长度 前缀 -moz(例如 -moz-border-radius)用于Firefox -w ...

  8. NGif, Animated GIF Encoder for .NET

    1.简介 链接: http://www.codeproject.com/Articles/11505/NGif-Animated-GIF-Encoder-for-NET 2.代码使用 1)多个Imag ...

  9. HDU4135 Co-prime(容斥原理)

    题目求[A,B]区间内与N互质数的个数. 可以通过求出区间内与N互质数的个数的前缀和,即[1,X],来得出[A,B]. 那么现在问题是求出[1,X]区间内与N互质数的个数,考虑这个问题的逆问题:[1, ...

  10. BZOJ4282 : 慎二的随机数列

    首先在开头加上-inf,结尾加上inf,最后答案减2即可. 设s[i]为i之前未知的个数,f[i]为以i结尾的LIS,且a[i]已知,那么: f[i]=max(f[j]+min(s[i]-s[j],a ...