常用查询技巧

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. struts2文件下载,动态设置资源地址

    转自:http://blog.csdn.net/ctrl_shift_del/article/details/6277340 ServletActionContext.getServletContex ...

  2. MATLAB信号与系统分析(四)——离散信号与系统的复频域分析及MATLAB实现

    一.系统的z变换和反变换 1.利用部分分式展开求解逆Z变换: 2.例子 3.Z变换的MATLAB函数 clear all f=sym('cos(a*k)'); F=ztrans(f) F=sym('z ...

  3. AsyncTask下载JSON

    public class HttpUtils { // 从网络url上下载字符串 public static String getHttpStr(String url) { HttpClient ht ...

  4. C# 中的可变参数方法(VarArgs)

    首先需要明确一点:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法.可以通过MethodBase.Call ...

  5. unity label和图片 gui

    #pragma strict var str:String; //接收外部复制贴图 var imageTexture:Texture; private var imageWidth:int; priv ...

  6. HDU 5044 (树链剖分+树状数组+点/边改查)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5044 题目大意:修改链上点,修改链上的边.查询所有点,查询所有边. 解题思路: 2014上海网赛的变 ...

  7. .NET中的视图和过滤器 (DefaultView和RowFilter)

    NET中的视图和过滤器 (DefaultView和RowFilter) ADO.NET中有一层对象,用来创建任意数据源的抽象模型.其中包括DataSet,DataTable,DataRow,DataV ...

  8. Linux Mint 没有 language support 语言支持解决方案

    打开新立得软件管理器在右边找到有关语言的安装后,language support就会出现

  9. [Algorithms(Princeton)] Week1 - PercolationStats

    public class PercolationStats { private int N; private int T; private double[] results; public Perco ...

  10. JavaScript基础知识总结

    正则表达式: 是一种专门用于操作字符串规则. 正则表达式: 通过一些符号来表达,简化对字符串的复杂操作. 弊端:阅读性较差 常见操作: 1.匹配 String matches(regex) 2.获取( ...