1、使用三元表达式
如果姓名=‘小小’那么查找年龄大于18岁的,如果不等于‘张三’就找小于等于18岁的
select * from students where (name != ‘小小’) ? students.age<=18 : students.age>18;
2、decode函数
DECODE的语法:
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
表示如果value等于if1时,DECODE函数的结果返回then1,…,如果不等于任何一个if值,则返回else。
3、case when
case when a='1'then 'xxxx'
when a='2' then 'ssss'
'zzzzz'
end as
1、以CASE开头,以END结尾
2、分支中WHEN 后跟条件,THEN为显示结果
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加
4、END 后跟别名
1、使用三元表达式如果姓名=‘小小’那么查找年龄大于18岁的,如果不等于‘张三’就找小于等于18岁的select * from students where (name != ‘小小’) ? students.age<=18 : students.age>18;2、decode函数DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else)表示如果value等于if1时,DECODE函数的结果返回then1,…,如果
1. 查询语句1.1. selectselect 用于从数据看查询数据。语法select field1,filed2,.. .
from tablename
[where condition]-- 查询所有员工的名字和雇员号
select empno,ename from emp;
-- 查询所有员工的雇员号、姓名、岗位
select empno,ename,job from emp;
--...
select valueA,valueB into tableB from tableA;
上面这句语句的意思是将tableA表中的valueA和valueB字段的值和结构添加到tableB中,tableB表需不存在。
在Oracle中select into的等价用法
create table tableB
select valueA,valueB from tableA;
我估计有点 SQL 基础的人都会写 INSERT 语句。下面是 SQL 标准写法。
INSERT INTO employees (employee_id, name) VALUES (1, 'Zhangsan');
INSERT INTO employees VALUES (1, 'Shangbo');
其实, Oracle 还支持下面的写法,作用和上面的语句完全相同。
INSERT INTO (SELECT employee_id, name FROM employees) VALUES (2, 'Lisi');
此外,同其他数据
在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法:
1. /*+ALL_ROWS*/
表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.
SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
2. /*+FIRST_ROWS*/
表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.
SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN
1.在
Oracle中实现
SELECT TOP N
由于
ORACLE不支持
SELECT TOP
语句,所以在
ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现
SELECT TOP N的查询。
简单地说,实现
方法如下所示:
SELECT 列名1...列名n FROM
(
SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)
WHERE ROWNUM <= N(抽出记录数)
ORDER BY ROWNUM ASC
下面举个例子简单说明一下。
顾客表customer(id,name)有如下数据:
ID NAME
select xxx,case when T.ELUDEMONEYTYPEITEM=901 then cast('901' as varchar2(20))
else cast((SELECT
COUNT (*)
JC_EVADETOLL_RECORD rd
WHERE
rd.JCFUNID = T .RE
b:='asdf';
if length(a)>length(b) then
dbms_output.put_line('字符串"'||a||'"的长度比字符串"'||b||'"的长度大');
1. CASE WHEN 表达式有两种形式
--简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASEWHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
2. CASE WHEN...