📄 script_62.txt
字号:
---------- chap02_create.txt ----------
/*
* 范例名称:建立一个表
* 文件名称:chap02_create.txt
*/
drop table test_1;
CREATE TABLE test_1 (
first_name CHAR(15),
last_name CHAR(20)
)
;
---------- chap02_insert.txt ----------
/*
* 范例名称:插入记录
* 文件名称:chap02_insert.txt
*/
INSERT INTO test_1 VALUES ('张', '飞');
INSERT INTO test_1 VALUES ('关', '羽');
---------- chap02_delete.txt ----------
/*
* 范例名称:删除表
* 文件名称:chap02_delete.txt
*/
delete from test_1;
select * from test_1;
---------- chap02_命名.txt ----------
/*
* 范例名称:表和列的命名准则
* 文件名称:chap02_命名.txt
*/
drop table sm_access;
create table access
(EmpID char(10) ,
access char(8));
ERROR 位于第 1 行:
ORA-00903: 无效表名
create table sm_access
(EmpID char(10) ,
access char(8));
ERROR 位于第 3 行:
ORA-00904: 无效列名
create table sm_access
(EmpID char(10) ,
sm_access char(8));
---------- CreateTable_sm_emp_sex.txt ----------
/*
* 范例名称:建立sm_emp_sex表
* 文件名称:CreateTable_sm_emp_sex.txt
*/
drop table sm_emp_sex;
create table sm_emp_sex
(EmpID char(10) ,
Name varchar2(10),
salary number(8,2),
TelNo char(8),
sex char(2));
insert into SM_EMP_sex values
('000000001','张飞',100,'62613546','男');
---------- chap02_char_vchar.txt ----------
/*
* 范例名称:建立更复杂的表
* 文件名称:chap02_char_vchar.txt
*/
CREATE TABLE SM_EMP_sex2 (
name VARCHAR2(20),
sex CHAR(1)
)
;
INSERT INTO SM_EMP_sex2 VALUES ('Tom', 'M');
INSERT INTO SM_EMP_sex2 VALUES ('Jane', 'F');
--INSERT INTO SM_EMP_sex2 VALUES ('Jane', '女');会怎样?
SELECT * FROM SM_EMP_sex2;
DROP TABLE SM_EMP_sex2;
---------- chap02_char_number.txt ----------
/*
* 范例名称:复杂表操作
* 文件名称:chap02_char_number.txt
*/
create table sm_emp_salary(
name varchar3(10),
salary number(4,2));
--大家先预计一下结果
INSERT INTO sm_emp_salary VALUES ('Tom1', 1);
INSERT INTO sm_emp_salary VALUES ('Tom2', 2.5);
INSERT INTO sm_emp_salary VALUES ('Tom3', 50.75);
INSERT INTO sm_emp_salary VALUES ('Tom4', 99.99);
--大家再试试,总结一下
--INSERT INTO sm_emp_salary VALUES
('Tom4', 99.999);
--INSERT INTO sm_emp_salary VALUES
('Tom4', 9.999);
--INSERT INTO sm_emp_salary VALUES
('Tom4', 9.994);
--INSERT INTO sm_emp_salary VALUES ('Tom4', 100);
--INSERT INTO sm_emp_salary values('Tom1',99.994);结果如何?
--INSERT INTO sm_emp_salary values('Tom1',99.995);结果如何?
--INSERT INTO sm_emp_salary values('Tom1',98.995);结果如何?
SELECT * FROM sm_emp_salary;
--总结:
--小数部分四舍五入,整数不许超长
DROP TABLE sm_emp_salary;
---------- chap02_char_date.txt ----------
/*
* 范例名称:日期的表操作
* 文件名称:chap02_char_date.txt
*/
CREATE TABLE sm_emp_date (
name VARCHAR2(25),
birthday date
)
;
INSERT INTO sm_emp_date VALUES
('Tom1', '05-6月 -02');
drop table plsql101_purchase;
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25),
product_price NUMBER(4,2),
purchase_date DATE
)
;
INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, '5-11月-00');
--以下不再重复演示
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 2.5, '29-1月-01');
INSERT INTO plsql101_purchase VALUES
('Product Name 3', 50.75, '10-12月-02');
INSERT INTO plsql101_purchase VALUES
('Product Name 4', 99.99, '31-8月-03');
SELECT * FROM plsql101_purchase;
---------- CreateTable_sm_emp_NULL.txt ----------
/*
* 范例名称:Null字段的表的建立和操作,insert语句
* 文件名称:CreateTable_sm_emp_NULL.txt
*/
--先建立表,再在讲解 insert语句后,测试。
create table sm_emp_null
(EmpID char(10) NOT NULL,
Name varchar2(10) NOT NULL,
salary number(8,2) NOT NULL,
TelNo char(8) NULL);
--测试表的null字段,insert 语句
insert into sm_emp_null
(empid,name,salary,telno)
values('000000008','Tom',100,'62652092');
--字段列表值列表完全匹配
insert into sm_emp_null
(EmpID,Name,salary)
values('000000002','Tom',101);
--insert ok 因为有INSERT INTO TABLE (FIELD LIST)子句,NULL许可的字段可以不写值。
--自动插入null.
insert into sm_emp_null(EmpID,Name)
values('000000002','Tom');
ERROR 位于第 1 行:
ORA-01400: 无法将 NULL 插入
("SCOTT"."SM_EMP_NULL"."SALARY")
--not ok
--ERROR 位于第 1 行:
--ORA-01400: 无法将 NULL 插入 ("SYSTEM"."SM_EMP_NULL"."SALARY")
insert into sm_emp_null values
('000000001','Tom',100,Null);
insert into sm_emp_null values
('100000001','Tom',100,'65432189');
--insert ok。值列表包含所有字段的值时,
--可以省略字段列表
insert into sm_emp_null values
('000000001','Tom',100);
--not ok 因为没有INSERT INTO TABLE
(FIELD LIST)子句。即使是null,也不能省!
--ERROR 位于第 1 行:
--ORA-00947: 没有足够的值
---------- chap02_plsql101_null.txt ----------
/*
* 范例名称:Null的表操作
* 文件名称:chap02_plsql101_null.txt
*/
--如果已建立表,先drop
DROP TABLE plsql101_purchase;
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25) NOT NULL,
product_price NUMBER(4,2) NOT NULL,
purchase_date DATE
)
;
--purchase_date何时采购到可以不知道
---------- chap02_plsql101_null_insert.txt ----------
/*
* 范例名称:Null的表操作
* 文件名称:chap02_plsql101_null_insert.txt
*/
INSERT INTO plsql101_purchase VALUES ('Product Name 1', 1, NULL);
--必须首先执行chap02_plsql101_null.txt ,建立表plsql101_purchase的相应结构。
SELECT * FROM plsql101_purchase;
--not null的字段insert null,会如何?
INSERT INTO plsql101_purchase VALUES
(NULL, 2.5, '29-1月-01');
INSERT INTO plsql101_purchase VALUES
('Product Name 3', null, '10-12月-02');
INSERT INTO plsql101_purchase VALUES
(NULL, NULL, '31-8月-03');
SELECT * FROM plsql101_purchase;
--带有字段列表
INSERT INTO plsql101_purchase (product_name, product_price)
VALUES ('Product Name 2', 2.5);
INSERT INTO plsql101_purchase (product_name, product_price)
VALUES ('Product Name 3', 50.75);
--字段列表中字段顺序可以改变,只要与值列表一致。
INSERT INTO plsql101_purchase (product_price, product_name)
VALUES (99.99, 'Product Name 4');
SELECT * FROM plsql101_purchase;
---------- default.txt ----------
/*
* 范例名称:字段的default设定和插入数据
* 文件名称:default.txt
*/
--先建立表,再在讲解 insert语句后,测试。
--预计雇员户口所在地地址的大部分是在北京,可以把北京这个值作为这个字段的缺省值。
--将数字型列的默认值指定为零
create table sm_emp_default
(EmpID char(10) ,
Name varchar2(10) ,
salary number(8,2) default 0,
TelNo char(8) ,
city varchar2(50) default '北京');
insert into sm_emp_default (empid,name)
values('0000000001','Tom');
--两个default 值,一个null
insert into sm_emp_default (empid,name,salary)
values('0000000002','Tom2',100);
--没有给字段city提供数据,而这个字段有一个缺省值’北京’。
--在这种情况下,当新记录建立时会插入值’北京’。
insert into sm_emp_default
(empid,name,salary,telno)
values('0000000003','Tom3',199,'62652091');
insert into sm_emp_default
(empid,name,salary,telno,city)
values('0000000004','Tom4',199,'62652091','上海');
小结insert 与null default:参见小结_insert.ppt
---------- drop.txt ----------
/*
* 范例名称:删除表
* 文件名称:drop.txt
*/
drop table sm_access;
drop table test_1;
select * from tab;
desc tab;
select * from tab where tname='SM_EMP_NULL';
--SM_ACCESS不存在
select * from tab where tname='SM_ACCESS’;
---------- chap02_plsql101_EnglishDate_Err.txt ----------
/*
* 范例名称:日期的问题
* 文件名称:chap02_plsql101_EnglishDate_Err.txt
*/
desc sm_emp_date;
--以下两种方法插入日期类型err!
INSERT INTO sm_emp_date VALUES
('Tom2', '05-6-02');
INSERT INTO sm_emp_date VALUES
('Tom3', '05日-6月-02年');
INSERT INTO sm_emp_date VALUES
('Tom3', '05-6月-02');
DROP TABLE plsql101_purchase;
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25),
product_price NUMBER(4,2),
sales_tax NUMBER(4,2),
purchase_date DATE,
salesperson VARCHAR2(3)
)
;
INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, .08, '5-NOV-00', 'AB');
--ERROR 位于第 2 行:
--ORA-01843: 无效的月份
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 1, .08, '1日-8月-01', 'AB');
--ERROR 位于第 2 行:
--ORA-01861: 文字与格式字符串不匹配
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 1, .08, '1-8月-01年', 'AB');
--ERROR 位于第 2 行:
--ORA-01830: 日期格式图片在转换整个输入字符串之前结束
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 1, .08, '1-8-01', 'AB');
--ERROR 位于第 2 行:
--ORA-01843: 无效的月份
INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, .08, '1-8月-01', 'AB');
alter session set nls_language=american;
alter session set
nls_language='simplified chinese';
---------- select.txt ----------
/*
* 范例名称:select记录
* 文件名称:select.txt
*/
--改变字段的顺序,就可以改变选出的结果的顺序
select empid ,name from sm_emp_default;
select name ,salary from sm_emp_default;
select * from sm_emp_default;
---------- math.txt ----------
/*
* 范例名称:利用表中数据进行计算
* 文件名称:math.txt
*/
drop table shangpin;
create table shangpin
(name varchar(20),
price number(8,2),
shuliang number(3));
insert into shangpin values ('电视',100,3);
insert into shangpin values ('豆腐',1,30);
--总价格 =价格*数量
select name ,price*shuliang from shangpin;
--注意有几条结果
--总价格的10%
select name ,price*shuliang*0.1 from shangpin;
--练习.txt:一个更有商业含意的例子
--商品信息表
drop table sm_itemlist;
create table sm_itemlist
(
itemID char(5) ,--商品编号
itemname varchar(20) , --商品名称
tax number(6,2) , --营业税(按照销售价的百分比计算)
purchase_price number(8,2) , --购入价格
sale_price number(8,2) , --销售价格
amount number(4) , --库存数量
unit varchar(6) --商品单位
);
insert into sm_itemlist values('00001','TCL彩电',0.03,800,1000,20,'台');
insert into sm_itemlist values('00002','NEC彩电',0.03,900,1200,10,'台');
insert into sm_itemlist values('00003','联想电脑',0.05,9000,12000,10,'台');
insert into sm_itemlist values('00004','海尔电脑',0.05,8000,10000,10,'台');
--全部商品打8折,求出打折后各商品的价格
--求出各库存商品占用的资金
--求出各库存商品完全售出要交的税
--求出各库存商品完全售出的净利润
--求出各库存商品的利润率 = 利润 / 投资
---------- chap02_plsql101_math_null.txt ----------
/*
* 范例名称:利用表中数据进行计算
* 文件名称:chap02_plsql101_math_null.txt
*/
--null insert!对比前面的结果!
insert into sm_itemlist
values('00005','海尔电脑null',null,8000,10000,10,'台');
--全部商品打8折,求出打折后各商品的价格
select itemname , sale_price * 0.8 from sm_itemlist;
--见练习.txt
---------- chap02_plsql101_string.txt ----------
/*
* 范例名称:利用表中数据进行计算--文本表达式
* 文件名称:chap02_plsql101_string.txt
*/
--must after chap02_plsql101_math.txt
SELECT name || price || '元'
FROM shangpin;
SELECT name || price || '元 /(盒,台)'
FROM shangpin;
--结果不太好,
--这正是sm_itemlist表中有unit(商品单位)的好处。
--设计时要考虑。
insert into sm_itemlist values('00005','豆腐',0.01,1,1.2,100,'盒');
select itemname || sale_price
|| '元 / ' || unit from sm_itemlist;
---------- sm_emp_promote.txt ----------
/*
* 范例名称:插入多条记录
* 文件名称:sm_emp_promote.txt
*/
drop table sm_emp_promote;
create table sm_emp_promote
(PromEmpID char(10) ,
Name varchar2(10),
salary number(8,2)
);
--HOW???
--data prepare
--select * from sm_emp;
--insert into sm_emp(EmpID, name,salary,telno) values('000000003','刘备',1000,'67832324');
--insert into SM_EMP values('000000002','关羽',1000,'67832324');
insert into sm_emp_promote
(PromEmpID,Name,salary)
select EmpID,Name,salary
from sm_emp where Name in ('张飞','关羽','刘备');
select * from sm_emp_promote;
---------- chap02_plsql101_bieming.txt ----------
/*
* 范例名称:利用别名
* 文件名称:chap02_plsql101_bieming.txt
*/
SELECT name || price || '元' 单价
FROM shangpin;
SELECT name 商品, price || '元' 单价
FROM shangpin;
---------- sm_bieming.txt ----------
/*
* 范例名称:利用别名
* 文件名称:sm_bieming.txt
*/
SELECT empid 代号, name "姓 名" FROM sm_emp;
--为sm_itemlist商品表,指定单价别名
select itemname || sale_price || '元 / ' 单价 || unit from sm_itemlist;
--Error! 别名必须放在所选择项的最后,必须对应查询结果集中的一列。
--(itemname || sale_price || '元 / ')不为查询结果集中的一列,需拼上unit才是一列。
select itemname || sale_price || '元 / ' || unit 单价 from sm_itemlist;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -