SQL查询(二)
常用查询技巧
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查询(二)的更多相关文章
- SQL Server-聚焦深入理解动态SQL查询(三十二)
前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...
- Oracle常用SQL查询(2)
三.查看数据库的SQL 1 .查看表空间的名称及大小 select t.tablespace_name, round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- ThinkPHP(3)SQL查询语句
ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...
- Hibernate SQL查询 addScalar()或addEntity()
本文完全引用自: http://www.cnblogs.com/chenyixue/p/5601285.html Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原 ...
- SQL 查询性能优化----解决书签查找
先来看看什么是书签查找: 当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求.对一个有聚簇索引的表来说是一个键查找(key lookup), ...
- 【T-SQL基础】01.单表查询-几道sql查询题
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- Hibernate原生SQL查询
最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...
- SQL总结二
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- Hibernate5.2之原生SQL查询
Hibernate5.2之原生SQL查询 一. 介绍 在上一篇博客中笔者通过代码的形式给各位读者介绍了Hibernate中最重要的检索方式--HQL查询.在本博文中笔者将向各位读者介绍Hiberna ...
随机推荐
- gitlab+TortoiseGit中使用SSH
1.在文件夹空白位置右键打开"Git Bash" 2.按 https://gitlab.yourhost.com/help/ssh/ssh.md 中的说明,输入命令 ssh-k ...
- hdu 1430+hdu 3567(预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路:由于只是8种颜色,所以标号就无所谓了,对起始状态重新修改标号为 12345678,对目标状 ...
- 如何扫描出Android系统媒体库中视频文件
Android系统启动时会去扫描系统文件,并将系统支持的视频文件(mp4,3gp,wmv)扫描到媒体库(MediaStore)中,下面代码演示如何获得这些文件的信息: publicstatic Lis ...
- loadrunner常见问题总结
在玩Loadrunner时经常性的出现脚本录制为空的情况,下面是我总结出的解决办法: 1.在用loadrunner录制脚本时发现脚本录制为空,查找原因,我首先看. IE选项->连接->局域 ...
- loadrunner录制脚本出现urs.asmx解决方法:
在loadrunner录制过程中可能出现如下脚本: 解决方法: 解决办法:打开IE9的Internet选项-->高级,把设置下面安全中“启用SmartScreen筛选器”不选中,IE默认是选中的 ...
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- LightOJ1086 Jogging Trails(欧拉回路+中国邮递员问题+SPFA)
题目求从某点出发回到该点经过所有边至少一次的最短行程. 这个问题我在<图论算法理论.实现及应用>中看过,是一个经典的问题——中国邮递员问题(CPP, chinese postman pro ...
- BZOJ1525 : [POI2006]Zos
由于k很小,所以随机一组解的正确率有90%以上. 每次随机选取一个没被删除的点,然后将与其相邻的点都删去即可. #include<cstdio> #include<cstdlib&g ...
- POJ 1523 (割点+连通分量)
题目链接:http://poj.org/problem?id=1523 题目大意:连通图,找图中割点,并计算切除该割点后,图中的连通分量个数. 解题思路: POJ的数据很弱. Tarjan法求割点. ...
- MySQL删除更新数据时报1175错误的问题
今天删除mysql数据库中的一条记录的时候,一直不能删除,提示错误信息如下: Error Code: 1175. You are using safe update mode and you trie ...