SQL语言本身可以分成4类 即:
数据定义语言(DDL),数据操纵语言(DML),数据查询语言(DQL),数据控制语言(DCL)
DCL离不开数据库的使用者,数据控制语言主要就是对数据库使用者赋予和撤销访问数据库的权限的设置 ,主要包括授予权限要使用的语言GRANT和收回权限的语句REVOKE。
数据定义语言(DDL)
--使用Create语句创建表
create table productinfoA(
ProductId varchar2(10),
ProductName varchar2(20),
ProductPrice number(8,2),
Quantity number(10),
Category varchar2(10),
Desperation varchar2(1000),
Origin varchar2(10)
);
--使用Alter语句修改表
--add:用于向表中添加列
alter table productinfoA add remark varchar(200);
--modify:用来修改表中已经存在的列的信息
alter table productinfoA modify remark number(2,2);
--drop:用来删除表中的列,在删除表中的列时经常要加上CASCADE CONSTRAINTS 是要把与该列有关的约束也一并删除掉
alter table productinfoA drop column remark;
--对表的修改操作并不是一次只能修改一个字段,也可以同时完成对多个字段的修改
alter table productinfoA
modify productName varchar2(50)
add remark varchar2(200);
--使用Drop语句删除表
drop table productinfoA
select * from productinfoA;
--约束的作用
约束是保证数据库表中数据的完整性和一致性的手段,Oracle 11g中一共有5个约束:主键约束,外键约束,唯一约束,检查约束,非空约束
--主键约束
--主键约束在每一个数据表中只有一个,但是一个主键约束可以由数据表中多个列组成
--使用主键约束创建商品类型信息表
在创建表时就创建主键约束,只需要使用primary key(字段名)即可完成
create table categoryinfoA
(categoryId varchar2(20),
categoryName varchar2(50),
primary key(categoryId)
);
drop table categoryinfoA;
--使用ALTER TABLE语句为表添加主键约束
alter table categoryinfoA add constraints pk_category primary key(categoryId);
--移除主键约束
alter table categoryinfoA drop constraint pk_category;
select * from categoryinfoA;
--外键约束
--1.使用外键约束创建商品信息表
create table productinfoB(
productid varchar2(10),
productname varchar2(20),
productprice number(8,2),
quantity number(10),
desperation varchar2(1000),
category varchar2(10),
origin varchar2(10),
primary key (productid),
constraint fk_pro foreign key(category)
references categoryinfoA(categoryid)
on delete cascade
);
--2.在修改数据库表时添加外键约束
在已经存在的数据表中也是可以添加外键约束的,添加外键约束是在ALTER TABLE语句后面加上如下语句:
ADD CONSTRAINT constraint_name FOREIGN KEY (column_name)
REFERENCE table_name(column_name)
ON DELETE CASCADE;
alter table productinfoA
add constraint fk_product foreign key(category)
references categoryinfoA(categoryid)
on delete cascade;
--3.移除外键约束
alter table productinfoB
drop constraint fk_pro;
--CHECK约束
--CHECK约束是检查约束,能够规定每一个列能够输入的值,以保证数据的正确性
--1.创建表时添加CHECK约束
create table custominfoA
(CumstomId varchar2(10),
Name varchar2(10),
Age number(2),
Gender varchar2(2),
Tel varchar2(11),
Address varchar2(100),
CONSTRAINT CHK_AGE CHECK(Age>=18 and Age<=50)
);
--2.在修改数据表时添加CHECK约束
alter table custominfoA
add constraint chk_gender CHECK(Gender = '男' or Gender = '女');
--3.移除CHECK约束
alter table custominfoA
drop constraint chk_gender;
--UNIQUE约束
UNIQUE约束称为唯一约束,可以设置在表中输入的字段值都是唯一的
--1.在创建表时添加UNIQUE约束
create table orderinfoA
(OrderId varchar2(10),
CustomId varchar2(20),
ProductId varchar2(10),
OrderData varchar2(10),
OrderQuantity number(10),
SendDate varchar2(10),
constraint unq_orderid unique(OrderId)
);
--2.在修改表时添加unique约束
alter table orderinfoA
add constraint unq_customid unique(CustomId);
--3.移除UNIQUE约束
alter table orderinfoA
drop constraint unq_customid;
--NOT NULL 约束
NOT NULL约束就是非空约束,经常会在创建表时添加非空以确保字段必须要输入值。
该约束和之前的约束不同,是直接在创建列时设置字段的非空约束。
--1.创建NOT NULL约束
create table managerinfoA
(ManagerId varchar2(10),
LoginName varchar2(10) NOT NULL,
Password varchar2(10) NOT NULL,
Name varchar2(10),
Tel varchar2(11)
);
--2.修改表时设置NOT NULL约束
在修改表时设置NOT NULL约束,也不需要再使用ADD关键字来添加约束,只要使用MODIFY关键字就可以设置表中字段的NOT NULL约束
alter table managerinfoA
modify Name not null;
--对于非空约束不需要删除,如果要取消某个列非空的约束,直接使用MODIFY语句把该列的非空约束写成NULL即可
alter table managerinfoA
modify Name null;
数据操纵语言(DML)和数据查询语言(DQL)
--添加数据用INSERT
insert into managerinfoA(managerId,Loginname,Password,Name,Tel)values('1','xiaoMing','123455','LiMing','13512345678');
create table logininfoA
(loginname varchar2(10),
loginpassword varchar2(10)
);
---插入到表中数据来源于另外一张表里的数据
insert into logininfoA(Loginname,Loginpassword,Loginid) select loginname,password,managerid from managerinfoA;
---直接创建带数据的表
create table login
as select loginname,password from managerinfoA;
select * from logininfoA
--修改数据用UPDATE
//修改表中指定字段的全部值
update login set loginname = 'LiMing'
//根据条件修改表中指定字段的值
update login set password = '123456' where loginname = 'LiMing'
--删除数据用DELETE
//删除表中的全部记录
delete from login
//根据条件删除表中的记录
delete from login where loginname = 'LiMing'
--查询数据用SELECT
//根据条件查询数据
select * from managerinfoA where loginname = 'xiaoMing'
//查询表中的全部数据
select * from managerinfoA
--其他数据操纵语句
//TRUNCATE语句和DELETE语句一样都是用来完成删除数据表中数据的,但是一者是有区别的。
使用TRUNCATE语句删除表中的记录就是要把表中的记录全部删除,但是TRUNCATE语句删除
表中数据的速度要比使用DELETE语句删除表中的数据更快一点。
TRUNCATE TABLE LOGININFOA
//MERGE语句与UPDATE语句的功能类似,都是修改数据表中数据的,使用MERGE语句可以对数据表同时进行增加和修改的操作
//用MERGE作修改操作
MERGE INTO LOGININFOA
USING MANAGERINFOA
ON(LOGININFOA.LOGINID = MANAGERINFOA.MANAGERID)
WHEN MATCHED THEN UPDATE
SET LOGININFOA.LOGINNAME = MANAGERINFOA.LOGINNAME
//用MERGE作增加操作
MERGE INTO LOGININFOA
USING MANAGERINFOA
ON(LOGININFOA.LOGINID = MANAGERINFOA.MANAGERID)
WHEN NOT MATCHED THEN INSERT
VALUES(MANAGERINFOA.LOGINNAME,MANAGERINFOA.PASSWORD,MANAGERINFOA.MANAGERID);
//增加和修改同时进行
MERGE INTO LOGININFOA
USING MANAGERINFOA
ON(LOGININFOA.LOGINID = MANAGERINFOA.MANAGERID)
WHEN MATCHED THEN UPDATE
SET LOGININFOA.LOGINNAME = MANAGERINFOA.LOGINNAME
WHEN NOT MATCHED THEN INSERT
VALUES(MANAGERINFOA.LOGINNAME,MANAGERINFOA.PASSWORD,MANAGERINFOA.MANAGERID);