数据库原理及应用(五)SQL

SQL的功能分类:

        数据定义功能DDL(定义模式、内模式、外模式)

        数据操纵功能DML(增删改查等功能)

        数据控制功能DCL(完整性校验)

SQL的特点

        1.SQL具有自含式和嵌入式两种(自含式可以独立交互)

        2.SQL具有语言简洁,易学易用的特点

        3.SQL支持三级模式

                (1)全体基本表构成一个数据库的模式

                (2)视图和部分数据表构成了数据库的外模式

                (3)存储文件和他们的索引文件构成了内模式

 SQL的数据定义功能

创建删除修改
基本表create tabledrop tablealter table
索引create indexdrop index
视图create viewdrop view
数据库create databasedrop databasealter database

         1.语言格式约定符号:<>中为实际语义[ ]中为任选项()| 必选项[,...n]表示可以多项重复

         2.一般语法规定:分隔符为 , 字符串使用 ' 进行区分

         3.SQL的特殊语法规定:以 ; 为结束符

基本表的定义与维护功能

        定义基本表

CREATE TABLE[ (库名)] (表名) (
    <列名> <数据类型> [<列级数据完整性约束条件>]
    [,...n]
    [,<表级完整性约束条件>][,...n]);

        SQL支持的数据类型

                数值型数据

SMALLINT半长整数,二进制,15bits数据
INTEGER / INT全长整数(四字长),31bits
DECIMAL(p[,q])十进制,共p位
FLOAT双字长浮点数

                字符型数据

CHARTER(n)  / CHAR(n)长度为n的字符串
VARCHAR(n)最大长度为n的变长字符串

                特殊数据类型

GRAPHIC(n)长度为n的定长图形字符串
VARGRAPHIC(n)变长图形字符串

                时间数据类型

DATEYYYY-MM-DD
TIMEHH.MM.SS
TIMESTAMP日期+时间

        约束条件

                (1)NOT NULL  /  NULL 约束

                (2)UNIQUE        唯一性约束

                (3)DEFAULT        缺省约束                DEFAULT <约束名> <缺省值> FOR <列名>

                (4)CHECK        检查约束        CONSTRAINT <约束名> CHECK (<约束表达式>)

                (5)表级完整性约束                UNIQUE约束

                                                              PRIMARY KEY约束

                                                CONTRAINT <约束名> PRIMARY KEY[CLUSTERED(<列组>)]

                                                        其中CLUSTERED短语为建立<列组>聚簇

                                                                FOREIGN KEY约束        外码约束

                                                CONTRAINT <约束名>FOREIGN KEY(<外码>)

                                                        REFERENCES<被参照表名>(<与外码对应的主码名>)

        例

                 修改基本表

ALTER TABLE<表名>
    [ADD(<新列名> <数据类型> [完整性约束][...,n])]
    [DROP<完整性约束名>]
    [MODIFY(<列名> <数据类型> [...,n])]

                 删除基本表

DROP TABLE <表名>

         索引的定义和维护功能

                索引的作用              1.加快数据查询的速度

                                                2.可以保证数据的唯一性

                                                3.加快连接速度

                建立索引的原则      1.索引的建立和维护由DBA和DBMS完成

                                                2.大表适当建立索引,小表不必建立索引

                                                3.同一个表不要建立过多索引

                                                4.根据查询要求建立索引

                建立索引的格式

CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序>],...)

                         表名是索引的基本表名字;<列名>后的次序可以选择ASC(升序)、DESC(降序),缺省为ASC

                 删除索引

DROP INDEX <索引名>

         视图的定义和维护

                视图的优点:          1.简化用户的操作

                                                2.使用户可以以不同的方式看待同一数据

                                                3.对数据库的重构提供一定程度的逻辑独立性

                                                4.对机密数据提供安全保护

                 视图定义的格式

CREATE VIEW <视图名> [(列组名)] AS<子查询>  [WITH CHECK OPTION]

                         WITH CHECK OPTION表示在视图中进行update、insert、delete时,要保证操作的数据满足视图定义中的位于条件(where子语句的条件)

                删除视图

DROP VIEW  <视图名>

                 视图的查询和维护

                        不支持以下几种视图的更新

                                1.由两个以上基本表导出的视图

                                2.视图中的字段来自字段表达函数

                                3.有分组语句或使用DISTINCT语句

                                4.有嵌套查询

                                5.定义不允许更新

        查询功能

                SELECT语句

SELECT <目标列组>
FROM <数据源>
[WHERE <元组条件>]
[GROUP BY<分组列> [HAVING <组选择条件>]]
[ORDER BY<排序列1><排序要求1> [...,n]]

                 SQL常用逻辑操作符

[NOT] IN[不]在其中(字段) IN (<数据表子查询>)
ANY任意一个(字段) (比较符) ANY (数据表子查询)
ALL全部(字段) (比较符) ALL (数据表子查询)
EXISTS[不]存在EXISTS (<子查询>)
[NOT] BETWEEN ...AND...[不]在范围(字段) [NOT] BETWEEN 小值 AND大值
IS [NOT] NULL
[NOT] LIKE
AND
OR
NOT

                 组合查询

                        1.UNION:并查询,将两个查询的结果合并并去重

                        2.MINUS:差查询,查询1取得的结果(查询2中没有)

                        3.INTERSECT:交查询,取两个查询共有的元组

                其他操作符

                        * 或者 <表名> *        取全部字段

                        DISTINCT:去掉重复值

                        外部连接:左外部连接*=        右外部连接=*

 

                 SQL函数查询

                        AVG(表达式),SUM(表达式),MIN(表达式),MAX(表达式),COUNT(*|<字段>)

         数据更新功能

                插入

INSERT 
INTO <表名> [(<属性列1>[,<属性列2>]...)]
VALUES (<常量1>[,<常量2>...])

                 修改

UPDATE <表名>
SET <列名> = <表达式> [,<列名> = <表达式>][,...n]
[WHERE <条件>];

         数据删除功能

DELETE
FROM <表名>
[WHERE <条件>];

嵌入式SQL

        应该注意的问题

                1.SQL和主语言的配合问题

                2.合理选择主预言

        必须解决的问题

                1.如何区别SQL和主语言

                2.使数据库的工作单元与程序工作单元之间能够通讯

        不需要使用游标的SQL

                1.说明语句

EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION

                2.数据定义和数据控制语句

                3.查询结果为单记录的查询语句

                4.插入语句和某些删除、修改语句

        不用游标的查询语句

EXEC SQL SELECT [ALLDISTINCT] <目标列表达式> [,...n]
    INTO <主变量> [<指示变量>][,...n]
    FROM   <表名或视图名> [,...n]
    [WHERE <条件表达式>];

                语句开始时必须加EXEC SQL前缀;查询结果集只有一条记录,SELECT不必有排序和分组语句

        不用游标的维护语句

                1.删除语句

                2.修改语句

                3.插入语句

        使用游标的SQL

                1.定义游标命令(DECLARE)

EXEC SQL DECLARE <游标名> CURSOR
    FOR<子查询>
    [FOR UPDATE OF<字段名1>[,...n]];

                2.打开游标命令

EXEC SQL OPEN<游标名>

                3.关闭游标命令

EXEC SQL CLOSE<游标名>

 

 SQL的数据控制功能

        数据控制方法:1.授权定义        2.存权处理        3.查权处理

        操作权限:      1.隐含特权(系统内置权限,与用户身份有关)       

                                2.系统特权(语句特权,允许用户在数据库内部实施管理)

                                3.对象特权(对数据库中的表、视图、存储过程的操作权限)

         数据操作权限设置

                1.授权语句

GRANT <系统特权组> To<用户组> |PUBLIC--PUBLIC指所有用户
[WITH GRANT OPTION];    --指可以转授权

                         授权给特殊对象

GRANT ALL PRIVILIGES <对象特权组> ON <对象名> 
TO <用户组> | PUBLIC
[WITH GRANT OPTION];    

                 2.收权语句

REVOKE <权限组> | AALL PRIVILIGES [ON <对象名>]
FROM <用户组名> |PUBLIC

                 3.拒绝访问语句

DENY ALL [PRIVILIGES] <权限组> [ON <对象名> TO <用户组> | PUBLIC]

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值