数据库基础整理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Байду номын сангаас修改表:
Alert table<表名> add [column] <新列名><数据类型>[完整性约束]
Add<完整性约束>
Drop [column] <列名>[cascade|restrict]
Drop constraint<完整性约束>[cascade|restrict]
Alter column <列名><数据类型>
嵌套查询:
并操作union
使用 UNION将多个查询结果合并起来时,系统会自动去掉重复元组
如果要保留重复元组则用 UNION ALL操作符。
更新数据:
插入数据
插入元祖
insert
Into<表名>(属性值,属性值....)
Values(‘常量1’,‘常量2’....);
插入子查询
insert
Into<表名>(属性值,属性值....)
删除数据
Delete
From<表名>
Where<条件>
视图(虚表:隐藏底层表结构,简化数据访问)
建立视图
Create view<视图名>[(列名,列名....)]
As <子查询>
[with check option];
例子:
CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
数据库左右连接的区别及实现语句
左连接:以左表为基准,查出左表所有的数据和右表与之连接字段相等的记录,如果右表中没有对应数据,则显示为null。
select a.*,b.* from a left join b on a.id=b.parent_id
右连接:以右表为基准,查出右表所有的数据和左表与之连接字段相等的记录,如果左表中没有对应数据,则显示为null
子查询;
修改数据
修改一个元祖的值
Update Student
Set Sage=22
Where Sno=‘201929292’;
修改多个元祖的值
Update Student
Set Sage = Sage+1;
带子查询的修改语句
Update SC
Set Grade=0
Where Sno IN
(子查询
);
HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集,弥补了WHERE关键字不能与聚合函数联合使用的不足。
聚集函数
消除取值重复的行distinct(默认为all)
连接查询:
内连接:内连接也叫自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取两个表中所匹配的数据,舍弃不匹配的数据
<列名><数据类型>[列级完整性约束条件],
Sno char(20),
Sname char(20) unique,
Cname char(40) not null,
Primary key(Sno,Cno),
Foreign key(Sno) references Student(Sno)
);
删除表:
Drop table<表名>[cascade|restrict]
例子:alert table Course add unique(Cname);
索引
建立索引:
Create [unique][cluster] index <索引名>
On<表名>(<列名>[<次序>] [, <列名>[<次序>]].....);
Cluster:建立聚簇索引;unique:唯一索引
例子:create unique index SCno on SC(Sno ASC,Cno DESC);
内外连接区别:内连接只显示符合连接条件的记录,外连接除了显示符合连接条件的记录外,还显示表中的记录。
最左匹配原则:
就是最左边优先,就类似于通关类游戏,过了第一关,才能过第二关,过了第一关和第二关,才能过第三关
建立索引a,b,c下列查询a b , a c ,b c谁会走这个索引及原因?
根据最左前缀原则 只有ab会走这个索引
修改索引(重命名)
Alter index SCno rename to SCSno;
删除索引
Drop index <索引名>
数据查询
Select....
From....
Where....
单表查询:
例子:Select Sname, 2014-Sage
From student;
Where
分组查询:having用过吗?知道group by吗?
FROM SC
GROUP BY Sno;
由于AS子句中SELECT语句的目标列平均成绩是通过作用聚集函数得到的,所以CREATE VIEW中必须明确定义组成S_G视图的各个属性列名。S_G是一个分组视图。
删除视图
DROP VIEW<视图名〉[CASCADE];
查询视图(同基本表一样)
视图的更新:自动换为基本表的更新,除非加上with check option
数据定义
模式的创建删除
模式定义:
Create schema <模式名> authorization <用户名>;
若没有指定<模式名>,那么<模式名>隐含为<用户名>
删除模式:
Drop schema <模式名><cascade|restrict>
表的创建、删除、修改
创建表:
create table<表名>(
但有些不能转换,如视图的某属性是通过基本表计算或聚集函数实现的,更新这个属性,不能改变基本表。
Alert table<表名> add [column] <新列名><数据类型>[完整性约束]
Add<完整性约束>
Drop [column] <列名>[cascade|restrict]
Drop constraint<完整性约束>[cascade|restrict]
Alter column <列名><数据类型>
嵌套查询:
并操作union
使用 UNION将多个查询结果合并起来时,系统会自动去掉重复元组
如果要保留重复元组则用 UNION ALL操作符。
更新数据:
插入数据
插入元祖
insert
Into<表名>(属性值,属性值....)
Values(‘常量1’,‘常量2’....);
插入子查询
insert
Into<表名>(属性值,属性值....)
删除数据
Delete
From<表名>
Where<条件>
视图(虚表:隐藏底层表结构,简化数据访问)
建立视图
Create view<视图名>[(列名,列名....)]
As <子查询>
[with check option];
例子:
CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
数据库左右连接的区别及实现语句
左连接:以左表为基准,查出左表所有的数据和右表与之连接字段相等的记录,如果右表中没有对应数据,则显示为null。
select a.*,b.* from a left join b on a.id=b.parent_id
右连接:以右表为基准,查出右表所有的数据和左表与之连接字段相等的记录,如果左表中没有对应数据,则显示为null
子查询;
修改数据
修改一个元祖的值
Update Student
Set Sage=22
Where Sno=‘201929292’;
修改多个元祖的值
Update Student
Set Sage = Sage+1;
带子查询的修改语句
Update SC
Set Grade=0
Where Sno IN
(子查询
);
HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集,弥补了WHERE关键字不能与聚合函数联合使用的不足。
聚集函数
消除取值重复的行distinct(默认为all)
连接查询:
内连接:内连接也叫自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取两个表中所匹配的数据,舍弃不匹配的数据
<列名><数据类型>[列级完整性约束条件],
Sno char(20),
Sname char(20) unique,
Cname char(40) not null,
Primary key(Sno,Cno),
Foreign key(Sno) references Student(Sno)
);
删除表:
Drop table<表名>[cascade|restrict]
例子:alert table Course add unique(Cname);
索引
建立索引:
Create [unique][cluster] index <索引名>
On<表名>(<列名>[<次序>] [, <列名>[<次序>]].....);
Cluster:建立聚簇索引;unique:唯一索引
例子:create unique index SCno on SC(Sno ASC,Cno DESC);
内外连接区别:内连接只显示符合连接条件的记录,外连接除了显示符合连接条件的记录外,还显示表中的记录。
最左匹配原则:
就是最左边优先,就类似于通关类游戏,过了第一关,才能过第二关,过了第一关和第二关,才能过第三关
建立索引a,b,c下列查询a b , a c ,b c谁会走这个索引及原因?
根据最左前缀原则 只有ab会走这个索引
修改索引(重命名)
Alter index SCno rename to SCSno;
删除索引
Drop index <索引名>
数据查询
Select....
From....
Where....
单表查询:
例子:Select Sname, 2014-Sage
From student;
Where
分组查询:having用过吗?知道group by吗?
FROM SC
GROUP BY Sno;
由于AS子句中SELECT语句的目标列平均成绩是通过作用聚集函数得到的,所以CREATE VIEW中必须明确定义组成S_G视图的各个属性列名。S_G是一个分组视图。
删除视图
DROP VIEW<视图名〉[CASCADE];
查询视图(同基本表一样)
视图的更新:自动换为基本表的更新,除非加上with check option
数据定义
模式的创建删除
模式定义:
Create schema <模式名> authorization <用户名>;
若没有指定<模式名>,那么<模式名>隐含为<用户名>
删除模式:
Drop schema <模式名><cascade|restrict>
表的创建、删除、修改
创建表:
create table<表名>(
但有些不能转换,如视图的某属性是通过基本表计算或聚集函数实现的,更新这个属性,不能改变基本表。