DDL:creat,alter,drop(模式的定义和删除,包括定义Database,Table,View,Index,完整性约束条)
DML:insert,delete,update,select
(各种方式的更新与检索操作,如直接输入记录,从其他Table(由SubQuery
建立)输入
各种复杂条件的检索,如连接查找,模糊查找,分组查找,嵌套查找等
各种聚集操作,求平均、求和、…等,分组聚集,分组过滤等)DCL:grant,revoke(安全性控制:授权和撤销授权)
DDL
1.create
create databa (列名 数据类型[Primary key|Unique][Not null][,列名 数据类型 [],...]);
1.“[]”表示其括起的内容可以省略,“|”表示其隔开的两项可取其一
2.Primary key:主键约束。每个表只能创建一个主键约束。
3.Unique:唯一性约束(即候选键)。可以有多个唯一性约束。
4.Not null:非空约束。是指该列允许不允许有空值出现,如选择了Not null表明该列不允许有空值出现。
5.语法中的数据类型在SQL标准中有定义
在SQL-92标准中定义的数据类型
1.char(n):固定长度的字符串
2.varchar(n):可变长字符串
3.int:整数/有时不同系统也写作integer
4.numeric(p,q):固定精度数字,小数点左边p位,右边p-q位
5.real:浮点精度数字//有时不同系统也写作float(n),小数点后保留n位
6.date:日期(如2003-09-12)
7.time:时间(如23:15:003)…
现行商用DBMS的数据类型有时和上面有些差异,请注意;
和高级语言的数据类型,总体上是一样的,但也有差异
2.alter
alter table 表名
[add {colname datatype, ...}] #增加新列
[drop {完整性约束名}] #删除完整性约束
[modify{colname datatype, ...}] #修改列定义
示例:在学生表Student(S#,Sname,.Ssex,Sage,D#,Sclass)基础上增加二列Saddr,PID
Alter Table Student Add Saddr char[40],PID char[18]
示例:将上例表中Sname列的数据类型增加两个字符
Alter Table Student Modify Sname char(10);
示例:删除学生姓名必须取唯一值的约束
Alter Table Student Drop Unique(Sname )
3.drop
撤销基本表
drop table 表名
注意,SQL-delete语句只是删除表中的元组,而撤消基本表drop table的操作是撤消包含表格式、表中所有元组、由该表导出的视图等相关的所有内容,所以使用要特别注意
撤销数据库
drop database 数据库名;
指定当前数据库
use 数据库名;
关闭当前数据库
close 数据库名;
DML
1.insert
insert into 表名[(列名[,列名]...)]
values(值[,值],...);
1.values后面值的排列,须与into子句后面的列名排列一致
2.若表名后的所有列名省略,则values后的值的排列,须与该表存储中的列名排列一致
2.select
select 列名 [[,列名]...]
from 表名
[where 检索条件];
结果唯一性问题
1.关系模型不允许出现重复元组。但现实DBMS,却允许出现重复元组,但也允许无重复元组。
2.在Table中要求无重复元组是通过定义Primary key.或Unique来保证的;而在检索结果中要求无重复元组,是通过DISTINCT保留字的使用来实现的。
select distinct 列名 [[,列名]...]
from 表名
[where 检索条件];
结果排序问题
order by列名[asc|desc]
1.DBMS可以对检索结果进行排序,可以升序排列,也可以降序排列。
2.Select语句中结果排序是通过增加order by子句实现的
3.意义为检索结果按指定列名进行排序,若后跟asc或省略,则为升序;若后跟desc,则为降序。
模糊查询问题
列名 [not] like "字符串"
1."%“匹配零个或多个字符
2.”_“匹配任意单个字符
3.”\“转义字符,用于去掉一些特殊的特定含义,使其被作为普通字符看待,如用“%”去匹配字符%,用”\_"去匹配字符__
示例:检索所有姓张的学生学号及姓名
Select S#,Sname
From Student
Where Sname Like '张%';
示例:检索名字为张某某的所有同学姓名
Select S#,Sname
From Student
Where Sname Like '张____';(注意一个汉字占两个字节)
示例:检索名字不姓张的所有同学姓名
Select S#,Sname
From Student
Where Sname Not Like '张%';
多表联合查询
select 列名 [[,列名]...]
from 表名1,表名2,...
where 检索条件;
重名处理
select 列名 as 列别名 [[,列名 as 列别名]...]
from 表名1 as 表别名1,表名2 as 表别名2,...
where 检索条件
1.连接运算涉及到重名的问题,如两个表中的属性重名,连接的两个表重名(同一表的连接)等,因此需要使用别名以便区分
2.上述定义中的as可以省略
3.当定义了别名后,在检索条件中可以使用别名来限定属性
批元组新增
insert into 表名(列名1,列名2,...)
select 列名1,列名2 from 表名
where 检索条件;
示例:新建立Table:St(S#,Sname),将检索到的满足条件的同学新增到该表中
Insert Into St (S#,Sname)
Select S#,Sname From Student
Where Sname like%伟’;
Insert Into St(S#,Sname)
Select S#,Sname
From Student Order By Sname;
注意:当新增元组时,DBMS会检查用户定义的完整性约束条件等,如不
符合完整性约束条件,则将不会执行新增动作
3.Delete
delete from 表名 [where 条件表达式];
1.元组删除Delete命令:删除满足指定条件的元组
2.如果Where条件省略,则删除所有的元组
4.update
update 表名
set 列名=表达式|(子查询)
[[,列名=表达式|(子查询)]...]
[where 条件表达式];
1.元组更新Update命令:用指定要求的值更新指定表中满足指定条件元组的指定列的值
2.如果Where条件省略,则更新所有的元组。
示例:将所有教师工资上调5%
Update Teacher
Set Salary=Salary*1.05;
示例:将所有计算机系的教师工资上调10%
Update Teacher
Set Salary=Salary*1.1
Where D# in(Select D# From Dept Dname='计算机');