一、理论题
1.SQL功能强大,但是概括起来,它可分成三组。
请分别写上所知道的命令或语句
DML
1.INSERT
语法:
INSERT INTO
table_name[ (column_name1[ ,column_name2]...) ]
VALUES(express1[,express2]...)
电信的语句的工作应用
创建预算单位 ,需要复制一套2013年
Insert Into cbudgetorg Select * From cbudgetorg_2013ini;
--插入新数据
INSERT INTO CSUBJECT_REPAIR SELECT * FROM LEI_CSUBJECT_REPAIR; ---修理类关系表
INSERT INTO cnettype SELECT * FROM LEI_cnettype; ---修理类网络类型
INSERT INTO cspectype SELECT * FROM LEI_cspectype; --修理类专业属性
INSERT INTO CSUBJECT_SALE SELECT * FROM LEI_CSUBJECT_SALE; --销售类型关系表
INSERT INTO cmaterialuse SELECT * FROM LEI_cmaterialuse; --领料用途TYPE=1(修理),=2 (综合)
INSERT INTO CMATERIALTYPE SELECT * FROM LEI_CMATERIALTYPE; ---领料类别
INSERT INTO CSUBJECT_other SELECT * FROM LEI_CSUBJECT_other; --综合类关系表
INSERT INTO CSALETYPE_A SELECT * FROM LEI_CSALETYPE_A; --终端类型A
INSERT INTO CSALETYPE_B SELECT * FROM LEI_CSALETYPE_B; --终端类型B
2.UPDATE
语法:
UPDATE table_name
SET
{
column_name1=express1
[ column_name2 = express2 ... ]
|
(column_name1 [,column_name2...])
=(selectSubquery)
}
[ WHERE condition ]
update table_name
set
column_name1=express1 [ column_name2=express2 ... ]
|
(column_name1[.column_name2...])=(selectSubquery)
[WHERE condition ]
--更新serviceurl至正式表
update cserviceconfig t1 set t1.serviceurl=(
select t2.serviceurl from MID_GJ_cserviceconfig t2 where t2.servicecode=t1.servicecode
) where exists(
select 1 from MID_GJ_cserviceconfig t3 where t3.servicecode=t1.servicecode
);
3.DELETE --删除表中的数据 但表还在
电信的语句的工作应用
delete from CSUBJECT_REPAIR;;
delete from cnettype;
delete from cspectype;
delete from CSUBJECT_SALE;
delete from cmaterialuse;
delete from CMATERIALTYPE;
delete from CSUBJECT_other;
delete from CSALETYPE_A;
delete from CSALETYPE_B;
4.TRUNCATE --删除表中所有的数据,但表还在
5.CALL
电信的语句的工作应用
重新编译失效目标数据库用户下失效的对象
CALL PROC_RECOMPILE_OBJECTS
6.LOCKTABLE
7.MERGE
DDL
create table
alter table
drop table
DCL
2.什么是数据完整性?它分几种 类型
数据完整性分为四类:
实体完整性
(Entity Integrity)、
域完整性
(Domain Integrity)、
参照完整性
(Referential Integrity)、
用户自定义完整性
(User-definedIntegrity)。
二、判断题:
1.下边删除视图的语句是否正确
Drop view from Pub_v_Division
X
Drop view Pub_v_Division
V
2.DROP TABLE t1语句与DELETE FROM t1 的作用是相同
X
不相同
3.如果更新了一个已经创建视图的表,那么视图必须进行同样的更新才行
X
视图依附在表上,表变视图自然会变
4.下边的CREATE语句是否正确
X
Create View Credit_debts as (Select all from debts Where Account_id=4)
5.在使用HAVING字句时,要同时使用GROUP BY字句
V
三、选择题
1.下列SQL语句不正确的是
A.SELECT
au_name,title
FROM authours,titles,titlers.au.id=titleauthor.au_id
AND
titles.tiltle_id=titleauthor
2.请写出下语句的错误所在,并给出正确写法
INSERT INTO TABLE COLLECTION SELECT FROM TABLE_2
3.下面的语句有什么 错误,请给出正确写法
UPDATE TABLE("HONUS WAGNER CARD",25000,"FOUND IT")
4.下面这个存储过程实现什么功能
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE sp_exec_35to41
@database varchar(60),@bz varchar(5)
AS
begin
declare
@sqlstring varchar(2000)
alter table Acc_t_AcctItem disable trigger all
delete from Acct_t_Acctltem
set @sqlstring='insert into Acct_t_AcctItem SELECT
AcctCode,AcctName,BalanceDir,Memoric,AuxDept,AuxEnterprise,AuxPerson,
AuxProject,EndFlag,AcctTypeID,Status,Breviary,TaxTypeID,AcctLvIID,SuperID,
null,EndFlag,EndFlag,EndFlag,EndFlag
from '+@database+'.dbo.Acct_t_Acctltem'
exec(@sqlstring)
alter table Acct_t_Acctltem enable trigger all
return
end
GO
SET QUOTED_IDENTIFIFER OFF
GO
SET ANSI_NULLS ON
GO
5.编写存储过程
因为system模式(账号)不能创建触发器,所以用scott/999来测试
查询存储过程的内容
SELECT
text
FROM
user_source
WHERE
NAME
=
'Procedure Name'
ORDER
BY
line;
--其中Procedure Name为存储过程名字,需要全部用大写英文。
######################################
HHHHHHHHHHHHHHHHHHHHHH
connect scott/999
create procedure pro_20170301 is
begin
--01.创建tb_部门表并插入数据
create table tb_部门(
DeptID varchar2 (4),
DeptName varchar2(12)
);
insert into tb_部门
(DeptID,DeptName) values ('01','需求组');
insert into tb_部门
(DeptID,DeptName) values ('02','开发组');
insert into tb_部门
(DeptID,DeptName) values ('03','测试组');
--02.创建tb_职员表并插入数据
create table tb_职员
(
PersonID varchar2(3),
PersonName varchar(8),
DeptID varchar2(4)
);
insert into tb_职员(PersonID,PersonName,DeptID) values ('101','小张','01');
insert into tb_职员(PersonID,PersonName,DeptID) values ('102','小李','02');
insert into tb_职员(PersonID,PersonName,DeptID) values ('103','小王','03');
insert into tb_职员(PersonID,PersonName,DeptID) values ('104','老林','04');
--03.创建tb_考勤表
create table tb_考勤
(
Sno number(10),
PersonID varchar2(3),
Cio number check(Cio in (1,0)),
Cdate date,
Ctime date
);
--创建序列 s_Sequence
CREATE SEQUENCE s_Sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE
-- 一直累加,不循环
--创建触发器 --20170222 2311 做到这里,sys (sysdba)不能创建触发器,要用其他用户测试,删除前面的表,序列,再做一次。
CREATE TRIGGER s_increase BEFORE
insert ON tb_考勤 FOR EACH ROW
begin
select s_SEQUENCE.nextval into:New.Sno from dual;
end s_increase;
commit;
end
pro_20170301
;
/
TTTTTTTTTTTT
######################################################
create procedure pro_test is
begin
--01.创建tb_部门表并插入数据
create table tb_部门(
DeptID varchar2 (4),
DeptName varchar2(12)
);
--ok
insert into tb_部门
(DeptID,DeptName) values ('01','需求组');
insert into tb_部门
(DeptID,DeptName) values ('02','开发组');
insert into tb_部门
(DeptID,DeptName) values ('03','测试组');
commit;
end
pro_test
;
/