数据库概论--关系数据库标准语言SQL

1.SQL语言的基本概念与特点

SQL语言:结构化查询语言

1.1SQL语言的发展

SQL是1986年由美国ANSI颁布的一中关系数据的语言。SQL-86(第一标准)

ISO于1987年6月正式采纳它为国际标准

经历了SQL-89、SQL-92(SQL2)、SQL-99(SQL3)等改进

不同数据库厂商的DBMS提供SQL语言大同小异。

SQL Server使用的SQL语言称为T-SQL——应用程序与SQL Server沟通语言

1.2SQL的基本概念

1、基本表(table)

二维表,用于存放数据的

2、视图(view)

是一个虚表,是从一个或几个基本表抽取出一些属性和记录构成的表。特点:只定义,不存储数

1.3SQL语言功能及特点

一、功能

数据定义功能、数据控制功能、数据查询功能、数据操作功能

二、特点

1、类似英语的自然语言,语法简单,命令不多

2、一体化语言可以完成数据库活动的全部工作

3、非过程化的语言,只要告诉计算机"做什么"即可

4、是面向集合的语言,每个命令的操作对象都是一个或多个关系,结果也是一个关系。

5、是一种自含式语言:可以独立使用交互命令。也是一种嵌入式语言:嵌入到其他编程语言中

2.创建数据库

2.1数据库的结构

1、文件

含义

一个数据库保存为1个多个文件,这些文件称为数据库文件。

类型

主数据文件:存放数据库的启动信息、存放数据。每个数据库必有一个主数据文件。扩展名是.mdf

次数据文件:用于存放部分数据。一个数据库可没有或有多个次数据文件。扩展名是.ndf

事务日志文件:事务日志记录了SQL Server所有的事务及每个事务对数据库所作的操作。其作用:用于存放恢复数据库的日志信息。每个数据库可有一个或多个日志文件。扩展名是.ldf

2、文件组

SQL Server允许将多个数据库文件组成一个,以便于管理和分配数据。

主文件组:包括主数据文件、没有指明组的其它文件

次文件组:用户自定义文件组。

2.2SQL数据库分类:系统数据库和用户数据库,安装时会创建4个系统数据库。

Master数据库

是SQL Server系统最重要的数据库,它用来跟踪与记录SQL Server的相关系统级信息。包括:

所有的登录信息

所有的系统配置信息

SQL Server的初始化信息

其他数据库的相关信息。

Model数据库

用作在SQL Server实例上创建的所有数据库的模板。对方model数据库的修改将应用于以后创建的所有数据库。

Msdb数据库*

代理服务数据库,代理用来调度报警和作业记录操作员信息,有关数据库备份和还原的记录也会写在该数据库里。

Tempdb数据库*

是一个临时数据库,它为所有的临时表、临时存储过程及其他临时操作提供存储空间

2.3创建用户数据库——数据库文件的属性

(1)文件名及其位置:名字不能超过128个字符,位置可自行选择。

(2)初始大小:初始大小可自行设定,但不能小于MODEL数据库模板的大小。至少3MB        size

(3)增长方式:可选择是否自增长。filegrowth

增长方式:以几MB增长或者以百分比增长

(4)最大大小:最大空间限制,默认无限制。建议要进行限制。Maxsize=unlimited

2.5修改数据库

Alter database 数据库名

ADD FILE

ADD LOG FILE

REMOVE FILE

MODIFY FILE (NAME=file_name,SIZE=100mb)

MODIFY NAME=NEWNAME

2.6删除数据库

dorp database 数据库名

3.创建与维护关系表

3.1数据类型*

(1)精确数值

计算机中能够精确存储的数据。

Bigint:占8个字节,范围-2^63~2^63-1。

Int:占4个字节,范围-2^31~2^31-1.

Smallint:占2个字节,范围-2^15~2^15-1

Tinyint:占1个字节,0~255的整数。

Bit:1位,0和1。

定点精度和小数位数

Numeric(p,s)和Decimal(p,s)p是小数点左右两边的十进制位数之和,s是小数的位数。范围-10^38+1~10^38-1。

规则:p是小数点左右两边数字总位数,s是小数位数,0<=s<=p<=38,整数部分<=p-s。

(2)近似数值

浮点型数据。

Float[(n)]:n如果是1~24之间,则使用24,占4个字节;如果25~53或者省略,则使用53,占8个子句。

Real占4个字节。

3.字符串数据类型

用于存储各种字符。

普通编码:英文字母占1个字节,汉字占2个子句

使用统一字符编码unicode,则全占2个字节

(1)普通编码:

Char(n):n个字节存储空间。少则在后补空格

Varchar(n):可变长的字符串类型,存储空间为字符串数+2个字节额外开销

未指定你n时,默认为1,N的取值范围是1~8000

Char和Varchar比较?

Varchar比较节省空间,但是系统开销比char要更大,处理速度也更慢一些。

因此,一般如果n值比较小时,建议使用char

Text:最多可以存储2^31-1个字符,每个字符占1个字节。

Varchar(max)最多可以存储2*31-1个字符,存储空间为字符数+2个字节开销。

(2)统一字符编码:unicode

Char(n):n*2个字节存储空间。少则在后补空格

Varchar(n):可变长的字符串类型,存储空间为字符串数*2+2个字节额外开销

N的取值范围1~4000

Ntext:最多可存储2^30-1个统一字符编码的字符。空间2*字符数。

Nvarchar(max):最多可以存储2^30-1个统一字符编码的字符。空间2*字符数+2个字节

3.二进制字符串类型

使用十六进制如0xBF

Binary(n):固定长度二进制,n的取值1-8000

Varbinary(n):可变长度二进制数据,n取值1-8000

Image:可变长二进制数据,2^31-1个十六进制数字

Varbinary(max):可变长二进制数据,2^31-1个十六进制数字

4.日期时间类型

Date:日期0001-01-01到9999-12-31(YYYY-MM-DD)

Time[(n)]:时间00:00:00.0000000到23:59:59.9999999(hh:mm:ss.0000000)

Datetime:日期时间YYYY-MM-DD hh:mm:ss.nnn(1753-01-01到9999-12-31,00:00:00到23:59:59:59.997)

Smalldatetime:秒始终为00。1900-01-01——2079-06-06(YYYY-MM-DD hh:mm:00)

5.货币类型

Money:占8个字节,精确到小数后4位-922337203685477.5808~922337203685477.5807

Smallmoney:占4个字节,精确到小数后4位-214748.3648~214748.3647

属于精确数值类型,小数点后面固定四位精度

3.2创建表与约束

1.表:存放数据的二维表,数据库的基本对象。

语法:CREAT TABLE student(列1,列2,列3,列4)

2.定义列:列的名称数据类型约束

3.约束:是否允许空,主码约束,外码约束,列的取值范围约束等。列级完整性约束和表级完整性约束。


4.创建表的完整语法:

CREATE TABLE name(

        字段名1  数据类型    约束,

        字段名2  数据类型    约束,

        ...

        字段名n  数据类型    约束

);

也可以给约束起个名字:constraint  约束名  约束内容

5.修改表结构的语法

ATER TABLE 表名

ATER COLUMN 列名 新数据类型

ADD 列名 数据类型 约束

DROP COLUMN 列名

ADD CONSTRAINT TYPELIMIT CHECK(TYPE IN ('必修','选修','重修'))

DROP CONSTRAINT 约束名

DROP TABLE 表名

4.单表查询

查询:基本表中选出用户想要的数据

4.1查询语句的基本结构

SELECT 字段1,字段2,...,字段n

FROM 表名

WHERE 条件语句

GROUP BY 分组依据列

HAVING 组筛选条件

ORBER BY 字段 DESC|ASC

4.2无条件的单表查询

选择表中的若干——投影运算

注意:列次序可变。要显示全部列可以用"*"

去重复:distinct

4.3查询满足条件的行

WHERE子句中设置查询条件

4.4部分匹配查询

一般形式:列名 [NOT] LIKE <匹配串>

匹配串中可包括如下四种通配符:

_:匹配任意一个字符;

%:匹配0个或多个字符;

[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连续字符"-"表达);

[^]:不匹配[ ]中的任意一个字符。

4.5常用库函数及统计汇总查询

SQL提供的统计函数有:

COUNT(*):统计表中元组个数;

COUNT([DISTINCT] <列名>):统计本列列值个数;

SUM(<列名>):计算列值总和;

AVG(<列名>):计算列值平均值;

MAX(<列名>):求列值最大值;

MIN(<列名>):求列值最小值。

上述函数中除COUNT(*)外,其他函数在计算过程中均忽略NULL值。

说明:可对整个表进行统计也可以分组统计

注意:

统计函数不能出现在WHERE子句中。

GROUP BY子句中的分组依据列必须是表中存在的列名,不可使用别名。

带有GROUP BY子句的SELECT语句的查询列表中只能出现分组依据列统计函数

3.6查结果排序

ORDER BY:可以对查询结果进行排序。

排序子句为:

ORDER BY <列名> [ASC|DESC][,<列名>...]

说明:按<列名>进行升序(ASC)或降序(DESC)排序。

5.多表查询

若一个查询同时涉及两个或两个以上的表,则称之为连接查询连接查询是关系数据库中最主要的查询。

连接查询包括内连接、外连接和交叉连接等。

5.1内连接的格式:等值连接

FROM 表2 [inner] JOIN 表2 ON 连接条件

连接条件:表1.字段1 = 表2.字段1

连接的执行过程

1)从表1取出第1个元组

2)扫描表2中满足条件的元组,找到后将两个元组拼接起来。

3)接着取表1的第2个元组,继续扫描表2

注意:在两个连接的表中如果有存在相同名称的字段,进行查询时需在刻字段前标明是属于那个表的字段。表名.字段名

另外,可以给表取别名后,不能再使用原名

5.2外连接查询

内连接只查询满足连接条件的记录

假如:要显示每个学生的选课门数,包括有选课的和没有选课的学生

外连接:参与连接的表有主从之分,以主表的每行数据去匹配从表的数据列,如果符合条件则直接返回结果集中,不符合条件的则填上NULL。

外连接语法格式

FROM 表1 LEFT [outer] JOIN 表2 ON 连接条件

FROM 表1 RIGHT [outer] JOIN 表2 ON 连接条件

注意:全部要显示的表如果写在左边,就LEFT如果写在右边就RIGHT。

6.子查询

一个SELECT语句1嵌套在另一个SELECT语句2中,则称为子查询或内层查询

而包含子查询的语句则称为主查询或外层查询

通常情况下,子查询语句用在外层查询的WHERE子句HAVING子句中,子查询用圆括号括起来

6.1普通子查询

先执行子查询,后执行父查询

1.返回一个值的普通子查询

2.返回一组值的普通子查询

形式:WHERE 字段名 IN (子查询)

7.其他查询

7.1UNION

实现合并多个查询结果的目的。

语法格式:SELECT 语句1

                  UNION [ALL]

                  SELECT 语句2

                  UNIION [ALL]

                  ...

                  SELECT 语句n

规则:ALL表示包括重复的记录。

(1)所有查询语句的列的个数和顺序必须相同

(2)所有查询语句中的列的数据类型必须兼容

(3)ORDER BY语句要放在最后一个查询语句的后边。

2.如果希望查询结果保存到一个表中,可通过在SELECT语句中使用INTO子句实现。

语法格式:

SELECT 查询列表序列 INTO <新表名>

FROM 数据源

新表:分为永久表临时表

永久表:存储在磁盘的表。——类似create table

临时表:存储在内存中的表,根据使用范围又分为局部临时白哦和全局临时表,局部临时表在表名前加"#",全局临时表则在表名前加"##".

8.数据操纵

8.1添加数据

语法格式为:

INSERT INTO <表名> [(<列表名>)]

        VALUES (值表)

功能:新增一个符合表结构的数据行,用值给对应的字段赋值(顺序必须一致,个数必须一致,数据类型必须一致)。

注意:如果<表名>后边没有指明列名,则会插入记录的值的顺序必须与表中的列的定义顺序一致,且每一个列均有值(可以为空)

8.2更新数据

语法格式:

UPDATE 表名 SET 字段=值 WHERE 更新的条件

注意:涉及多表连接的条件更新

UPDATE 表名 SET 字段=值

FROM 表1 JOIN 表2 ON 表1.A=表2.A

WHERE 更新条件

8.3删除数据

语法格式:

DELETE FROM 表 WHERE 删除的条件

(1)基于本表条件的删除

注意:涉及多表连接的条件删除

DELETE FROM 表

FROM 表1 JOIN 表2 ON 表1.A=表2.A

WHERE 删除的条件

9.视图

视图:为了满足不同用户对数据的需求而建立的虚拟表。(即从基本表中抽取瞒足用户所需的数据)

视图可从表中提取数据,也可以从其他视图中提取数据,构成新的视图(虚表)。对视图数据的操作最终都会转换为对基本表的操作。

9.1特点:

数据库只存储视图的定义,不存储视图所包含的数据。

视图数据始终与基本表保持一致。节省空间。对视图的操作最终都会转换为对基本表的操作。

9.2创建

语法格式:

CREATE VIEW 视图名称 (列名1,列名2,列名3) AS SELECT 语句

规则:查询语句中通常不包含ORDER BY和DISTINCT列名要么全写,要么省略

不省略:

①某个查询列不是简单的列,并且没有为这样的列取别名;

②多表连接时选出了多个同名的列;

③需要为某个列选用更合适的列名。

9.3修改视图

ALTER VIEW 视图名 AS SELECT...

9.4删除视图

DROP VIEW 视图名

9.5视图的作用

1、简化数据查询语句

2、使用户能从多角度看待同一数据

3、提高了数据的安全性

4、提供了一定程度的逻辑独立性

10.索引

索引:通过对数据建立方便查询的搜索结构,以达到加快查询效率的目的。

分类:聚集索引和非聚集索引

聚集索引:数据按索引列进行物理排序,一个表只能有一个聚集索引。

非聚集索引则不物理排序,所以一个表可以有多个非聚集索引。

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值