数据库原理知识点.docx

上传人:b****3 文档编号:6991950 上传时间:2023-05-10 格式:DOCX 页数:12 大小:21.83KB
下载 相关 举报
数据库原理知识点.docx_第1页
第1页 / 共12页
数据库原理知识点.docx_第2页
第2页 / 共12页
数据库原理知识点.docx_第3页
第3页 / 共12页
数据库原理知识点.docx_第4页
第4页 / 共12页
数据库原理知识点.docx_第5页
第5页 / 共12页
数据库原理知识点.docx_第6页
第6页 / 共12页
数据库原理知识点.docx_第7页
第7页 / 共12页
数据库原理知识点.docx_第8页
第8页 / 共12页
数据库原理知识点.docx_第9页
第9页 / 共12页
数据库原理知识点.docx_第10页
第10页 / 共12页
数据库原理知识点.docx_第11页
第11页 / 共12页
数据库原理知识点.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据库原理知识点.docx

《数据库原理知识点.docx》由会员分享,可在线阅读,更多相关《数据库原理知识点.docx(12页珍藏版)》请在冰点文库上搜索。

数据库原理知识点.docx

数据库原理知识点

候选码的求解理论和算法

首先对于给定的R(U)和函数依赖集F,可以将它的属性划分为4类:

L类,仅出现在F的函数依赖左部的属性。

R类,仅出现在F的函数依赖右部的属性。

N类,在F的函数依赖左部和右部均未出现的属性。

LR类,在F的函数依赖左部和右部两部均出现的属性。

根据以下定理和推论来求解候选码。

定理1:

对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的成员。

推论1:

对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选码。

定理2:

对于给定的关系模式R及其函数依赖集F,若X(X∈R)是R类属性,则X不在任何候选码中。

定理3:

设有关系模式R及其函数依赖集F,如果X是R的N类属性,则X必包含在R的任一候选码中。

设有关系模式R(A,B,C,D),F是R上成立的FD集,F={D→A,D→B},试写出关系模式R的候选

①R的候选键是CD

②理由:

从已知的F,可导出D→ABD,

再根据扩展律,可得出CD→ABCD,

即CD值可决定全部属性值。

规范命名:

表名,列名都必须要首字母大写

eg.Course Sno

1.SQLSELECTDISTINCT语句

在表中,可能会包含重复值。

这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。

关键词DISTINCT用于返回唯一不同的值。

语法:

SELECTDISTINCT列名称FROM表名称

如需从Company"列中仅选取唯一不同的值,我们需要使用SELECTDISTINCT语句:

SELECTDISTINCTCompanyFROMOrders

2.引号的使用

请注意,我们在例子中的条件值周围使用的是单引号。

SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)。

如果是数值,请不要使用引号。

文本值:

这是正确的:

SELECT*FROMPersonsWHEREFirstName='Bush'这是错误的:

SELECT*FROMPersonsWHEREFirstName=Bush

数值:

这是正确的:

SELECT*FROMPersonsWHEREYear>1965这是错误的:

SELECT*FROMPersonsWHEREYear>'1965'

3.ORDERBY语句

ORDERBYXXDESC

ORDERBY语句用于根据指定的列对结果集进行排序。

ORDERBY语句默认按照升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用DESC关键字。

以字母顺序显示公司名称:

SELECTCompany,OrderNumberFROMOrdersORDERBYCompany

结果:

Company

OrderNumber

Apple

4698

IBM

3532

W3School

6953

W3School

2356

4.插入新的行

INSERTINTO。

 VALUES9('','')

"Persons"表:

LastName

FirstName

Address

City

Carter

Thomas

ChanganStreet

Beijing

SQL语句:

INSERTINTOPersonsVALUES('Gates','Bill','Xuanwumen10','Beijing')

在指定的列中插入数据

"Persons"表:

LastName

FirstName

Address

City

Carter

Thomas

ChanganStreet

Beijing

Gates

Bill

Xuanwumen10

Beijing

SQL语句:

INSERTINTOPersons(LastName,Address)VALUES('Wilson','Champs-Elysees')

结果:

LastName

FirstName

Address

City

Carter

Thomas

ChanganStreet

Beijing

Gates

Bill

Xuanwumen10

Beijing

Wilson

 

Champs-Elysees

 

5.Update语句

Update语句用于修改表中的数据。

语法:

UPDATE表名称SET列名称=新值WHERE列名称=某值

Person:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen10

Beijing

Wilson

 

Champs-Elysees

 

更新某一行中的一个列

我们为lastname是"Wilson"的人添加firstname:

UPDATEPersonSETFirstName='Fred'WHERELastName='Wilson'

结果:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen10

Beijing

Wilson

Fred

Champs-Elysees

 

更新某一行中的若干列

我们会修改地址(address),并添加城市名称(city):

UPDATEPersonSETAddress='Zhongshan23',City='Nanjing'WHERELastName='Wilson'

结果:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen10

Beijing

Wilson

Fred

Zhongshan23

Nanjing

6.LIKE操作符语法

SELECTcolumn_name(s)FROMtable_nameWHEREcolumn_nameLIKEpattern

原始的表(用在例子中的):

Persons表:

Id

LastName

FirstName

Address

City

1

Adams

John

OxfordStreet

London

2

Bush

George

FifthAvenue

NewYork

3

Carter

Thomas

ChanganStreet

Beijing

LIKE操作符实例

例子1

现在,我们希望从上面的"Persons"表中选取居住在以"N"开始的城市里的人:

我们可以使用下面的SELECT语句:

SELECT*FROMPersonsWHERECityLIKE'N%'

提示:

"%"可用于定义通配符(模式中缺少的字母)。

结果集:

Id

LastName

FirstName

Address

City

2

Bush

George

FifthAvenue

NewYork

例子2

接下来,我们希望从"Persons"表中选取居住在以"g"结尾的城市里的人:

我们可以使用下面的SELECT语句:

SELECT*FROMPersonsWHERECityLIKE'%g'

结果集:

Id

LastName

FirstName

Address

City

3

Carter

Thomas

ChanganStreet

Beijing

例子3

接下来,我们希望从"Persons"表中选取居住在包含"lon"的城市里的人:

我们可以使用下面的SELECT语句:

SELECT*FROMPersonsWHERECityLIKE'%lon%'

结果集:

Id

LastName

FirstName

Address

City

1

Adams

John

OxfordStreet

London

例子4

通过使用NOT关键字,我们可以从"Persons"表中选取居住在不包含 "lon"的城市里的人:

我们可以使用下面的SELECT语句:

SELECT*FROMPersonsWHERECityNOTLIKE'%lon%'

结果集:

Id

LastName

FirstName

Address

City

2

Bush

George

FifthAvenue

NewYork

3

Carter

Thomas

ChanganStreet

Beijing

7.BETWEEN操作符

操作符BETWEEN...AND会选取介于两个值之间的数据范围。

这些值可以是数值、文本或者日期。

BETWEEN操作符实例

如需以字母顺序显示介于"Adams"(包括)和"Carter"(不包括)之间的人,请使用下面的SQL:

SELECT*FROMPersonsWHERELastNameBETWEEN'Adams'AND'Carter'

结果集:

Id

LastName

FirstName

Address

City

1

Adams

John

OxfordStreet

London

2

Bush

George

FifthAvenue

NewYork

重要事项:

不同的数据库对BETWEEN...AND操作符的处理方式是有差异的。

某些数据库会列出介于"Adams"和"Carter"之间的人,但不包括"Adams"和"Carter";某些数据库会列出介于"Adams"和"Carter"之间并包括"Adams"和"Carter"的人;而另一些数据库会列出介于"Adams"和"Carter"之间的人,包括"Adams",但不包括"Carter"。

所以,请检查你的数据库是如何处理BETWEEN....AND操作符的!

引用两个表

我们可以通过引用两个表的方式,从两个表中获取数据:

谁订购了产品,并且他们订购了什么产品?

SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersons,OrdersWHEREPersons.Id_P=Orders.Id_P

方法二:

SQLJOIN-使用Join

除了上面的方法,我们也可以使用关键词JOIN来从两个表中获取数据。

如果我们希望列出所有人的定购,可以使用下面的SELECT语句:

SELECTPersons.LastName,Persons.FirstName,Orders.OrderNoFROMPersonsINNERJOINOrdersONPersons.Id_P=Orders.Id_PORDERBYPersons.LastName

8.GROUPBY实例

我们拥有下面这个"Orders"表:

O_Id

OrderDate

OrderPrice

Customer

1

2008/12/29

1000

Bush

2

2008/11/23

1600

Carter

3

2008/10/05

700

Bush

4

2008/09/28

300

Bush

5

2008/08/06

2000

Adams

6

2008/07/21

100

Carter

现在,我们希望查找每个客户的总金额(总订单)。

我们想要使用GROUPBY语句对客户进行组合。

我们使用下列SQL语句:

SELECTCustomer,SUM(OrderPrice)FROMOrdersGROUPBYCustomer

结果集类似这样:

Customer

SUM(OrderPrice)

Bush

2000

Carter

1700

Adams

2000

很棒吧,对不对?

让我们看一下如果省略GROUPBY会出现什么情况:

SELECTCustomer,SUM(OrderPrice)FROMOrders

结果集类似这样:

Customer

SUM(OrderPrice)

Bush

5700

Carter

5700

Bush

5700

Bush

5700

Adams

5700

Carter

5700

上面的结果集不是我们需要的。

那么为什么不能使用上面这条SELECT语句呢?

解释如下:

上面的SELECT语句指定了两列(Customer和SUM(OrderPrice))。

"SUM(OrderPrice)"返回一个单独的值("OrderPrice"列的总计),而"Customer"返回6个值(每个值对应"Orders"表中的每一行)。

因此,我们得不到正确的结果。

不过,您已经看到了,GROUPBY语句解决了这个问题。

GROUPBY一个以上的列

我们也可以对一个以上的列应用GROUPBY语句,就像这样:

SELECTCustomer,OrderDate,SUM(OrderPrice)FROMOrdersGROUPBYCustomer,OrderDate

9.HAVING子句

在SQL中增加HAVING子句原因是,WHERE关键字无法与合计函数一起使用。

eg。

HAVINGSUM(OrderPrice)<2000

现在,我们希望查找订单总金额少于2000的客户。

我们使用如下SQL语句:

SELECTCustomer,SUM(OrderPrice)FROMOrdersGROUPBYCustomerHAVINGSUM(OrderPrice)<2000

结果集类似:

Customer

SUM(OrderPrice)

Carter

1700

索引

您可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

注释:

更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。

因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

10.CHECK约束

CHECK约束用于限制列中的值的范围。

如果对单个列定义CHECK约束,那么该列只允许特定的值。

如果对一个表定义CHECK约束,那么此约束会在特定的列中对值进行限制。

SQLCHECKConstraintonCREATETABLE

下面的SQL在"Persons"表创建时为"Id_P"列创建CHECK约束。

CHECK约束规定"Id_P"列必须只包含大于0的整数。

MySQL:

CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),CHECK(Id_P>0))

如果需要命名CHECK约束,以及为多个列定义CHECK约束,请使用下面的SQL语法:

MySQL/SQLServer/Oracle/MSAccess:

CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),CONSTRAINTchk_PersonCHECK(Id_P>0ANDCity='Sandnes'))

SQLCHECKConstraintonALTERTABLE

如果在表已存在的情况下为"Id_P"列创建CHECK约束,请使用下面的SQL:

MySQL/SQLServer/Oracle/MSAccess:

ALTERTABLEPersonsADDCHECK(Id_P>0)

如果需要命名CHECK约束,以及为多个列定义CHECK约束,请使用下面的SQL语法:

MySQL/SQLServer/Oracle/MSAccess:

ALTERTABLEPersonsADDCONSTRAINTchk_PersonCHECK(Id_P>0ANDCity='Sandnes')

撤销CHECK约束

如需撤销CHECK约束,请使用下面的SQL:

SQLServer/Oracle/MSAccess:

ALTERTABLEPersonsDROPCONSTRAINTchk_Person

MySQL:

ALTERTABLEPersonsDROPCHECKchk_Person

问题:

视图的使用

函数max,min的使用

scx的使用

子查询的运用

SQLDML和DDL

可以把SQL分为两个部分:

数据操作语言(DML)和数据定义语言(DDL)。

SQL(结构化查询语言)是用于执行查询的语法。

但是SQL语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了SQL的DML部分:

∙SELECT -从数据库表中获取数据

∙UPDATE -更新数据库表中的数据

∙DELETE -从数据库表中删除数据

∙INSERTINTO -向数据库表中插入数据

SQL的数据定义语言(DDL)部分使我们有能力创建或删除表格。

我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL中最重要的DDL语句:

∙CREATEDATABASE -创建新数据库

∙ALTERDATABASE -修改数据库

∙CREATETABLE -创建新表

∙ALTERTABLE -变更(改变)数据库表

∙DROPTABLE -删除表

∙CREATEINDEX -创建索引(搜索键)

∙DROPINDEX -删除索引

RDBMS

RDBMS指的是关系型数据库管理系统。

RDBMS是SQL的基础,同样也是所有现代数据库系统的基础RDBMS中的数据存储在被称为表(tables)的数据库对象中。

表是相关的数据项的集合,它由列和行组成。

在您的网站中使用SQL

要创建发布数据库中数据的网站,您需要以下要素:

∙RDBMS数据库程序(比如MSAccess,SQLServer,MySQL)

∙服务器端脚本语言(比如PHP或ASP)

∙SQL

∙HTML/CSS

比如 MSAccess、DB2、Informix、MSSQLServer、Oracle、Sybase 以及其他数据库系统。

不幸地是,存在着很多不同版本的SQL语言,但是为了与ANSI标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如SELECT、UPDATE、DELETE、INSERT、WHERE等等)。

注释:

除了SQL标准之外,大部分SQL数据库程序都拥有它们自己的私有扩展!

什么是SQL?

∙SQL指结构化查询语言

∙SQL使我们有能力访问数据库

∙SQL是一种ANSI的标准计算机语言

编者注:

ANSI,美国国家标准化组织

 

删除多个表的语句

 

mysql>showdatabases;

+--------------------+

|Database          |

+--------------------+

|information_schema|

|qdm155063477_db   |

+--------------------+

2rowsinset

mysql>useqdm155063477_db;

Databasechanged

mysql>showtables;

+---------------------------+

|Tables_in_qdm155063477_db|

+---------------------------+

|user                     |

+---------------------------+

1rowinset

mysql>descuser;

+----------+--------------+------+-----+---------+-------+

|Field   |Type        |Null|Key|Default|Extra|

+----------+--------------+------+-----+---------+-------+

|id      |varchar(255)|NO  |PRI|NULL   |      |

|username|varchar(64) |NO  |    |NULL   |      |

|password|varchar(64) |NO  |    |NULL   |      |

|desc    |varchar(255)|YES |    |NULL   |      |

+----------+--------------+------+-----+---------+-------+

4rowsinset

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2