SQL Server 数据库(基础)

1.0 数据库及数据库系统

1.1数据库是什么

        计算机存储设备有组织的存储数据库的地方

1.2 数据库系统(DBS)

        存放在存储设备的数据集合的管理数据的计算机软件

1.3 数据库管理系统(DBMS)

        管理数据库

常见的数据库(DB) SQL Server 、 My SQL、 Oracle
1.4 数据库的作用

1、存储大量数据,方便检索和访问
2、保持数据信息的一致,完整
3、共享和安全
4、通过组合分析,产生新的有用信息

1.5 应用程序

作用:响应操作并显示结果,向数据库请求数据
要求:美观、操做方便

1.6 注

SQL Server的注释符 –
SQL Server 不区分大小写
分隔符 GO

2.0 管理数据库

2.1 创建数据库

create database 数据库名称

2.2 判断数据库是否存在
if exists (select * from sysdatabases where name = '数据库名')  
	drop database 数据库名
2.3 使用数据库

use 数据库名称

数据库:存放数据库数据和数据库对象文件

2.4 删除数据库

drop database 数据库名称

2.5 创建数据表
create table 数据表名称
(
--字段1 数据类型 属性 约束,
--字段2 数据类型 属性 约束,
·· · ·
)
2.6 判断表是否存在
if exists (select * from sysobjects where id = object_id(N'[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)  
  	drop table [表名]
if object_id(N'tablename',N'U') is not null
print '表存在'
else 
print '表不存在'
2.7 删除数据表

drop table 数据表名称

2.8 判断某表的某字段是否存在
if (not exists(select * from syscolumns where id=object_id('表明') and name='字段名'))  
print '字段存在'
else 
print '字段不存在'

3.0 SQL Server 数据类型

Character 字符串:

数据类型 描述 描述
char(n) 固定长度的字符串。最多 8,000 个字符。 n
varchar(n) 可变长度的字符串。最多 8,000 个字符。
varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。
text 可变长度的字符串。最多 2GB 字符数据。

Unicode 字符串:

数据类型 描述 存储
nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。
nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。
nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。
ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。

Binary 类型:

数据类型 描述 存储
bit 允许 0、1 或 NULL
binary(n) 固定长度的二进制数据。最多 8,000 字节。
varbinary(n) 可变长度的二进制数据。最多 8,000 字节。
varbinary(max) 可变长度的二进制数据。最多 2GB 字节。
image 可变长度的二进制数据。最多 2GB。

Number 类型:

数据类型 描述 存储
tinyint 允许从 0 到 255 的所有数字。 1 字节
smallint 允许从 -32,768 到 32,767 的所有数字。 2 字节
int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 4 字节
bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节
decimal(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 5-17 字节
numeric(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 5-17 字节
smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节
money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节
float(n) 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 4 或 8 字节
real 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 4 字节

Date 类型:

数据类型 描述 存储
datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 8 bytes
datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 6-8 bytes
smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 bytes
date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
time 仅存储时间。精度为 100 纳秒。 3-5 bytes
datetimeoffset 与 datetime2 相同,外加时区偏移。 8-10bytes
timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。

其他数据类型:

数据类型 描述
sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。
uniqueidentifier 存储全局标识符 (GUID)。
xml 存储 XML 格式化数据。最多 2GB。
cursor 存储对用于数据库操作的指针的引用。
table 存储结果集,供稍后处理。

二进制数据类型: image
文本数据类型: char    varchar    Nchar    nvarchar    text    ntext
日期和时间: date    time    datetime    datetime2    datetimeoffset

4.0 数据完整性

1、实体完整性
2、域完整性
3、引用完整性(参照完整性)

5.0 创建约束

5.1 主键约束:
alter table 表名
add constraint 约束名 primary key (字段名) 约束说明
5.2 外键约束:
alter table 表名
add constraint 约束名 foreign key 表名 references 表名 (字段名)约束说明
5.3 检查约束:
alter table 表名
add constraint 约束名 check(范围)约束说明
5.4 默认约束:
alter table 表名
add constraint 约束名 default (‘默认字符’) for (字段名) 约束说明
5.5 唯一约束:
alter table 表名
add constraint 约束名 unique(字段) 约束说明
5.6 删除约束:
alter table 表名
drop constraint 约束名

6.0 数据库操纵语言

6.1 向数据库中插入数据
--插入单行数据:
insert into 表名 (字段名) values (值)
--插入多行数据:
insert into 表名 (字段1,字段2, ·· · · )
select1,2, · · · union,
select1,2, · · · union,
select1,2, · · ·
6.2 select 查询
select 字段1,字段2, · · · from 表名 [where 条件]
--或
select * form 表名 [where 条件]
6.3 删除数据表中的数据
--删除单条数据:
delete from 表名 [where 条件]
--删除表中所有数据:
truncate table 表名 	-- 执行效率高  有外键约束不能使用

4、修改数据表中的数据

update 表名 set 字段名 =[where 条件]

7.0 T-SQL

7.1 T-SQL的组成

数据定义语言:用来建立数据库,数据库表和定义其列,大部分都是create开头
数据操纵语言:例如 select update insert delete 等
数据控制语言:例如 grant revoke 等
流程控制语言:用于设计应用程序的语句 例如 if where case 等

7.2 T-SQL的运算符和表达式

1、常量
        由一个或多个字符(‘a‘,‘abc‘)数字或符号组成

字符和日期需要用单引号括起来,二进制字符和数字不需要

2、列名(字段名): 数据表中列的名称

7.3 SQL算术运算符:
操作符 描述 例子
+ 加法 -添加任一侧上的操作符的值 a + b 得到 30
- 减法 - 从左边减去右边操作数的操作 a - b 得到 -10
* 乘法 - 操作符两侧的值相乘 a * b 得到 200
/ 除 - 将左边除右边的操作数(取模) b / a 得到 2
% 模量 - 将左边用右手操作,并返回操作数的余数 b % a 得到 0
7.4 SQL比较操作符:
操作符 描述 例子
= 检查如果两个操作数的值是相等或不相等,如果是的话,条件为真。 (a = b) is not true
!= 检查如果两个操作数的值是否相等,如果值不相等,则条件为真。 (a != b) is true
<> 检查如果两个操作数的值是否相等,如果值不相等,则条件为真。 (a <> b) is true
> 检查值,如果左操作数大于右操作数的值,如果是的话,条件为真。 (a > b) is not true
< 检查如果左操作数的值小于右操作数的值,如果是的话,条件为真。 (a < b) is true
>= 检查如果左操作数的值大于或等于右操作数的值,如果是的话,条件为真。 (a >= b) is not true
<= 检查如果左操作数的值小于或等于右操作数的值,如果是的话,条件为真。 (a <= b) is true
!< 检查如果左操作数的值不小于右操作数的值,如果是的话,条件为真。 (a !< b) is false
!> 检查如果左操作数的值是不大于右操作数的值,如果是的话,条件为真。 (a !> b) is true
7.5 SQL逻辑运算符:
运算符 描述
ALL 所有运算符用于比较的值到另一个值组中的所有值。
AND AND运算符允许多个条件的存在,在一个SQL语句中的WHERE子句。
ANY ANY 运算符用于比较的值在列表中根据任何适用的条件。
BETWEEN BETWEEN运算符用于搜索一组值的范围内的值,给定的最小值和最大值。
EXISTS 存在指定的表中符合特定条件的运算符用于搜索存在的一行记录。
IN IN操作符用来比较的文字值已指定一个值的列表。
LIKE LIKE运算符用于比较相似的值,使用通配符的值。
NOT NOT运算符的含义相反的逻辑运算符,它被使用如 NOT EXISTS, NOT BETWEEN, NOT IN 等,这是一个相反的运算符。
OR 使用OR运算符结合SQL语句的WHERE子句中的多个条件。
IS NULL NULL操作符用来比较NULL的值。
UNIQUE 独特的操作符搜索指定的表中的每一行的唯一性(不重复)。
7.6 SQL 中的通配符:
通配符 描述
% 包含零个或多更多字符的任意字符串
_ 仅替代一个字符(任何单个字符)
[] 指定范围(例如[a-f])或集合(例如[1,3,5,7])内的任意单个字符
[^] 不在指定范围(例如[a-f])或集合(例如[abcdef])内的任意单个字符

注:使用时通配符和字符串要用单引号括起来

8.0 为字段设置别名(三种)

原字段名 as 字段别名
字段别名 = 原字段名
原字段名 字段别名

9.0 数据操纵

9.1 计算字段
select 字段名 +-+ 字段名 as ‘别名’
9.2 ALL关键字返回全部记录
select  all  字段1,字段2, · · · from 表名
9.3 DISTINCT关键字过滤重复记录
select  distinct 字段名 from 表名
9.4 TOP显示前面若干条记录
select  top n 字段名 from 表名
9.5、范围运算符
between · · · and · · ·
not Between · · · and · · ·
--eg:  select 字段名 from where 字段名 between n and n
9.6、对查询的结果进行排序( order by 子句)(ASC 升序 / DESC 降序)
 --单行 eg:
select * from 表名 where 条件
order by 字段名 排序方式

--多行 eg:
select * from 表名 where 条件
order by 字段名 排序方式, 字段名 排序方式

--order by 子句 与 top 关键字一起使用
select top [n] * from 表名 where 条件
order by 字段名 排序方式
9.7 对查询结果计算
--1、使用SUM函数计算字段的累加和
select SUM(字段名)  字段别名 from 表名 where 条件

--2、使用AVG函数计算字段的平均值
select AVG(字段名)  字段别名 from 表名 where 条件

--3、使用MAX和MIN函数计算字段的最大值和最小值
select MAX(字段名)  字段别名, MIN(字段名) 字段别名 from 表名 

--4、使用COUNT函数统计记录行数
select  COUNT(*) 字段别名 from 表名 
9.8 查询结果分组
--使用 group by 子句
--eg:
select 字段名 AS 字段别名 , COUNT(*) AS 别名 from 表名 group by 字段名
--注:
--字段列表中的每个字段必须在 group by 子句中出现或者用在某个聚合函数中

10.0 联表查询

--1、内部链接基本语法
select 字段列表 from1 inner join2 on 条件表达式

--2、更复杂的联接基本语法
select 字段列表 from1 inner join2 on 条件表达式1 inner join3 条件表达式2 · · ·

--3、外部联接查询
--外部联接分为左外部联接(left outer join)和右外部联接(right outer join)两种
--主表在join左边则为左外部联接,主表在join右边则为右外部联接
--基本语法:
select 字段列表 from1<left/right>[outer] join2 条件表达式

--4、交叉联接基本语法(cross join)
select count(*) 字段别名 from1 cross join2
11.0 集合运算
--1、使用UNION和UNION ALL进行并集运算
--eg:
select 字段列表 from 表名 where 条件1
	unionunion allselect 字段列表 from 表名 where 条件2

--注:
union 不允许有重复值,union all 允许有重复值
union 返回值的结果集的标题仅从第一个查询获得

--2、使用 INTERSECT进行交集运算
--eg:
select 字段列表 from 表名 where 条件1
	intersect
select 字段列表 from 表名 where 条件2

--3、使用EXCEPT进行减集运算
--eg:
select 字段列表 from 表名 where 条件1
	except
select 字段列表 from 表名 where 条件2
发布了48 篇原创文章 · 获赞 55 · 访问量 4462

猜你喜欢

转载自blog.csdn.net/qq_43562262/article/details/104927043