首页 > 代码库 > SQL 语言基础
SQL 语言基础
SQL 语言基础
SQL Server是一种基于网络的大型数据库软件。主要是用SQL语言来管理、修改数据库。
一、数据库的概念组成
1、什么是SQL Server
SQL: Structred Query Language
SQL Server 是一个客户/服务器(c/s)访问模式、使用Transact-SQL语言的一个关系型数据库管理的子系统
SQL(Structed Query Languuage:结构化查询语言)
SQL是一个标准语言
T-SQL 是一个加强语言
2、SQL数据库的主要组件: 服务管理器;企业管理器;查询管理器。
3、数据库概念的具体化:是由大量数据、表间关系、以及各种数据操作对象组合的一个数据集合。它不是一个简单的数据组合场所。
4、DBMS的概念:是一个由用户使用的数据库管理软件,目的就是让用户通过操作数据管理系统完成对数据库数据的处理。
5、数据库的特点:海量存储数据,数据检索非常方便。保持数据信息的一致、完整,病实现数据的共享和安全。通过组合分析,产生新的有用信息。
6、数据库文件的组成:
新建数据库会自动生成两个文件,一个扩展名是.mdf,它是数据库的数据文件,有且只 有一个;另一个是.ldf文件,它是数据库的日志文件,会把对数据库的操作自动存下 来,有且至少有一个。
数据库分类:系统数据库、用户数据库.一个主数据文件和一个日志文件
数据库物理文件的组成:数据文件(.mdf主要数据文件或.ndf次要文件)+日志文件 (.ldf)
6、系统数据库:
①master保存所有数据库的信息(系统登录、配置设置、已连接的SERVER等)
②model创建新用户数据量的模板数据库
③msdb用来保存数据库备份、SQL Agent信息、DTS程序包、SQLSERVER任务等信息
④tompdb存有临时对象,例如临时表格和存储过程
二、数据库备份、还原、分离、附加:
1、备份:在要备份的数据库上右键点击任务,在选择备份。在打卡的对话框中根据需要选择。注意:备份过期时间不能为0,否则会马上过期。目标可根据需要放在任何位置。最后,点击确定,备份成功。
2、还原:在数据库上右键点击选择还原数据库,在目标数据库上写一个不与其他数据库重名的名字,在下面源设备中找到你要还原的数据库的mdf文件。最后,点击确定,还原成功。
3、分离:在要分离的数据库上右键点击任务,在选择分离,勾选删除链接,点击确定,分离成功。
4、附加:在数据库上右键点击附加,在打开的对话框中点击添加,找到要附加的数据库的mdf文件,点击两次确定即可。
数据库的备份文件(.bak)
数据库的数据文件(.mdf)
数据库的日志文件(.ldf)
三、数据的导入导出:
数据导入导出的作用:起到一个备份、存档的作用。
1、分类:
①、数据库文件导出成文本文件
②、文本文件导入成数据库文件
③、数据库文件与数据库文件之间的导入导出
2、注意:
在进行增、删、改操作之前要先进行备份。可预防操作错误。
①、三个删除之间的比较:drop table <表名> truncate table <表名> delete from <表名>
②、三个都是删除,但是“drop table 表名”表示将这个表从数据库中删除。“truncate table 表 名”与“delete from 表名”都是只删除数据,这个表的表头还有。不同之处在于“delete from 表名”删除文件时会产生大量的事务日志,并且可以加条件删除某些文件;但是“truncate table 表名”删除文件时会删除所有的文件,但是不会产生事务日志。
3、清除庞大事务日志的方法:
收缩数据库,收缩之前先截断事务日志(backup log with no log),然后收缩数据库。
4、系统数据库:
master 里面有用户的信息、密码、权限等所用信息,如果出现问题,会导致无法登陆。
model 模板
msdb
tempad
5、预防数据库出现问题:①、备份数据库 ②、 导入导出 ③、 复制
6、导出:
①、在目标数据库上右键点击“任务”,然后选择“导出数据”
②、在这个窗口选择正确的身份登录,以及数据库
③、下一步后,选择要导出成什么类型的文件,并且把文件放在什么位置,并且命名,然后填写身份验证
④、如下图,一般选择第一个,但是如果有特殊要求的话,可以选择第二项,并且书写正确的SQL查询语句
⑤、在源表或源视图中选择要导出的表
⑥、仔细看看上图,确认无误后,点击完成。如下图,都成功之后,就说明导出成功了。
7、导入数据:
①、首先建一个与要导入文件格式一样的一个表。(或者让数据库自己新生成一个)
②、选择正确的目标,或者让数据库自己生成③、一个与导入文件名字一样的一个表
四、新建数据库组成:
(1)数据库关系图:它能展示所有的表与表的关系
(2)表:用来存放数据
(3)视图:在创建的表的基础上创建一个虚拟的表
(4)可编程性:
存储过程:一系列操作的罗列,处理数据的方法
触发器:一个特殊的存储过程
函数:内置有函数,可以快捷、方便的操作
(5)查询:查询里可以编写代码(数据库编程语言,扩展名.sql)
(6)调试:可一步步操作,便于找出错误
(7)分析:可以选中一片代码,分析其中有无语法错误
五、SQL的快捷命令:
net start mssqlsercer 启动
net stop mssqlsercer 停止
net pause mssqlsercer 暂停
net continue mssqlsercer 继续
六、数据类型:同类型统一统称规定好的
1、数据类型包括:
①、文本类型:
char 字符
varchar 可变字符串型
varchar(50) 可变字符串型
varchar(MAX) 可变无限制字符串型
text 长文本
nchar
nvarchar
ntext
带n的是不带n的两倍
②、整数类型:
Int 整数
bingint 长整型
smallint 小整型
tinyint 微整数
③、精确数字类型
decimal(18,0) 小整数
numeric(18, 0) 数值型
④、近似数字(浮点)类型:
fliat[(n)] 浮点型
real 小数型
⑤、日期类型:
datetime(精确到3/100秒)
smalldatetime:允许范围1990.01.01-2079.6.6(精确到1分钟)
⑥、货币类型:
money 货币型
smallmoney 位数比较小货币
⑦、位类型:
bit:表示是否类型
⑧、二进制类型:
binary(50) 二进制
vbinary(50) 可变二进制型
varbinary(MAX) 可变大二进制型
image 大二进制
⑨、特殊数据类型:
xml 是一种编程语言,标记语言,有自己编程规则
2、常用的数据类型:
char(10) 字符型;
datetime 日期时间型(日期+时间);
decimal(18, 0) 小数型,双精度浮点数(小数前18位,小数后0位括号里数字可以改);
float 小数型,单精度浮点数,不如decimal精确;
image 存图像编码类型;
int 整型;
text 长文本型;
varchar(50) 存字符串型(如:一句话。可存50个字符,50可改);
varchar(MAX) 可变无限制字符串型。
七、数据库创建:
1、使用某个数据库:
use <数据库名字> //使用某个数据库
Go
drop database <数据库名字> //删除数据库
create database <数据库名字> //创建数据库
2、创建表:
create table <表名>
(
<列名> int not null; //int:整数型;not null:不可为空
<列名> varchar(20); //字符串型
<列名> datetime //时间日期型
)
Go
3、数据库 增 、删、 改、 查:
① 向表中插入数据:
insert into <表名> values(1,‘张三‘,‘1990-09-09‘)
insert into <表名> values(2,‘李四‘,‘1991-09-09‘)
insert into <表名> (<列名>, <列名>) values(3,‘王五‘)
② 添加列:
alter table <表名> add column <列名> varchar(30);
③ 修改表名:
alter table t_book rename to bbb;
④ 删除列:
alter table <表名> drop column <列名>;
⑤ 删除整个表:
drop table <表名>
⑥ 删除数据、清空数据:
truncate table <表名>
⑦ 删除整个表:
score drop table<表名>
⑧ 删除表里边的数据:
delete from <表名>
delete from <表名> where <列名>=‘王五‘
alter table:添加,修改,删除表的列,约束等表的定义。
⑨ 修改数据:
update <表名> set <列名>=‘1990-09-09‘
update <表名> set<列名>=‘1991-09-23‘ where <列名>=‘李四‘
⑩ 修改列属性:
alter table t_book modify name varchar(22);
11 修改表添加列:
alter table <表名> add sex int
12 查询的四个基本部分:
select [查询内容] from [查询对象] where[过滤条件] order by [结果排序]
13 基本查询的语法框架:
select<列名> from<表名> where<查询条件表达式> order by<排序的列名 >[ASC或DESC]
/* order by:排序ASC:升序;desc:降序。不写默认升序*/where、oreder by 可选部分
14 查询全部行和列:
select *from <表名> 使用"as"或使用“=”重新命名字段
15 查询student表中xuhao一列中为1号的
select *from student where xuhao = 1
16 查询student表中xuhao一列中学号小于2的
select *from student where xuhao < 2
17 查询student表中xuhao一列中学号小于5并且小于3的
select *from student where xuhao < 5 and 学号 > 3
例:
create database my 创建一个名为my的数据库
go go是衔接用,可有可无
use my 使用my这个数据库
go
drop database my 删除数据库my
go
create table xsb 创建一个名为xsb的表,不要忘记括号
(
学号 int not null, 列名 数据类型 可否为空值,是则不写
姓名 varchar(10),
年龄 int,
生日 datetime,
性别 varchar(10)
)
alter table xsb add 其他 varchar(50) 在表中添加一列
alter table xsb add 备注 varchar(50) not null
alter table xsb drop column 其他 删除表中的一列
drop table xsb 删除整个表
insert into xsb values (1,‘张三‘,20,‘1990 5 1‘,‘男‘) 往表中添加一整条数据
insert into xsb values (2,‘李四‘,22,‘1989 8 15‘,‘男‘)
insert into xsb values (3,‘王五‘,25,‘1985 1 21‘,‘男‘)
insert into xsb values (4,‘赵六‘,30,‘1980 9 11‘,‘男‘)
insert into xsb(学号,姓名,性别)values(5,‘赵四‘,‘男‘) 往表中添加不为空值的数据
select *from xsb 查询表中所有数据
update xsb set 学号=110 修改“学号”这一列数据都改为“110”
update xsb set 学号=120 where 姓名=‘张三‘ 修改“姓名”为“张三”的这一行的“学号”这一列数据改为“110”
delete from xsb 删除整个表中的数据(只删数据)
delete from xsb where 姓名=‘张三‘ 删除“姓名”为“王五”的这一行数据
八、主键 外键 唯一键 CHECK约束
1、主键:是唯一的,不可重复的,它能提高查询效率,但是会减慢新增数据效率
2、外键:主键是本张表的主键,是唯一且非空的,而外键是另一张表中与这张表的某个字段的类型,字段名相同的字段,一般是用作关联两张或两张以上的数据表时用的。
3、外间的取值规则:空值或参照的主键值。
①、插入非空值时,如果主键表中没有这个值,则不能插入。
②、更新时,不能改为主键表中没有的值。
③、删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
④、更新主键记录时,同样有级联更新和拒绝执行的选择。
4、主键和外键的关系:
外键表中的一列来自于主键表,受其限制
主键表中只出现一次,在外键表中出现多次
5、范式理论:
第一范式:数据库表里的每一列都要是单一数据内容,要统一
第二范式:数据库表里的每一列都尽量和主键直接相关
第三范式:主键尽量体现表中内容
6、唯一键:一个字段或者多个字段组成的数据必须是唯一的,它和主键的区别,主键不允许为空,但是唯一键允许为空值。
7、CHECK约束:
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
8、添加主键的方法:
(1)、用SQL语句
如:将学号(整数型)这一列添加为主键,并且初始值为1,并自增。
学号 int primary key identity ( 1 , 1 )
(2)、用介面操作
在要添加主键的表上右键点击选择“设计”,在要添加主键的列名上右键点击“设置主键”,在下面“标识规范”里将是标识后的选项改为是,可以修改初始值和增加量。
如:将分数表里的编号一列设置为主键,并设置自增。
9、添加外键的方法:
(1)、用SQL语句
如:将学号(整数型)这一列添加为学生表学号这一列的外键。
学号 int references 学生(学号)
(2)、用介面操作
在要添加外键的表上右键点击选择“设计”,在要添加外键的列名上右键点击“关系”,在打开的对话框里面点“表和列的规范”后的下拉列表,在出来的表和列的对话框里选择正确的主键和外键,确定后保存即可。
如:将分数表里的学号一列设置为学生表学号这一列的外键。
10、添加唯一键的方法:
(1)、用SQL语句
如:将学号(整数型)这一列添加为唯一键。
学号 int unique
(2)、用介面操作
在要添加唯一键的表上右键点击选择“设计”,在要添加唯一键的列名上右键点击“索引/键”,在打开的对话框里面点“列”后的下拉列表,在出来的索引列的对话框里选择要添加的唯一键,后面可以选择排序,确定后保存即可。
如:将分数表里的编号一列设置为唯一键。
运算符:
数学运算符:+ - * / %
复制运算法:=
比较运算符:> < <= >= != <> !< !> =
逻辑运算符:and or
优先级顺序:
先* / % 在+ - 然后是赋值= 再是比较运算符 最后是逻辑运算符
九、常用函数
1、聚合函数:Aggregate Functions
AVG(Transact-SQL):求平均分
例:求男同学平均身高
select AVG(身高)as平均身高,COUNT(*) from 表名 where 男同学=‘男‘
求组平均身高
select count(*),AVG(身高),class from <表名> group by class
COUNT:计算个数
查每个班有多少人
select count(*),class from zuoye group by class
查班男同学有几个
select COUNT (*) from zuoye where sex=‘男‘ and class=‘1‘
MAX:求最大值
例:求表中身高最高的同学
select MAX (height) from zuoye
MIN:求最小值
例:求表中身高最矮的同学
select MIN (height) from zuoye
SUM:求和
例:求表中身高总和
select SUM (height) from zuoye
2、数学函数
ABS:去绝对值(一般不用) select ABS(-1)
CEILING:绝对值,天花板,上限取整 select CEILING (1.1)
floor:地板,下限取整 select FLOOR (1.1)
PI:圆周率 select PI ()
round:数学函数,第一个参数要进行四舍五入的数,第二个参数是舍入到小数点几位 select ROUND (3.567,2)
rand:随机的意思。不是随机出来一个数,是一个种子 select RAND(10),RAND (),RAND ()
sqrt:求平方根 select SQRT (16)
例:求最高同学的平方根
select top 1 *from zuoye order by height desc
select top 5 SQRT(height) from zuoye order by height desc
square:求平方 select SQUARE (4)
例:求所有同学身高平方根之后去天花板然后等于的同学的信息显示出来
select *from zuoye where CEILING(sqrt(height))=14
求所有同学身高平方根之后去天花板然后等于的同学的姓名,身高,平方根显示出来
select name,height,CEILING (SQRT(height))from zuoye where CEILING(sqrt(height))=14
print:输出的意思,输出到消息框 print‘你好‘ print ceiling(1.2)
日期函数:
datetime类型,用来操作时间,单独获取年月日时分,对日期加减计算
DATEADD:往一个日期时间里边添加一定的时间,要通过类型指定
datepart;时刻,分钟
day:天 select DATEADD(day,3,‘2014-03-30‘)
year:年 select DATEADD (year,1,‘1990-09-09‘)
month:月 select DATEADD(month,1,‘1990-12-01‘)
week:星期
select DATEDIFF (week ,‘2013-12-31‘,‘2014-01-13‘)
select DATEDIFF (weekday ,‘2013-12-31‘,‘2014-01-13‘)
datediff:取时间差
select DATEDIFF (year,‘2011-09-22‘,‘2014-01-01‘)
select DATEDIFF (MONTH ,‘2013-12-31‘,‘2014-01-01‘)
select DATEDIFF (DAY ,‘2014-12-31‘,‘2014-01-01‘)
select DATEDIFF (DAY ,‘2013-12-31‘,‘2014-01-01‘)
select DATEDIFF (week ,‘2013-12-31‘,‘2014-01-01‘)
DATENAME:单独返回日期时间中的年月日时分秒,或者星期,第几周
select datename (week ,‘2013-12-31‘)
select datename (day,‘2013-12-31‘)
select datename (MONTH ,‘2013-12-31‘)
date:日期时间
datepart:年月日时分秒
DATEPART:取指定段整数
select datepart (week ,‘2013-12-31‘)
select datepart (day,‘2013-12-31‘)
select datepart (MONTH ,‘2013-12-31‘)
day::返回月份的第多少天 select DAY (‘201‘)
isdate:判断日期时间是否正确 select ISDATE (‘2014-02-28‘)
month:获取月份 select MONTH (‘2014-11-25‘)
year:获取年份 select year (‘2014-11-25‘)
sysdatetime:获取系统时间 select sysdatetime ()
GETDATE:返回数据库所在时间 select GETDATE ()
例:查年1990年出生信息
select *from zuoye where YEAR(birth)=1990
select name,year(birth)from zuoye
SQL 语言基础