orale培训教材包括了所有的sql说明和实例

源代码在线查看: script_67注释.txt

软件大小: 30547 K
上传用户: maple_78
关键词: orale sql 培训教材
下载地址: 免注册下载 普通下载 VIP

相关代码

				---------- not_null.txt ----------
				
				create table sm_emp_null
				(EmpID char(10) primary key,
				Name   varchar2(10) NOT NULL,
				salary number(8,2) NOT NULL,
				TelNo  char(8));
				
				
				insert into sm_emp_null values('000000001','Tom',100,Null);
				insert into sm_emp_null values('000000002',null,100,Null);
				
				
				
				
				
				---------- unique.txt ----------
				/*
				 * 范例名称:UNIQUE
				 * 文件名称:unique.txt
				 */
				--什么含义呢?认为相同姓名,雇佣日期的雇员是同一个人,不再输入
				--雇员,id,姓,名,雇佣日期
				create table plsql101_person(
				person_code varchar2(3),
				first_name varchar2(15),
				last_name varchar2(20),
				hire_date date);
				
				ALTER TABLE plsql101_person 
				ADD CONSTRAINT person_unique UNIQUE (
				     first_name,
				     last_name,
				     hire_date
				     )
				;
				
				
				INSERT INTO plsql101_person VALUES (
				     '01', '张', '飞', '01-6月-03');
				
				--第二条如何呢?
				INSERT INTO plsql101_person VALUES (
				     '02', '张', '飞', '01-6月-03');
				
				
				
				---------- check.txt ----------
				/*
				 * 范例名称:CHECK
				 * 文件名称:check.txt
				 */
				
				--工资必须				CREATE TABLE sm_emp_check(
				empid  VARCHAR2(3),
				name   VARCHAR2(10),
				salary NUMBER(8,2)  CHECK (salary				
				
				INSERT INTO sm_emp_check VALUES('001', 'JACK', 100);
				INSERT INTO sm_emp_check VALUES('002', 'JACK2', 101);
				INSERT INTO sm_emp_check VALUES('003', 'JACK3', 10000);
				
				
				
				
				--练习结果:
				CREATE TABLE sm_emp_check(
				empid  VARCHAR2(3),
				name   VARCHAR2(10),
				salary NUMBER(8,2)  CHECK (salary >100 and salary				INSERT INTO sm_emp_check VALUES('001', 'JACK', 100);
				INSERT INTO sm_emp_check VALUES('002', 'JACK2', 101);
				INSERT INTO sm_emp_check VALUES('003', 'JACK3', 10000);
				INSERT INTO sm_emp_check VALUES('003', 'JACK3', null);
				
				--采购日期必须在2000-06-30以后
				ALTER TABLE plsql101_purchase 
				ADD ( CONSTRAINT reasonable_date 
				CHECK(purchase_date IS NOT NULL
				      AND TO_CHAR(purchase_date, 'YYYY-MM-DD') >= '2000-06-30'
				     )
				    )
				;
				
				INSERT INTO plsql101_purchase VALUES (
				     'Small Widget', 'GA', '28-2月-00', 10);
				
				
				
				---------- constraint_all.txt ----------
				/*
				 * 范例名称:CONSTRAINT综合练习
				 * 文件名称:constraint_all.txt
				 */
				
				 --清除plsql101_product的约束
				 alter table plsql101_product drop constraint positive_quantity;
				 alter table plsql101_product drop constraint valid_price;
				 alter table plsql101_product drop constraint reasonable_date
				
				
				
				
				 名称  产品库存表  :plsql101_product                               
				 ------------------------------------------------
				 PRODUCT_NAME                           产品名称
				 PRODUCT_PRICE                          产品单价
				 QUANTITY_ON_HAND                       库存数
				 LAST_STOCK_DATE                        最后进货日期
				
				--要求产品单价在0--10000,且必须确定。
				ALTER TABLE plsql101_product ADD ( 
				     CONSTRAINT valid_price CHECK(
				          product_price IS NOT NULL 
				          AND
				          product_price BETWEEN 0 AND 99
				          )
				     )
				;
				
				--要求产品库存〉0,且必须有确定值。
				ALTER TABLE plsql101_product ADD ( 
				     CONSTRAINT positive_quantity CHECK(
				          quantity_on_hand IS NOT NULL
				          AND
				          quantity_on_hand >=0
				          )
				     )
				;
				
				--要求产品最后进货日在2001/12/31以后
				ALTER TABLE plsql101_product ADD ( 
				     CONSTRAINT reasonable_date CHECK(
				          TO_CHAR(last_stock_date, 'YYYY-MM-DD') >= '2001-12-31'
				          )
				     )
				;
				
				INSERT INTO plsql101_product VALUES (
				     'Small Widget', NULL, 1, '28-2月-02');
				--price是null
				
				
				--price>99
				INSERT INTO plsql101_product VALUES (
				     'Small Widget', 99.5, 1, '28-2月-02');
				
				INSERT INTO plsql101_product VALUES (
				     'Small Widget', 1.95, -5, '28-2月-02');
				
				INSERT INTO plsql101_product VALUES (
				     'Small Widget', 1.95, 1, '30-10月-2001');
				
				--测试null是否可以输入last_stock_date。
				INSERT INTO plsql101_product VALUES (
				     'Anodized Framifier', 49, 5, NULL)
				;
				
				
				-- 练习: 要求产品最后采购日在2000-06-30以后:-----------!!!不用!-----------
				ALTER TABLE plsql101_purchase ADD ( 
				     CONSTRAINT reasonable_date CHECK(
				          purchase_date IS NOT NULL
				          AND
				          TO_CHAR(purchase_date, 'YYYY-MM-DD') >= '2000-06-30'
				          )
				     )
				;
				
				INSERT INTO plsql101_purchase VALUES (
				     'Small Widget', 10, '28-2月-00', 'GA');
				
				-- 练习: 要求产品最后进货日在2001/12/31以后,
				ALTER TABLE plsql101_product ADD ( 
				     CONSTRAINT reasonable_stock_date CHECK(
				          TO_CHAR(last_stock_date, 'YYYY-MM-DD') >= '2001-12-31'
				          )
				     )
				;
				--测试null是否可以输入。
				INSERT INTO plsql101_product VALUES (
				     'Anodized Framifier', 49, 5, NULL)
				;
				
				INSERT INTO plsql101_product VALUES (
				     'Spring-Loaded Pit Puller', 49, 5, '30-DEC-01')
				;
				----------------------------------------------------------------------- 
				
				---------- disable_enable.txt ----------
				/*
				 * 范例名称:启用和禁止已有的约束条件
				 * 文件名称:disable_enable.txt
				 */
				
				--如已建立reasonable_date constraint则不执行!
				ALTER TABLE plsql101_product ADD ( 
				     CONSTRAINT reasonable_date CHECK(
				          TO_CHAR(last_stock_date, 'YYYY-MM-DD') >= '2001-12-31'
				          )
				     )
				;
				
				
				INSERT INTO plsql101_product VALUES (
				     'Red Snaphoo', 1.95, 10, '30-12月-01')
				;
				
				ALTER TABLE plsql101_product DISABLE CONSTRAINT reasonable_date;
				
				INSERT INTO plsql101_product VALUES (
				     'Red Snaphoo', 1.95, 10, '30-12月-01')
				;
				
				ALTER TABLE plsql101_product ENABLE CONSTRAINT reasonable_date;
				--ERROR 位于第 1 行:
				--ORA-02293: 无法验证 (SCOTT.REASONABLE_DATE) - 违反检查约束条件
				--已经在table 有错误数据。rollbak可以吗?
				
				UPDATE plsql101_product 
				SET    last_stock_date = '31-12月-01' 
				WHERE  last_stock_date = '30-12月-01';
				
				ALTER TABLE plsql101_product ENABLE CONSTRAINT reasonable_date;
				
				
				
				---------- alter_null.txt ----------
				/*
				 * 范例名称:更改和删除已有的约束条件
				 * 文件名称:alter_null.txt
				 */
				
				ALTER TABLE plsql101_person MODIFY (first_name NULL);
				
				/*
				--雇员,id,姓,名,雇佣日期
				create table plsql101_person(
				person_code varchar2(3),
				first_name varchar2(15),
				last_name varchar2(20),
				hire_date date);
				*/
				--是什么实际含义?必须要求姓,名都知道!不许李某
				ALTER TABLE plsql101_person MODIFY (first_name NOT NULL);
				
				ALTER TABLE plsql101_person MODIFY (last_name NULL);
				
				
				
				---------- drop_constraint.txt ----------
				/*
				 * 范例名称:更改和删除已有的约束条件
				 * 文件名称:drop_constraint.txt
				 */
				 
				INSERT INTO plsql101_product VALUES (
				     'Blue Snaphoo', 1.95, 10, '30-12月-01')
				;
				
				ALTER TABLE plsql101_product DROP CONSTRAINT reasonable_date;
				
				INSERT INTO plsql101_product VALUES (
				     'Blue Snaphoo', 1.95, 10, '30-12月-01')
				; 
				
				---------- primary_key.txt ----------
				/*
				 * 范例名称:表的主键
				 * 文件名称:primary_key.txt
				 */
				
				--首先需运行insert_data.sql准备数据
				--@d:\insert_data.sql
				
				ALTER TABLE plsql101_product
				ADD PRIMARY KEY (product_name);
				
				ALTER TABLE plsql101_person
				ADD PRIMARY KEY (person_code);
				
				ALTER TABLE plsql101_purchase
				ADD PRIMARY KEY (product_name,
				                 salesperson,
				                 purchase_date
				                 )
				;
				
				--when create table
				CREATE TABLE plsql101_product2 (
				     product_name     VARCHAR2(25) PRIMARY KEY,
				     product_price    NUMBER(4,2),
				     quantity_on_hand NUMBER(5,0),
				     last_stock_date  DATE
				     )
				;
				
				CREATE TABLE plsql101_product3 (
				     product_name     VARCHAR2(25),
				     product_price    NUMBER(4,2),
				     quantity_on_hand NUMBER(5,0),
				     last_stock_date  DATE,
				     PRIMARY KEY (product_name)
				     )
				;
				
				
				
				---------- foreign_key.txt ----------
				/*
				 * 范例名称:FOREIGN KEY
				 * 文件名称:foreign_key.txt
				 */
				
				--必须首先执行primary_key.txt
				
				ALTER TABLE plsql101_purchase
				ADD CONSTRAINT plsql101_purchase_fk_product
				          FOREIGN KEY (product_name) 
				          REFERENCES plsql101_product;
				
				
				--当REFERENCES 的表没有PK
				--ERROR 位于第 4 行:
				--ORA-02268: 引用的表不具有主关键字
				
				
				--再次建立
				ALTER TABLE plsql101_purchase
				ADD CONSTRAINT plsql101_purchase_fk_product
				          FOREIGN KEY (product_name) 
				          REFERENCES plsql101_product;
				
				
				--子表中有,父表中没有的纪录
				select plsql101_product.product_name,plsql101_purchase.product_name
				from plsql101_product,plsql101_purchase
				where  plsql101_product.product_name(+)=plsql101_purchase.product_name
				
				--删除子表孤儿纪录,再次建立
				delete from plsql101_purchase where product_name='Round Snaphoo';
				
				ALTER TABLE plsql101_purchase
				ADD CONSTRAINT plsql101_purchase_fk_product
				          FOREIGN KEY (product_name) 
				          REFERENCES plsql101_product;
				--ok
				
				
				/***************************************************************
				-- 练习: 也可以用update改变子表(plsql101_purchase)的值 creating the FK constraint
				
				UPDATE plsql101_purchase
				SET    product_name = 'Round Chrome Snaphoo'
				WHERE  product_name = 'Round Snaphoo';
				
				ALTER TABLE plsql101_purchase
				ADD CONSTRAINT plsql101_purchase_fk_product
				          FOREIGN KEY (product_name) 
				          REFERENCES plsql101_product;
				**************************/
				
				
				-- 练习: Attempting to enter a child record without a matching 
				-- 插入子表(plsql101_purchase)
				INSERT INTO plsql101_purchase VALUES (
				     'Small Widgee', 'CA', '17-7月-03', 1)
				;
				--ERROR 位于第 1 行:
				--ORA-02291: 违反完整约束条件 (SCOTT.PLSQL101_PURCHASE_FK_PRODUCT) - 未找到父项关键字
				--为什么呢?Small Widgee与Small Widget不同
				
				-- Corrected version
				
				--子表insert的纪录必须满足fk约束,在父表对应字段有相应值
				INSERT INTO plsql101_purchase VALUES (
				     'Small Widget', 'CA', '17-7月-03', 1)
				;
				
				--
				UPDATE plsql101_purchase
				SET    product_name = 'Small Widget_11'
				WHERE  product_name = 'Small Widget';
				
				
				ERROR 位于第 1 行:
				ORA-02291: 违反完整约束条件 (SCOTT.PLSQL101_PURCHASE_FK_PRODUCT) - 未找到父项关键字
				
				
				UPDATE plsql101_purchase
				SET    product_name = 'Round Chrome Snaphoo'
				WHERE  product_name = 'Small Widget';
				--OK.select * from plsql101_PRODUCT,product_name字段有Round Chrome Snaphoo
				
				
				-- 为plsql101_purchase建立FOREIGN KEY ,通过salesperson字段
				--与plsql101_person建立关联
				ALTER TABLE plsql101_purchase
				ADD CONSTRAINT plsql101_purchase_fk_person
				          FOREIGN KEY (salesperson)
				          REFERENCES plsql101_person;
				
				
				
				---------- multi_table.txt ----------
				/*
				 * 范例名称:多表查询
				 * 文件名称:multi_table.txt
				 */
				
				--重新生成数据,运行insert_data.txt
				名称   plsql101_product 商品信息表                 
				--------------------
				PRODUCT_NAME         商品名称  
				PRODUCT_PRICE        商品单价  
				QUANTITY_ON_HAND     商品库存  
				LAST_STOCK_DATE      商品最后采购日期  
				
				名称      采购信息表plsql101_purchase                     
				----------------------------
				PRODUCT_NAME        商品名称           
				SALESPERSON         经手人(编号)           
				PURCHASE_DATE       采购日期           
				QUANTITY            采购数量           
				
				 名称   人员表plsql101_person                
				 --------------------
				 PERSON_CODE        人员编号    
				 FIRST_NAME         姓   
				 LAST_NAME          名    
				 HIRE_DATE          雇佣日期    
				
				--查询采购信息和对应经手人的各人信息:图形分析:补充3_product.ppt
				
				SELECT plsql101_purchase.product_name,
				       plsql101_person.last_name,
				       plsql101_person.first_name,
				       plsql101_purchase.quantity
				FROM   plsql101_purchase,
				       plsql101_person
				WHERE  plsql101_person.person_code = plsql101_purchase.salesperson
				; 
				  
				  
				  
				---------- multi_table_j.txt ----------
				/*
				 * 范例名称:多表查询的笛卡尔积
				 * 文件名称:multi_table_j.txt
				 */
				
				SELECT plsql101_purchase.product_name,
				       plsql101_person.last_name,
				       plsql101_person.first_name,
				       plsql101_purchase.quantity
				FROM   plsql101_purchase,
				       plsql101_person
				;
				
				
				
				---------- join.txt ----------
				/*
				 * 范例名称:JOIN
				 * 文件名称:join.txt
				 */
				
				--采购的商品,此商品的单价,采购总量,对应经手人是谁:
				--
				SELECT plsql101_purchase.product_name,
				       plsql101_product.product_price,
				       plsql101_purchase.quantity,
				       plsql101_person.last_name
				FROM   plsql101_product,
				       plsql101_person,
				       plsql101_purchase
				WHERE  plsql101_product.product_name = plsql101_purchase.product_name
				       and
				       plsql101_person.person_code = plsql101_purchase.salesperson
				;
				
				-- 采购日期,数量,商品最后(上次)采购日期,对应经手人是谁:
				SELECT plsql101_purchase.purchase_date,
				       plsql101_purchase.quantity,
				       plsql101_product.last_stock_date,
				       plsql101_person.last_name
				FROM   plsql101_product,
				       plsql101_person,
				       plsql101_purchase
				WHERE  plsql101_product.product_name = plsql101_purchase.product_name
				       and
				       plsql101_person.person_code = plsql101_purchase.salesperson
				;
				
				
				
				---------- outer_join.txt ----------
				/*
				 * 范例名称:外部连接outer join
				 * 文件名称:outer_join.txt
				 */
				
				SELECT product_name FROM plsql101_product ORDER BY product_name;
				
				--注意:可以在from 语句中为表名 指定别名。
				--在select,where中 用  别名.字段名 代替 表名.字段名
				--如: plsql101_product  prod  :为plsql101_product表指定别名为prod
				
				--商品名称,此商品的单价,采购日期,数量:采购的详细信息
				SELECT prod.product_name,
				       prod.product_price,
				       purc.purchase_date,
				       purc.quantity
				FROM   plsql101_product  prod,
				       plsql101_purchase purc
				WHERE  prod.product_name = purc.product_name
				ORDER BY prod.product_name;
				
				--注意:(+)在字段后面:
				--商业含义:商品名称,此商品的单价,采购日期,数量 
				--以及在商品表中但从未采购过的商品
				SELECT prod.product_name,
				       prod.product_price,
				       purc.purchase_date,
				       purc.quantity
				FROM   plsql101_product  prod,
				       plsql101_purchase purc
				WHERE  prod.product_name = purc.product_name (+)
				ORDER BY prod.product_name;
				
				
							

相关资源