1. 序列
一组等长间隔的数字,主要就是用在主键的值
/*create sequence 序列名
increment by 1 负数是递减
start with 10
maxvalue 10000000
minvalue 10
cycle|nocycle
nocache|cache 20;
*/
--alter sequence 序列名
-- start with 是不能修改的
--drop sequence 序列名
--使用序列 :
--序列名.nextval 序列名.currval
2. 插入和更新数据操作
3. 删除数据操作
一组等长间隔的数字,主要就是用在主键的值
/*create sequence 序列名
increment by 1 负数是递减
start with 10
maxvalue 10000000
minvalue 10
cycle|nocycle
nocache|cache 20;
*/
--alter sequence 序列名
-- start with 是不能修改的
--drop sequence 序列名
--使用序列 :
--序列名.nextval 序列名.currval
2. 插入和更新数据操作
3. 删除数据操作
4. 复制建表
--创建序列
CREATE SEQUENCE seq_xxx
--默认开始位置 1 间隔1 缓存20 不循环 最大值99999999999999999999
CREATE SEQUENCE seq_xxx2
START WITH 1000 --开始位置
INCREMENT BY 2 --间隔
CACHE 30|NOCACHE --缓存 30或不缓存
MAXVALUE 99999999999999 --最大值
CYCLE|NOCYCLE --循环或不循环
CREATE SEQUENCE seq_xxx2
START WITH 1000 --开始位置
INCREMENT BY 2 --间隔
NOCACHE --缓存 30或不缓存
MAXVALUE 10000000000000 --最大值
CYCLE --循环或不循环
CREATE TABLE oder--订单表
(
o_id NUMBER PRIMARY KEY,
o_name VARCHAR2(20),
custom NUMBER REFERENCES custom(c_id)
)
INSERT INTO oder VALUES(seq_xxx2.NEXTVAL,'合肥的一批大米','');
SELECT * FROM oder;
CREATE TABLE custom --客户表
(
c_id NUMBER PRIMARY KEY,
c_name VARCHAR2(20)
)
--dual虚表(伪表)
SELECT * FROM dual;
SELECT 1+1 FROM dual;
SELECT SYSDATE FROM dual;
SELECT seq_xxx2.NEXTVAL FROM dual;
-- 修改序列
ALTER SEQUENCE seq_xxx2
--START WITH 900 开始的位置不允许修改
INCREMENT BY 1
CACHE 100
NOCYCLE
MAXVALUE 99999999999999
--删除
DROP SEQUENCE seq_xxx2;
--查看已经创建的序列
SELECT * FROM user_sequences;
--更新表的数据
-- 格式: update 表名 set 字段名='更新的值'
-- 或者update 表名 set 字段名='更新的值' where 表达式
UPDATE oder SET o_name = '新的值' WHERE o_id = 1002;
--UPDATE oder SET o_name = '123456' WHERE o_name = '合肥的一批大米';
--删除表的数据
--删除所有的数据: delete from 表名; truncate table 表名;
DELETE FROM oder; --逐行的删除,可以找回,通常数据操作中用delete
TRUNCATE TABLE oder; --一次性删除,找不回
DELETE FROM oder WHERE o_id = 1004;
--复制表
CREATE TABLE oder2 AS SELECT * FROM oder; --复制建表,不复制约束
--复制表,不复制数据
CREATE TABLE oder3 AS SELECT * FROM oder WHERE 1=2;
--insert into ... select ... from 批量的添加数据
INSERT INTO oder3 SELECT * FROM oder WHERE o_id = 1004;
SELECT * FROM oder3;
--复制表不复制数据
CREATE TABLE emp2 AS SELECT * FROM emp WHERE 1 = 2;
--批量添加数据到复制表中
INSERT INTO emp2(empno,ename,job,hiredate,sal,comm,deptno)
SELECT empno,ename,job,hiredate,sal,comm,deptno FROM emp
WHERE empno>7900;
--删除原表数据
DELETE FROM emp WHERE empno > 7900;
/*
3. 运算符
3.1算术运算符: *, /
+, -
3.2连接运算符:||
3.3比较运算符:>, >=, <, <=, <>(!=)
3.4特殊比较运算符:
is[not] null,[not] like,[not] in
[not] between ... and
3.5逻辑运算符:
not
and
or
*/
SELECT ename,job,sal*6.35-sal*6.35*0.1 FROM emp;
-- || 连接运算符
SELECT ename||'在'||job||'工作岗位上',hiredate FROM emp;
-- =,<>(!=)
SELECT * FROM emp WHERE job = 'MANAGER';
SELECT * FROM emp WHERE job <> 'MANAGER';
SELECT * FROM emp WHERE job != 'MANAGER';
-- is (数据库中 '' 相当于 NULL)
-- 查询有提成的员工
SELECT * FROM emp WHERE comm IS NULL;
-- 查询没有提成的员工
SELECT * FROM emp WHERE comm IS NOT NULL;
-- in 是否在列表范围
-- 查询工作岗位是经理或者办事员的员工
SELECT * FROM emp WHERE job = 'MANAGER' OR job = 'CLERK';
SELECT * FROM emp WHERE job IN ('MANAGER','CLERK');
-- 查询工作岗位 不 是经理或者办事员的员工
SELECT * FROM emp WHERE job NOT IN ('MANAGER','CLERK');
-- like 模糊查询 通配符'%'表示任意个数的任意字符, '_'表示单个的任意字符
--查询名字中包含有‘A’的员工
SELECT * FROM emp WHERE ename LIKE '%A%';
--查询名字中第二个字符为‘A’的员工
SELECT * FROM emp WHERE ename LIKE '_A%';
-- not like
SELECT * FROM emp WHERE ename NOT LIKE '%A%';
-- between ... and 取值范围
-- 查询工资在1000到2000之间的员工
SELECT * FROM emp WHERE sal BETWEEN 1000 AND 2000;
SELECT * FROM emp WHERE sal >= 1000 AND sal<=2000;
-- 查询入职日期在1981 - 1982 之间的员工
SELECT * FROM emp WHERE to_char(hiredate,'yyyy') BETWEEN '1981' AND '1982';
SELECT * FROM emp WHERE sal NOT BETWEEN 1000 AND 2000;
SELECT * FROM emp WHERE sal < 1000 OR sal > 2000;
-- not, and , or
SELECT * FROM emp WHERE sal <1000 OR sal > 2000;
SELECT * FROM emp WHERE sal >1000 AND sal < 2000;
--查询工资在1000 到2500 之间的经理
SELECT * FROM emp WHERE sal >= 1000 AND sal <= 2000 AND job = 'MANAGER';
--查询工资不在1000 到2500 之间的经理
SELECT * FROM emp WHERE (sal < 1000 OR sal > 2000) AND job = 'MANAGER';