数据库学习3-dml和序列

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. 删除数据操作

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'; 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值