SQL基础语句

0 篇文章 0 订阅
--创建stuInfo 表
create Table stuInfo(
    stuName Varchar2(20) Not null,
    stuId number(30)
)
--向 stuInfo 添加一个列
alter Table stuInfo add(
    stuNo number(20)
)
--将 stuInfo 删除一个列
alter Table stuInfo drop(
    stuNo
)
--删除表
Drop Table stuInfo;
-----------------------------------------------------------------------
select * from stuinfo
--插入stuInfo 表数据 
insert into stuInfo values('晓昊','001')
insert into stuInfo values('晓昊','078')
insert into stuInfo values('晓东','036')
insert into stuInfo values('晓昊','056')
--选择无重复的行
select distinct s.stuname from stuInfo s   --distinct
--使用别名
select s.stuname as "员 工 编 号" from stuInfo s order by s.stuid desc
--复制表
create Table stuInfo2 as select * from stuInfo   --复制表,然后查询,其数据会全部过来
create Table stuInfo3 as select * from stuInfo where 1=3 --当他不成立的时候,只会创建表的结构,没有数据
--统计效率
select count(*) from stuInfo s group by s.stuname,s.stuid having(count(s.stuname||s.stuid)<2)
select count(1) from stuInfo s  --两者的结果集一样,前者的效率比后者低
--查询rowID
select s.*,s.rowid from stuInfo s
--去除不重复的数据  重复大于1个的 ^_^
select  s.stuname,s.stuid from stuInfo s group by s.stuname,s.stuid having(count(s.stuname||s.stuname)>1)
--查询当前用户所有表数量大于100 万表的信息
select * from user_all_tables a where a.num_rows>10000000
--建立一个还原点
savepoint a;
--还原到建立的那个还原点
rollback to savepoint a;
------------------------------------------------------------------------
--创建序列
create sequence mysequence
       start with 10 --从10开始
       increment by 5 --间隔为5
       maxvalue 1000 --最大值
       nocycle --不循环
       cache 30;--缓存30个序列


insert into empt values(mysequence.nextval,sys_guid()) 
select * from empt


select mysequence.currval from dual;--当前结尾的位置


--删除序列
drop sequence mysequence;


select sys_guid() from dual;
-------------------------------------------------------------------------
select * from scott.emp;
--创建一个同义词  相当于加了一层保护壳
create or replace synonym myhack for scott.emp
select * from myhack
--删除同义词
drop synonym myhack


--创建索引
create index newindex on empt(id) --位图索引


create index newindex on empt(id) reverse --反向索引
--------------------------------------------------------------------------
DECLARE  --声明部分
   v_name VARCHAR2(20);  --变量
   v_rate NUMBER(7,2);
   c_rate_incr Constant NUMBER(7,2):=1.10;  -- 常量  赋初始化值的方式:  (:=)
   e_comm_is_null EXCEPTION;
BEGIN    --执行部分
   SELECT ename,sal*c_rate_incr INTO v_name,v_rate FROM emp WHERE empno='7788';
   IF v_name IS NULL THEN
     RAISE e_comm_is_null;--触发异常 raise关键字+ 异常处理名
     END IF;
   v_name:='SCOTT';
   DBMS_OUTPUT.put_line('姓名:'||v_name||'工资:'||v_rate);
EXCEPTION  --声明异常处理
  WHEN NO_DATA_FOUND THEN  --如果出现NO_DATA_FUOUND
     DBMS_OUTPUT.PUT_LINE('没有数据'); --那么显示“没有数据”
  WHEN e_comm_is_null THEN
     DBMS_OUTPUT.PUT_LINE('名字为空');
  WHEN OTHERS THEN --其他异常处理。
     DBMS_OUTPUT.PUT_LINE('其他异常,请联系管理员');
END;


select * from emp where empno='7788'for update ;


DECLARE
       v_empno emp.empno%TYPE  :=7788; --单列
       v_emprow emp%ROWTYPE;--小南瓜
BEGIN
        SELECT * INTO v_emprow FROM emp WHERE emp.empno=v_empno;
        DBMS_OUTPUT.PUT_LINE('姓名:'||v_emprow.ename||'工资:'||v_emprow.sal);


END;
--【判断控制语句】
IF<布尔表达式> THEN
      执行方法
END IF;
---------IF ELSE--------------------
IF<布尔表达式> THEN
      执行方法1
ELSE
     执行方法2
END IF;
-- IF 后面跟的一定是布尔表达式
-- 有IF 一定有THEN,THEN 后面跟的是执行方法
-- 一定要有END结束
-- ELSIF 【没有E】
-----------嵌套ELSIF   (注意没有E )-------------------------
IF<布尔表达式> THEN
            执行方法1
    ELSIF <布尔表达式> THEN
            执行方法2
    ELSIF <布尔表达式> THEN
            执行方法3
    ELSE
            执行方法4
END;
------------【CASE】------------
CASE 条件表达式
  WHEN 条件表达式1 THEN
    执行方法
  WHEN 条件表达式2 THEN
    执行方法
  END CASE;
--【循环控制语句】
LOOP
  要执行的语句  
  EXIT WHEN<条件>  --满足此条件退出。
END LOOP;
----------WHILE 循环----------------
  WHILE <布尔表达式> LOOP  --布尔表达式控制循环退出
     要执行的语句   --一般在循环中需要改变布尔表达式的值以便于退出循环
  END LOOP;
----------FOR 循环----------------
FOR 循环计数器 IN 范围 LOOP
  要执行的语句
  END LOOP;
--------------------------------游标---------------------------------------
--游标
DECLARE
  v_name emp.ename%type; --定义一个列,保证类型一致
  v_sal emp.sal%type;
  CURSOR EMP_cursor IS --声明一个游标
     SELECT ename,sal FROM emp;
BEGIN
  OPEN EMP_cursor;--打开游标
  LOOP
    FETCH EMP_cursor INTO v_name,v_sal;--提取游标(关键字:FETCH)并将游标中的数据放入变量中
    EXIT WHEN EMP_cursor%NOTFOUND;--显示游标属性,通过此属性判断是否退出循环
    DBMS_OUTPUT.PUT_LINE('第'||EMP_cursor%ROWCOUNT||'个雇员'||v_name||v_sal);
  END LOOP;
  CLOSE EMP_cursor;--关闭游标
END;
----------------------------存储过程------------------------------------
--存储过程 (只声明类型,不声明长度)
CREATE OR REPLACE PROCEDURE add_emp(
   eno NUMBER,
   e_name VARCHAR2,
   ejob VARCHAR2 DEFAULT 'CLERK'
)
 IS
BEGIN
  INSERT INTO emp(empno,ename,job) VALUES (eno,e_name,ejob);
  
  
END;
select * from emp
EXECUTE add_emp(111,'test','222');


BEGIN
  add_emp(1121,'test','1131');


  END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值