SQL Server 入门一

小提示这个博客编译容易有一个小疏忽:离开此网站,保存内容可能不完整。
刚刚第一次编译剩下二三百字的收尾,现在要重头再来。这种感觉:嗯儿,还好。。
最后完成时,在个人中心页–文章管理处,发现了上一篇“草稿”。。敲代码真是一条修仙的路啊,性子躁躁的人都可以磨得对它没脾气~
SQL Server系列一是一天的成果,在焦急沉淀平静中,记下今日:在心里无数次的觉得从前不追求专注学习的自己宛如智障。现在除了专注,更需要效率。
学习使人忘记时间,更有一种很吸引人的成就感。
我们都会遇见很多bug,一次次找bug,百度搜索+自己琢磨=思维螺旋上升
希望看到我博客的朋友,无论何时何地,一定要保持学习力,这是明天不会后悔今天的东西~~

SQL Server 前言


1.数据表(DataTable)
2.行(Row) ---->称为 记录
3.列(Column)---->称为 字段

4.文件
Test.mdf主数据文件
Test_log.ldf日志文件

ps:bit位 1字节 = 8位 只有0和1

5.主键:用来唯一确定一条记录的字段
(1) 作用:保证数据的唯一性
(2) 特点:1.唯一性 2.不能为空
(3)分类:
1.逻辑主键(1.自增字段。1号进来就是1,2号进来就是2 2.GUID保证字符串唯一性 )
2.业务主键(业务逻辑中出现的字段作为主键 eg:学号)
3.组合主键(联合主键)
(4)选择主键的策略:
1.不使用组合主键
2.选不会修改的列做主键
3.一般情况下,都推荐使用自增字段。不要使用业务字段来当主键。

6.数据冗余:大量重复的数据,浪费存储空间。
维护困难:数据安全性(数据完整性)

7.数据类型:
(1)整数类型:int,smallint,bigint,decimal(精确存储)
ps:电话号码用字符串
(2)实数类型:float,real
(3)字符串类型:
① char/nchar
②varchar/nvarchar
(4)有没有var的区别:
①带var的叫可变长度的字符串类型,不带var的是定长的字符串。
②当我们记录的数据有定长度时,选用定长的(char/nchar)。
③当我们无法确认记录的数据有多长时,选用变长的(varchar/nvarchar)。

优缺点:
定长:容易浪费存储空间,但是查询效率高一点。
变长:节省存储空间,但是查询效率低一点。

(5)n的区别:
带n的数据类型是采用Unicode编码的,不带n的是采用非Unicode编码。
Unicode采用2个字节存储1个字符。 汉字需要2个字节存储,其他符号需要1个字节。

什么时候使用带n的:当这个字段要存储比较多的汉字时,一定要使用带n的。

(6)这4种数据类型在使用时都必须制定它的最大长度:
nvarchar(12)可存12个汉字 12个英文字母
varchar(12) 可存6个汉字
char(12) 可存6个汉字 12个英文字母

最大长度:char/varchar(8000),nchar/nvarchar(4000)

(7)text/ntext:超大文本

图片类型:image,是以二进制的形式把图片存入到数据库文件中。但是,一般很少这么做。
一般是把图片以文件的形式存放在服务器上,数据库里只存放图片的路径。只有当对图片的安全性要求特别高时,才把图片直接存入数据库。

(8)日期类型:datatime
货币类型:money,smallmoney

字符串的长度应该使用2的n次方

8.约束(用来保证数据完整性)
(1).主键约束 primary key
(2).外键约束 foreign key
(3).非空约束 not null/null
(4).默认值约束 default
(5).唯一性约束 unique
(6).Check约束 check:取值范围

SQL Server正文

SQL:结构化查询语言(Structured Query Language)
SQL语句:就是我们通过程序与数据库进行“沟通”的语言。
SQL:是一种标准

市场上有很多DBMS,所有的关系型数据都支持标准SQL,但是各个厂商也制定了自己独特1的语句。
Eg:微软的MS SQL Server,它里面有一种叫做T-SQL的语句,就是对标准SQL做出的扩展。

SQL语句分类:
1)DDL:数据定义语句(创建数据库,创建表)
2)DML:数据操作语句(对数据的增删改查)
3)DCL:数据库控制语句(控制用户的权限,取消授权)

呼出和隐藏"结果视图"快捷键:ctrl+r

一.基本的Create database语句

–1.创建School库

create database School

–2.删除已有的库

drop database School

–3.创建School库标准版

create database School
on primary--主数据文件参数
(
  name = 'SchoolMain',--主数据文件逻辑名称
  size = 10mb,--初始大小
  filegrowth = 10%,--文件增长比例
  fileName = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\School.mdf',--绝对路径
  maxsize = 100mb
)
log on 
(
  name = 'SchoolLog',--日志文件
  size = 10mb,
  filegrowth = 10%,--文件增长比例
  fileName = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\School_log.ldf',
  maxsize = 100mb
)

–4.SQL语句创建数据表
–保存库文件很重要,更要注意保存SQL脚本文件

create database Test
go
--SQL语句创建数据表:TbClass
--语法:create table [表名]
--      (
--         字段名 数据类型 [约束]
--         ...
--       )
use Test--使用Test库,作为当前查询的库
go
create table TbClass
(
  clsId int primary key identity(1,1),--班级编号,自增,主键
  clsName nvarchar(16) unique,--唯一性约束
  clsTeacher nvarchar(4),--什么都不写,就是默认可以为null
  clsNumber smallint check(clsNumber>=20 and clsNumber<=80) --check约束
)
--最后一个字段可以不加逗号
--go不是SQL语句,它只是MS SQL Server的一个命令
--go可以把一个SQL脚本文件上的众多SQL语句,分为多个批次发送给数据库引擎去执行,
--这样可以让不能同时选中执行的SQL语句,能够一次全选中,点执行提交
go
create table TbStudent
(
   stuId int identity(1,1) primary key,--主键
   stuName nvarchar(4) not null,--不为空
   stuNumber char(9) unique,--学号,唯一
   stuGender bit default(1),--默认值约束
   stuAddress smallint,
   stuPhone char(11),
   stuClassId int foreign key references TbClass(clsId)--外键约束
)
go
--删除库
--dorp database Test

二.Insert 和 select作用

–1.标准insert插入数据语句,语法:
insert into 表名 values(值列表)

insert into TbClass(clsName,clsTeacher,clsNumber)
values('14级数据库班','李俊峰',34)
insert into TbClass(clsTeacher,clsName,clsNumber)
values('东哥','13嵌入式班',67) 

2.省略某些字段的insert语句,not null的字段不能省略

insert into TbClass(clsName,clsNumber) values('14级.NET班',32)

3.如果想让所有的字段都有值,省略全部字段列表

insert into TbClass values('13.NET班','吴',48)

4.select语句基础
–(1)基本语法:select [字段列表] from [表名]:查询出该表的所有记录

select clsId,clsName,clsTeacher,clsNumber from TbClass

–(2)只查询若干字段

select clsName,clsTeacher from TbClass

–(3)如果想要查看所有字段,可以使用‘*’代替字段列表

select * from TbClass

三.[]的作用

--[]的作用:避免字段名与关键字的冲突,但是不要使用关键字做字段名或者表名

SELECT [clsName],[clsTeacher] FROM [TbClass]

四.Insert插入数据高级部分

use Test
go
1.一条insert语句录入多条记录

--语法:insert into[表名](字段列表)
--      select [值列表] union,
--      select [值列表] union,
--      ......
--      select [值列表]

select * from TbClass

案例
insert into TbClass
select '16级IOS班','吕布',40 union
select '16级android班','吕布',40 union
select '16级大数据班','马超',40 union
select '16级大数据班','马超',40 union
select '16级大数据班','马超',40 union
select '16级云计算班','典韦',40
select * from TbClass

2.union关键字,剔除重复记录。
–如果录入多条重复的记录,会被union删除掉。
–如果要插入重复的记录,需要在union后面添加all关键字,使用union all

insert into TbClass
select '16级IOS班','吕布',40 union all
select '16级android班','吕布',40 union all
select '16级大数据班','马超',40 union all
select '16级大数据班','马超',40 union all
select '16级大数据班','马超',40 union all
select '16级云计算班','典韦',40

3.把一个数据表中的记录,备份到另外一个目前不存在的表中

--语法:select [字段列表] into [新表名] from [旧表名]

–案例:把TbClass中的记录,备份到TbClassBak中

select * into TbClassBak from TbClass

在做项目的时候,千万不能用*代替字段列表

4.向一个已经存在的表里,录入另一个表中的数据

--语法:insert into [新表名]([字段列表])

– 案例 select([字段列表]) from [旧表名]

select * from TbClass

insert into TbClassBak(clsName,clsNumber,clsTeacher)
select clsName,clsNumber,clsTeacher from TbClass

5.汉字乱码的问题 解决方法
–(1).把字段类型改成带n的字符串类型
–(2).在录入数据的时候,在字符串前面加1个N

use T2
drop table t
create table t
(
  name nvarchar(4)
)
insert into t values(N'吴鑫')
insert into t values(N'东哥')
select * from t

select * from TbStudent

–五.复杂的select查询

1.给列起别名

select stuName as '姓名',--第一种起别名方法
stuNumber 学号,--第2种起名方法
性别 = stuGender--第3种起别名方法
from TbStudent

–2.select关键字后,可以跟任何表达式,往往用在给查询结果构造一个表中没有的字段

  select stuName,stuNumber,stuGender,是否党员= '是' from TbStudent
  select * from TbStudent

–3.查询出学生的出生年份

select stuName,stuNumber,出生年份=2019-stuAge from TbStudent

–4.构造新的无字段列

select *,'未婚' from TbStudent

–六.where子句(条件查询)

where子句一定要放在被查询的表名的后面
–1.查找性别为女的所有数据,SQL Server中判等使用**=**

select * from TbStudent where stuGender = 0 

–2.大小范围比较,关系运算:=,>,<,>=,<=,!=(不等于)

select * from TbStudent where stuAge>20 and stuAge<25

–3.逻辑运算:and or not

select * from TbStudent where stuClassId != 2

–4.between…and…范围比较,between…and包含两端的数字
–between…and…是用来比较连续的值

select * from TbStudent where stuAge between 20 and 25


--案例1:查询所有1,2,3班的学生信息
--很多情况下,一个查询有多重实现方法
select * from TbStudent where stuClassId = 1 or stuClassId = 2 or stuClassId = 3
select * from TbStudent where stuClassId between 1 and 3

--案例2:查询所有1,3,4班的学生信息
--使用in关键字 查询离散值
select * from TbStudent where stuClassId in (1,3,4)

*--案例3:不在这3个班的同学*
select * from TbStudent where  stuClassId not in(1,3,4)

–5.top关键字:查询前若干条语句

--案例1:查询前5条数据
select top(5) * from TbStudent where stuClassId in(1,2)

--案例2:查询前百分之几记录,按百分比查询出顶端的记录,不按四舍五入,是直接进位。eg:前2.1条直接取3条记录。
select top 10 percent * from TbStudent where stuClassId in(1,2)

–6.distinct关键字:用来去除查询结果中完全重复的记录

--distinct是先从数据表中查询出数据,再把结果集中**完全相同**的记录去掉。
select distinct * from TbStudent
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章