oraclesql条件语句?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oraclesql条件语句?相关的知识,希望对你有一定的参考价值。
参考技术A 1. oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件1、先创建一个简单的数据表。
2. oracle数据库中多条件查询语句怎么写
1、首先需要打开一个oracle数据库界面。
3. oracle sql条件查询
update tb
set studystatus = '002'
where exsist (
select c.courseid
from tb c
where c.courseid = tb.courseid and c.studystatus = '002'
) and studystatus != '002';
说明: 使用exists做条件, 如果有courseid值相同的, 且studystatus为002的, 则将studystatus更新为002, 条件studystatus != '002'则是限制已经为002的记录不需要更新.
你是要修改查询到的结果? 可以在查询语句中使用case when来根据条件得到不同的值:
select s.courseid, case when exists (select c.courseid from tb c where c.courseid = s.courseid and c.studystatus = '002' and rownum < 2) then '002' else s.studystatus end as studystatus
from tb s;
这个是不是你想要的?
4. oracle sql语句时间条件
where time beeen '08:00' and '18:00'
以上是大概意思,具体时间的表示方法要根据数据库时间字段的类型和格式来。
5. ORACLE sql 里面可以用if 语句吗语法是什么
insert 语句中值的顺序如果和表结构一致可以省略列名列表。
这个SQL的意思没看懂,我给分析一下看对不对,
你是不是想表达这个意思:
如果在yangao这个表中存在age3=4的数据,那么,就向yangao中插入一行数据,行数据的内容是(4,NULL,1).
如果是这样的话,那么IF用的是不对的。
在SQL里面条件的关键字是WHERE。
insert into yangao values(4,NULL,1)
where exists (select * from yangao where(AGE3=4));
mit;
但如果你想表达的是:
在yangao表中插入一条数据,如果存在(select * from yangao where(AGE3=4)) 这样的数据就提交的话,那么应该这么写:
insert into yangao values (4, NULL, 1);
select count(*) into n_count from yangao where (AGE3 = 4);
if n_count > 0 then
mit;
end if;
6. vc 中Oracle sql多条件查询语句怎么写
where1=1--这个你写在后台
and条件1--其他的你就按这种方式来拼就行了,其他的条件不输入也不影响你前边的执行
and条件2
and条件3
and条件4
能按懂吧?
7. oracle数据库条件判断的查询语句怎么写
建表,测试数据:
createtabletest
(收款标志int)
insertintotestvalues(1);
insertintotestvalues(1);
insertintotestvalues(1);
mit;
执行:
selectcase
whena.cnt=b.cntthen
'未收款'
whena.cnt=d.cntthen
'已收款'
whenc.cnt<>0then
'部分收款'
end收款状态
from(selectcount(*)cntfromtest)a,
(selectcount(*)cntfromteshere收款标志=1)b,
(selectcount(*)cntfromteshere收款标志=2)c,
(selectcount(*)cntfromteshere收款标志=3)d
结果:
然后你自己换点其他数据测试一下吧,思路就这么个思路了。
8. 如何在Oracle的Where语句中添加条件判断
*******************
plsql写法:
*******************
1、在sqlplus 中定义一个 游标变量
var p_cursor refcursor
2、写一个plsql过程块
declare
sql_str varchar(1000) := ' ';
begin
if 2 > 1 then
sql_str := 'select * from student where Name=''小王''';
else
sql_str := 'select * from student where Name=''小李''';
end if;
open :p_cursor for sql_str;
end;
3、在sqlplus中打印输出结果
print p_cursor;
***************
补充:有点错误修正了下
***************
---
以上,希望对你有所帮助。
9. Oracle sql查询 in 条件语句
你这样的语句本身应该是有问题的吧,你是想要实现什么样的效果,如果只是想找出tableName表中不同的id,可以这样查:
select distinct id from tableName;
10. Oracle SQL语句实现按条件表达式更新列数据
update .. set col_length=(length(col_number)-4)/2+1
OracleSql语句学习
--数据库对象
数据库对象包含:表,视图,索引,序列
视图VIEN
视图在SQL语句中体现的角色与表一样,但是视图并非真实存在的表,它只是对应一条查询语句的结果集
使用视图通常是为了重用子查询,简化SQL语句的复杂度和限制某些数据的访问。
--创建一个包含10号部门员工信息的视图:
CREATE VIEW v_emp_10_weiyiji
AS
SELECT empno,ename,sal,job,deptno FROM emp_weiyiji
WHERE deptno=10
查看视图结构
DESC v_emp_10_weiyiji
SELECT * FROM v_emp_10_weiyiji
视图中对应的子查询中若含有函数或表达式,那么该字段必须给别名。并且字段的别名会成为该视图对应字段
的名字。
CREATE OR REPLACE VIEW v_emp_10_weiyiji
AS
SELECT empno id,ename name, sal salary,job,deptno
FROM emp_weiyiji
WHERE deptno = 10
SELECT * FROM v_emp_10_weiyiji
针对视图的DML操作
复杂视图不能进行DML操作
--对简单视图进行DML操作就是对该视图数据来源的基础表进行的。
INSERT INTO v_emp_10_weiyiji
(id,name,salary,job,deptno)
VALUES
(1001,‘JACK‘,2000,‘CLERK‘,10)
SELECT * FROM v_emp_10_weiyiji
SELECT * FROM emp_weiyiji
UPDATE v_emp_10_weiyiji
SET salary=3000
WHERE id=1001
DELETE FROM v_emp_10_weiyiji
WHERE id=1001
对视图进行DML操作是可能会污染基础表数据的,即:
--对视图进行DML操作后,视图对该数据不可见
从视图插入一行其他部门数据数据,视图看不见,但是基表存在。
INSERT INTO v_emp_10_weiyiji
(id ,name,salary,job,deptno)
VALUES (1001,‘JACK‘,2000,‘CLERK‘,20)
SELECT * FROM v_emp_10_weiyiji
SELECT * FROM emp_weiyiji
将视图的部门号改成20
UPDATE v_emp_10_weiyiji
SET deptno=20
SELECT * FROM v_emp_10_weiyiji
--为了避免不当的DML操作会污染基表,可以为视图添加检查选项:
--WITH CHECK OPTION
当视图添加了该选项后,那么对视图进行DML操作时,视图会检查执行该操作后视图是否对操作的记录
可见,不可见则不允许该DML操作。
CREATE OR REPLACE VIEW v_emp_10_weiyiji
AS
SELECT empno id ,ename name,
sal salary,job deptno
FROM emp_weiyiji
WHERE deptno = 10
WITH CHECK OPTION
--为视图添加只读选项后,该视图不允许进行DML任何操作
CREATE OR REPLACE VIEW v_emp_10_weiyiji
AS
SELECT empno id ,ename name,
sal salary,job deptno
FROM emp_weiyiji
WHERE deptno = 10
WHERE READ ONLY
--数据字典可以产看用户创建的数据库对象信息
SELECT object_name,object_type
FROM user_objects
WHERE object_name LIKE ‘%_WEIYIJI‘
SELECT view_name,text
FROM user_views
WHERE view_name LIKE ‘%_WEIYIJI‘
创建复杂视图
当视图对应的SQL语句含有函数,表达式分组,去重或关联查询时,该视图为复杂视图。
--复杂视图不允许进行DML操作
创建一个含有每个部门薪资情况的视图
CREATE VIEW v_dept_weiyiji
AS
SELECT
MAX(e.sal) max_sal,
MIN(e.sal) min_sal,
AVG(e.sal) avg_sal,
SUM(e.sal) sum_sal,
d.deptno,d.dname
FROM emp_weiyiji e, dept_weiyiji d
WHERE e.deptno=d.deptno
GROUP BY
d.deptno,d.dname
SELECT * FROM v_dept_weiyiji
查看谁的工资高于所在部门的平均工资?
SELECT e.ename,e.sal,e.deptno
FROM emp_weiyiji e,v_dept_weiyiji v
WHERE e.deptno=v.deptno AND e.sal>v.avg_sal
--删除视图
DROP VIEW v_emp_weiyiji
--序列
序列也是数据库对象之一
序列作用是生成一系列数字。 通常使用序列是为表的主键(ID)字段提供值。
创建一个序列
CREATE SEQUENCE seq_emp_weiyiji_id
START WITH 1
INCREMENT BY 1
序列提供了两个伪列用于取数字
NEXTVAL:获取序列下一个数字。
序列会根据序列最后生成的数字加上步长来得到。NEXTVAL会导致序列步进
序列是不能回退的,发生步进后之前的数字就无法再次获取。
CURRVAL:获取序列最后生成的数字。
--在使用CURRVAL之前至少调用过一次NEXTVAL后才可以使用
SELECT seq_emp_weiyiji_id.NEXTVAL
FROM dual
使用seq_emp_id为emp表提供主键值:
INSERT INTO emp_weiyiji
(empno,ename,job,sal,deptno)
VALUES
(seq_emp_weiyiji_id.NEXTVAL,‘JACK‘,‘CLERK‘,2000,20)
--删除序列
DROP SEQUENCE seq_emp_weiyiji_id
--INDEX索引
索引是为了提高查询效率
索引的实现是数据库内部完成。
--单列索引
CREATE INDEX idx_emp_weiyiji_ename ON emp_weiyiji(ename);
SELECT * FROM emp_weiyiji
--多列索引
CREATE INDEX idx_emp_weiyiji_job_sal ON emp_weiyiji(job,sal)
SELECT empno,ename,sal,job FROM emp_weiyiji
ORDER BY job,sal
--为函数添加索引
CREATE INDEX emp_weiyiji_ename_upper_idx ON emp_weiyiji(UPPER(ename));
SELECT * FROM emp_weiyiji
WHERE UPPER(ename)=‘KING‘;
--重建索引idx_emp_weiyiji_ename
ALTER INDEX idx_emp_weiyiji_ename REBUILD;
--删除索引idx_emp_weiyiji_ename
DROP INDEX idx_emp_ename;
--建表时添加非空约束
CREATE TABLE employees_weiyiji(
eid NUMBER(6),
name VARCHAR2(30) NOT NULL,
salary NUMBER (7,2),
hiredate DATE
CONSTRAINT employees_weiyiji_hiredate_nn NOT NULL)
DROP TABLE employees_weiyiji
DESC employees_weiyiji
--修改表时添加非空约束
ALTER TABLE employees_weiyiji
MODIFY (eid NUMBER(6)NOT NULL);
--取消非空约束
ALTER TABLE employees_weiyiji
MODIFY (eid NUMBER(6) null);
--添加唯一性约束
唯一性约束可以保证字段的值在整张表中每条记录都不一样,NULL除外。
CREATE TABLE employees1_weiyiji(
eid NUMBER(6) UNIQUE,
name VARCHAR2(30),
email VARCHAR2(50),
salary NUMBER(7,2),
hiredate DATE,
CONSTRAINT employees1_weiyiji_email_uk UNIQUE(email)
)
DESC employees1_weiyiji
INSERT INTO employees1_weiyiji
(eid,NAME,email)
VALUES(2,‘JACK‘,‘[email protected]‘)
SELECT * FROM employees1_weiyiji
--建表之后增加唯一性约束条件
ALTER TABLE employees1_weiyiji
ADD CONSTRAINT employees1_weiyiji_name_uk UNIQUE(name);
DELETE FROM employees1_weiyiji
WHERE name=‘JACK‘
--主键约束
--非空且唯一,且一张表只能有一个字段添加主键约束。
CREATE TABLE employees2_weiyiji(
eid NUMBER(6) PRIMARY KEY,
name VARCHAR2(30),
email VARCHAR2(50),
salary NUMBER(7,2),
hiredate DATE
);
DROP TABLE employees2_weiyiji
INSERT INTO employees2_weiyiji
(eid,name)
VALUES(1,‘jack‘)
SELECT * FROM employees2_weiyiji
--检查约束
ALTER TABLE employees2_weiyiji
ADD CONSTRAINT employees2_weiyiji_salary_check
CHECK(salary>2000)
INSERT INTO employees2_weiyiji
(eid, name,salary,deptno)
VALUES(1236,‘donna noble‘,2500,40);
以上是关于oraclesql条件语句?的主要内容,如果未能解决你的问题,请参考以下文章
如何在oracle sql中的where条件中使用case语句?