ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

8.1SQL概述与数据库定义

2022-03-19 19:03:46  阅读:344  来源: 互联网

标签:8.1 Sno 数据库 视图 CHAR 索引 Pno SQL 属性


SQL的基本组成

1、数据定义语言。
2、交互式数据操纵语言。
3、事务控制。
4、嵌入式SQL和动态SQL
5、完整性。
6、权限管理
7、SQL语言中完成核心功能的9个动词:
(1)数据查询:Select
(2)数据定义:Create、Drop(删除)、Alter(修改)
(3)数据操纵:Insert(插入)、Update(更新)、Delete(删除)
(4)数据控制:Grant(授权)、Revoke(撤销授权)

SQL的数据类型

此处了解即可

表的创建、修改和删除

1、创建表
语句格式:CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]…
[,<表级完整性约束条件>]);(注意分号表示该语句结束)
注:[ ]表示可选,< >表示必填。

如创建表S :create Table S (sno char(6));
1、实体完整性约束:主码唯一且不为空
(1)在列后面加 PRIMARY KEY

如表S的主码为sno create Tables S (sno char(10) primary key)
(2)在最后加PRIMARY KEY(属性名1,属性名2) //主码为属性组(两个或以上属性的组合)只能
用这种方法
2、参照完整性约束:
1)在列后面加 References 表名(属性名)

如表SC的外码sno参照s表中的sno:create table sc(sno references s(sno))
(2)在最后面加 ,有几个外码,就写几行。
Foreign Key(属性名) References 表名(属性名)
注:[ON DELETE[CASCADE|SET NULL]]
ON DELETE CASCADE 表示删除被参照关系的元组时,同时删除参照关系中的元组;
ON DELETE SET NULL表示删除被参照关系的元组时,将参照关系的相应属性值置为空值

 3、属性值上的约束
(1)NULL:表示为空;NOT NULL表示不能为空;
(2)UNIQUE:表示取值唯一;
(3)NOT NULL UNIQUE:表示取值唯一且不为空,与属性列后面的PRIMARY KEY可互换;
(4)CHECK:限制列中值的取值范围。
如:CHECK (Sex='男' OR Sex='女'),CHECK (余额>=0),CHECK (年龄>=18 AND 年龄<=60),
CHECK (离职日期 > 入职日期)

例题;

例:建立一个供应商、零件数据库。其中关系供应商S(Sno,Sname,Status,City),关系零件P(Pno,Pname,Color,Weight,City)。该数据库要满足如下要求:
(1)供应商代码不能为空,且值是唯一的,供应商的名称也是唯一的。
(2)零件号不能为空,且值是唯一的;零件名不能为空。
(3)一个供应商可以供应多个零件,而一个零件可以由多个供应商供应。
Create Table S (Sno CHAR(5) NOT NULL UNIQUE,
                       Sname CHAR(30) UNIQUE,
                       Status CHAR(8),
                       City CHAR(20),
                       PRIMARY KEY(Sno)); //教材这里有错误(前面已经又NOT NULL UNIQUE)
Create Table P (Pno CHAR(6),
                       Pname CHAR(30) NOT NULL,
                       Color CHAR(8),
                       Weight NUMERIC(6,2),
                       City CHAR(20),
                       PRIMARY KEY(Pno));
Create Table SP (Sno CHAR(5),
                          Pno CHAR(6),
                          Status CHAR(8),
                          Qty NUMERIC(9),
                          PRIMARY KEY(Sno,Pno), //如果主键为属性组合,只能用这种方法
                          FOREIGN KEY(Sno) REFERENCES S(Sno),
                          FOREIGN KEY(Pno) REFERENCES P(Pno));

09年下午题:
某网上书店后台数据库的部分关系模式如下:
会员(会员编号,用户名,密码,姓名,地址,邮编,电话,消费额,积分)
图书(图书编号,类型名称,图书名称,作者,出版社,出版日期,ISBN,价格)
订单(订单编号,用户名,销售额,订购日期,出货日期)
订单明细(订单明细编号,订单编号,图书编号,数量)
问题1:
下面是创建订单关系的SQL语句,订单编号唯一识别一个订单,用户名为订购图书的会员用户名,且不能为空。要求订购日期不能大于出货日期。请将空缺补充完整。
Create Table 订单 (
                         订单编号 CHAR(6) (a) ,
                        用户名 VARCHAR(40) NOT NULL (b) ,
                        销售额 FLOAT,
                        订购日期 DATE NOT NULL,
                         出货日期 DATE (c) ;
解答: (a)NOT NULL UNIQUE 或 PRIMARY KEY
(b)REFERENCES 会员(用户名)
(c)CHECK (订购日期<=出货日期)

2、修改表
语句格式:ALTER TABLE <表名> [ADD <新列名><数据类型>[列级完整性约束条件]]
[DROP <完整性约束名>]
[Modify <列名><数据类型>]);
如:
ALTER TABLE S ADD Zap CHAR(6); //在表S中新增一列ZAP,该列的数据为空
ALTER TABLE S MODIFY Status INT; //将表S的Status属性的数据类型更改为INT
ALTER TABLE S ADD Constraint C_cno CHECK(......) //在表S中新增CHECK约束,取名为C_cno
3、删除表
语句格式:DROP TABLE <表名>
如:
DROP TABLE S; //表删除后,不再是数据库模式的一部分

索引的创建和删除

1、索引的概念
• 数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找到所需信息,无须阅
读整本书。在数据库中,索引使数据库无须对整个表进行扫描,就可以在其中找到所需数据。
• 比如在字典中,我们按字母建立索引。在数据库中,索引是某个表中的一列或者若干列的值的集
合,和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
2、索引的作用
(1)通过创建唯一索引,可以保证数据记录的唯一性。
(2)可以大大加快数据检索速度。
(3)可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
(4)在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。
索引分为聚集索引和非聚集索引。聚集索引是指索引表索引项的顺序与表中记录的物理顺序一致的
索引。

3、建立索引:
语句格式:CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…);
• 次序:ASC(升序)或DESC(降序),默认为升序。
• UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。
• CLUSTER:表明要建立的索引是聚簇索引,索引项的顺序是与表中记录的物理顺序一致的索引组织。
如:
CREATE UNIQUE INDEX S_Sno on S(Sno); //在表S的Sno列上建立索引S_Sno,默认为升序
CREATE UNIQUE INDEX P_Pno on P(Pno); //在表P的Pno列上建立索引P_Pno,默认为升序
CREATE UNIQUE INDEX J_Jno on J(Jno); //在表J的Jno列上建立索引J_Jno,默认为升序
CREATE UNIQUE INDEX SPJ_NO on SPJ(Sno ASC,Pno DESC,Jno ASC);
//在表SPJ上建立索引SPJ_NO,属性Sno按升序,Pno按降序,Jno按升序
4、删除索引
语句格式:DROP INDEX <索引名>
例:DROP INDEX StudentIndex; //删除索引StudentIndex

视图的创建和删除

1、创建视图
语句格式:CREATE VIEW 视图名(列表名)
                                     AS SELECT 查询子句
                                    [WITH CHECK OPTION];
• 视图的创建中,必须遵循如下规定:
(1)子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。
(2)WITH CHECK OPTION表示对UPDATE,INSERT,DELETE操作时保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
(3)组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT子查询目标列的主属性组成。

例:学生关系模式S(Sno,Sname,Sage,Sex,SD,Email,Tel),建立计算机系(CS表示计算机系)学生的视图,并要求进行修改、插入操作时保证该视图只有计算机系的学生。
CREATE VIEW CS_STUDENT //创建视图CS_STUDENT
                                          AS SELECT Sno,Sname,Sage,Sex //选择学号、姓名、年龄、性别列
                                          FROM Student //从学生表中查询
                                          Where SD='CS' //选择系名等于“CS”的行
                                          WITH CHECK OPTION; //以后对该视图进行修改、插入操作时DBMS
                                           会自动加上SD='CS'的条件,保证视图中只有计算机系的学生

3、删除视图
语句格式:DROP VIEW 视图名
如:DROP VIEW CS_STUDENT //删除视图CS_STUDENT

【题】 某大型集团公司的数据库的部分关系模式如下:员工表:EMP(Eno,Ename,Age,Sex,Title),各属性分别表示员工工号、姓名、年龄、性别和职称级别,其中性别取值为“男”“女”;公司表:COMPANY(Cno,Cname,City),各属性分别表示公司编号、名称和所在城市;工作表:WORKS(Eno,Cno,Salary),各属性分别表示职工工号、工作的公司编号和
工资。有关关系模式的属性及相关说明如下:(1)允许一个员工在多家公司工作,使用身份证号作为工号值。(2)工资不能低于1500元。

【问题1 1】请将下面创建工作关系的SQL语句的空缺部分补充完整,要求指定关系的主码、外码,以及工资不能低于1500元的约束。

CREATE TABLE WORKS(
                  Eno CHAR(10) (a) ,
                 Cno CHAR(4) (b) ,
                 Salary int (c) ,
                PRIMARY KEY (d) ,
);
答:a:reference EMP(Eno)

b:reference COMPANY(Cno)

c:CHECK(salary>=1500)  注意大于等于的符号

d:(Eno,Cno)

【问题2】(1)创建女员工信息的视图FemaleEMP,属性有Eno、Ename、Cno、Cname和Salary,请将下面SQL语句的空缺部分
补充完整。
CREATE (e)

e:Female Emp(Eno,Ename,Cno,Cname,salary) 理解2-(3)的概念

标签:8.1,Sno,数据库,视图,CHAR,索引,Pno,SQL,属性
来源: https://blog.csdn.net/weixin_49765221/article/details/123599801

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有