orcale中的简单SQL语句用法

本文详细介绍了SQL语言相关知识。数据操作语言(DML)包含SELECT、UPDATE等操作;数据定义语言(DDL)有CREATE、DROP等,还涉及约束、索引操作;PL/SQL是对SQL的拓展,介绍了其句法、变量声明、触发器(表级和行级)等内容,并给出了相应示例。
数据操作语言,简称DML

包括:SELECT(查询)、UPDATE(更新)、INSERT(插入)、DELETE(删除)
用法:
(1.)SELECTSELECT用法
(2.)UPDATE:UPDATE 表名 SET 要更新的内容设置 WHERE 筛选要更新的字段
demo:UPDATE emp SET empno=7054 WHERE empno=7788;
(3.)INSERT:INSERT INTO 表名(字段1,字段2,…) VALUES (val1,val2…)
demo:INSERT INTO teacher VALUES(224,‘男’,25,5000) ;
(4.)DELETE:DELETE FROM 表名 WHERE 要删除的条件筛选
demo:DELETE FROM emp WHERE empno=7788;

数据定义语言,简称DDL

包括:CREATE(创建)、DROP(删除)、RENAME(重命名)
CREATTE:
1.创建表格
CREATE TABLE teacher(
tno NUMBER(3) NOT NULL UNIQUE,
tsex VARCHAR2(10),
tage NUMBER(2),
tsal NUMBER(7));
插入数据
INSERT INTO teacher VALUES(224,‘男’,25,5000) ;
INSERT INTO teacher VALUES(256,‘男’,30,15000) ;
INSERT INTO teacher VALUES(222,‘女’,32,15000) ;
INSERT INTO teacher VALUES(222,‘男’,22,6000);
INSERT INTO teacher(tsex,tage,tsal) VALUES(‘女’,25,5000) ;
非空约束:NOT NULL
唯一约束:UNIQUE
两者结合:主键约束:PRIMARY KEY 保证数据
2.约束
创建主键约束句法:CONSTRAINT + 自定义键名(一般以pk_开头) + PRIMARY KEY(被约束字段名称)
创建CHECK约束句法:CONSTRAINT + 自定义键名(一般以ck_开头) + CHECK(被检查的字段的条件)
CREATE TABLE teacher(
tname number(2) ,
tage number(2),
CONSTRAINT pk_tname PRIMARY KEY(tname),
CONSTRAINT ck_tage CHECK(tage BETWEEN 1 AND 100));
创建外键约束句法:CONSTRAINT + 自定义键名(一般以fk_开头)+FOREIGN KEY(被约束的字段)+REFERENCES +父表(父表中需要约束子表的字段)
create table sc(
sno varchar2(10),
cno varchar2(10),
score number(4,2),
CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno),
CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno)
);
3.约束的联级操作:联级删除、联级更新
删除表格或者更新表格时,若其存在字表(从表),需使用到级联删除和级联更新:
删除表格:
方法一:先把子表数据删除,再删除父表的数据;
方法二:使用级联删除,直接删除父表的数据即可,子表数据自动删除,但要在子表创建外键约束时使用ON DELETE CASCADE
create table sc(
sno varchar2(10),
cno varchar2(10),
score number(4,2),
CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno) ON DELETE CASCADE,
CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno) ON DELETE CASCADE
);
更新表格:
方法一:先更新子表数据为NULL,再更新父表数据,最后将子表数据更新为和父表一致的新字段;
UPDATE sc SET sno=NULL WHERE sno=‘s101’;
UPDATE student SET sno=‘s111’ WHERE sno=‘s101’;
UPDATE sc SET sno=‘S111’ WHERE sno IS NULL;
方法二:使用级联更新(Orcale不支持,需使用触发器),使用ON UPDATE CASCADE
create table sc(
sno varchar2(10),
cno varchar2(10),
score number(4,2),
CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno) ON UPDATE CASCADE,
CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno) ON UPDATE CASCADE
);
4.索引的创建和删除
CREATE INDEX 自定义索引名 ON (数据表)字段;
DROP INDEX 索引名;

PL/SQL:过程化SQL语言,是对SQL的拓展

句法
DECLARE—声明变量
BEGIN —表示开始
NULL; ----过程语句
END; ---- 结束
/

说明:
开启打印功能:
SET SERVEROUTPUT ON;
输出语句:类似java的“+”拼接,在plsql中为“||”
DBMS_OUTPUT.put_line()
DBMS_OUTPUT.put_line(‘hello’||‘world’)

声明变量:DECLARE关键字
例子:键盘输入学生编号,输出学生姓名
DECLARE
v_empno NUMBER;
v_ename VARCHAR2(10);
DEGIN
DBMS_OUTPUT.put_line(‘输入编号:’);
v_empno:=&empno;
SELECT ename INTO v_ename
FROM emp
WHERE empno=v_empno;
DBMS_OUTPUT.put_line(‘学生叫’||v_ename)
END;
/

表级触发器:在一个DML语句中只触发一次,例如在一个INSERT语句中插入500条数据,则只触发一次,在行级触发器就会触发500次
句法:CREATE OR REPLACE TRIGGER 自定义名 触发条件(BEFORE…)ON 作用表名
例子:周四不能修改和更新数据
CREATE OR REPLACE TRIGGER emp_trigger
BEFORE INSERT OR UPDATE
ON emp
DECLARE
v_date VARCHAR2(50);
BEGIN
SELECT TO_CHAR(SYSDATE,‘day’) INTO v_date FROM dual;
IF v_date=‘星期四’ THEN
DBMS_OUTPUT.put_line(‘周四不许上班’);
END IF;
END;
/
一条INSERT 增加多条数据,此时只触发一次
INSERT INTO emp(empno,sal)
SELECT 1006,5000 FROM dual union
SELECT 1007,5000 FROM dual union
SELECT 1008,6000 FROM dual union
SELECT 1009,5000 FROM dual ;

行级触发器:
CREATE OR REPLACE TRIGGER 自定义名 触发条件(BEFORE…)ON 作用表名 FOR EACH ROW
例子:
增加员工信息的薪资在1000-5000之间
CREATE OR REPLACE TRIGGER emp_trigger
BEFORE INSERT
ON emp FOR EACH ROW
BEGIN
IF :new.sal>5000 OR :new.sal<1000
THEN RAISE_APPLICATION_ERROR(-20001,‘薪资不在允许范围’);
END IF;
END;
/

INSERT INTO emp(empno,sal) VALUES(1006,6000);
INSERT INTO emp(empno,sal) VALUES(1006,6000);
INSERT INTO emp(empno,sal) VALUES(1006,6000);
INSERT INTO emp(empno,sal) VALUES(1006,7000);
利用行级触发器实现级联更新
CREATE OR REPLACE TRIGGER dept_trigger
BEFORE UPDATE OF deptno
ON dept
FOR EACH ROW
BEGIN
UPDATE emp SET deptno=:new.deptno WHERE deptno=:old.deptno;
END;
/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值