一.创建数据库

use master
if exists (select * from sysdatabases where name='数据库名称')
drop database 数据库名称 --判断数据库是否存在,若存在则删除 create database 数据库名称
on( --指定主文件的属性
name='', --文件的逻辑名称(数据之间的相互关系)
filename='', --文件的物理名称(数据存储的路径)
size='', --文件的初始大小
maxsize='', --文件的最大值
filegrowth='' --文件的增长方式
)
log on( --指定日志文件的属性
name='', --文件的逻辑名称
filename='', --文件的物理名称
size='', --文件的初始大小
filegrowth='' --文件的增长方式
) --创建数据库 exec sp_helpdb 数据库名称; --查看数据库
alter database 数据库名称
modify name=''; --修改数据库名称
alter database 数据库名称
modify file( --修改数据库文件
name='',
filename='',
size='',
filegrowth=''
)

二.创建数据表

use 数据库名称

if exists (select * from sysobjects where name='数据表名称')
drop table 数据表名称 --判断数据表是否存在,若存在则删除 create table 数据表名称(
字段名称 字段类型 字段特征(默认值DF_、标识列、主键PK_、关系FK_、索引UQ_、检查CK_、非空) --一般不直接添加约束
) --创建数据表

为字段添加约束

alter table 数据表名称
add constraint 约束名称 约束(指定字段) [references 主表(主键或唯一键)];
alter table 数据表名称
drop constraint 约束名称; --删除约束

增加外键约束时,设置级联删除、级联更新 on delete cascade;

--[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]  删除
--[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 更新
--on--在做何种操作的时候做相应的处理
--NO ACTION--不做任何操作:该报错就报错,可以删除就删除
--CASCADE:级联:删除主表,对应的从表数据也会删除,更新也一样
--SET NULL:如果删除主表的记录,那么对应的从表记录的字段值会被设置为null,前提是从表的这个字段的值可以是null
--SET DEFAULT :删除主表记录,从表的记录的对应字段值设置为默认值,前提是你之前为这个字段设置了默认值

alter table 数据表名称

alter column 字段名称 字段类型 约束; --修改字段的类型及约束

alter table 数据表名称

add 字段名称 字段类型 [not null]; --添加字段

alter table 数据表名称

drop column 字段名称; --删除某个字段

exec sp_rename '数据表名称.原字段名称','新字段名称','column'; --修改字段名称

三.添加数据

insert into 表名(形参)			--一次添加一行数据
values(实参) --实参与形参 参数类型 参数个数 参数顺序 都必须一致 1.默认约束可以不指定列名
2.自增不能显示的添加
3.允许为null值的字段可直接设置null值,也可不指定列名

一次添加多行数据时添加顺序不是按照书写的顺序添加的,而是按照第一个字段的首a-z字母或者数字从小到大添加的

insert into 表名(形参)			--一次添加多行数据
select 实参 union
select 实参;
insert into 表名(形参)
values(实参),(实参);
insert into 表1(形参) --从别的表中copy数据
select 实参 from 表2; select * into 新表 from 数据源; --将从数据源选择的数据插入到新表中并显示,新表是系统创建的,之前必须不存在
insert into 目的表 select * from 数据源; --将从数据源选择后得到的结果集添加到目的表中, 目的表必须存在

四.删除数据

delete from 表名;		--标识列不会从标识种子开始,可以回滚(恢复数据)

delete from 表名 where 条件;		--条件与查询语句中条件一样:关系、逻辑运算符、like、in、between...

truncate table 表名;		--标识列会从标识种子开始

五.修改数据

update 表名 set 字段=值,... where 条件		--条件与查询语句中条件一样:关系运算符、逻辑运算符、like、in、between...

关系运算符:= < > >= <= != <> 逻辑运算符:not / and / or / is null / is not null

内置函数:

字符串函数:

	CharIndex('ab','cdab')	返回"3"		--返回"ab"在"cdab"中的位置,将返回第一个字母的位置
Len('我是谁') 返回"3" --返回字符串的长度
substring('abd',2,2) 返回"bd" --从第二个位置开始截取长度为2的字符串

日期函数:

	GetDate()	返回当前日期
DateName(DW,'2009-09-09') 返回"星期三" 以字符串形式返回某个日期指定的部分
DateDiff(dd,'2009-09-09','2010-09-09') 返回两个日期之间的间隔,yy表示年,mm表示月,dd表示日
DatePart(DW,'2009-09-09') 返回"4" 以整数形式返回某个日期指定的部分(美国:星期天为第一天,12月为第一个月)

数学函数:

	Abs(-1)		求绝对值
Ceiling(24.1) 大于24.1的最小整数
Floor(24.1) 小于24.1的最大整数

系统函数:

	Convert(varchar(3),123)  返回"123"	转换数据类型
DataLength("12中国") 返回"6" 返回任何数据类型的字节数,汉字为2个字节

六.查询数据

1.基本语法:

select top|distinct 值 [percent] */表名.字段 别名,... ['上海' as 城市],...   from 表名 别名   where 条件   group by 字段    having 条件   order by 字段别名
1.top 值 [percent] --一般与order by连用 ; 用百分比时结果集是取小数的ceiling; 限制行是最后一步做的 查询、排序、限制行
2.distinct 字段 --过滤掉重复记录
3.表名.字段 --这种方式内部查询更快 ; 若group by了则select 字段:满足记录中值是一对一关系
4.字段 as 别名; 字段 别名; 别名=字段; --三种方式都可以
5.可以添加常量列 '上海' as 城市
6.where条件:关系(> < >= <= != <>)、逻辑运算符(and or not)
字段 [not] in(具体值1、具体值2)/(子查询) --使用in代表一个具体的值范围,in要求指定的范围的数据类型一致; 可以使用子查询
字段 [not] between 数值1/日期1 and 数值2/日期2 --如果是数值或日期的范围判断可以使用between...and
字段 [not] like '张%'、'张_'、'1[1-8]'、'[^21-35]' --'1[1-8]'表示11-18 --'[^21-35]'表示除了1,2,3,5之外的 (通配符只有在模糊查询里才有效)
--%:代表任意个任意字符
--_:代表任意的单个字符
--[]:代表一个具体的值范围中的任意一个字符 [0-9] [a-z]只匹配一个字符
--[^]:代表不在指定的范围之内,放在[]里面才有这个意义 --取反值 只有MSSQL Server支持,其他MSDB用not like
7.group by:对指定列的数据进行分组,将该列具有相同值的行划为一组
8.having条件:字段:要么被分组、要么被聚合
条件:与where条件一样
where子句与having子句区别:
where子句与单个的行有关,having子句与组有关
where子句不能直接以聚合函数作为搜索条件,而having可以以聚合函数作为搜索条件,但having不能使用字段别名
where子句与having子句执行顺序不同
9.order by 字段 [desc]... --默认是asc

2.聚合函数:

--聚合函数-- 参数一般是字段 select max(字段),min(字段)... / select count(*),max(字段) from 表名 where 条件

--聚合函数是对筛选后结果集的某些字段的一组数据进行统计分析

1.max(数值、字符串、日期):求指定数据范围中的最大值:可以对任意类型进行聚合,如果是非数值么就按值的拼音进行排序
2.min(数值、字符串、日期):求指定数据范围中的最小值:可以对任意类型进行聚合,如果是非数值么就按值的拼音进行排序
3.avg(数值):求指定数据范围中的平均值,它只能对数值进行聚合,不能对日期进行聚合
4.sum(数值):求指定数据范围中的和,它只能对数值进行聚合,不能对日期进行聚合
5.count(*/一个字段):求满足条件的记录数,与字段没有任何关系 ; 计算记录数或指定列的非空值数目

空格字符默认是最小的

字符串:字符 a-z ; 汉字 全拼拼音 ; 字母顺序越后值越大

日期:日期越早值越小


3.分组查询:

5.select 7.top 字段列表 1.from  表列表 2.where 源数据筛选条件 3.group by 分组统计字段列表 4.having 对分组统计结果集做筛选 6.order by 得到最终结果集之后的数
据重排

查询语句7个关键字:

select [top] from [where] [group by] [having] [order by]
查询语句的顺序:先from获取数据源、再where筛选数据源、再group by对数据源进行分组、
再having对分组统计的结果集做筛选、[聚合函数对结果集进行聚合分析]、再select对筛选后的结果集显示、
再order by对最终结果集的数据重排、最后top再对结果集限制行再显示

疑难解答:

1.where中为什么不能使用聚合函数(聚合函数不能作为where子句的直接搜索条件)?  --需要先筛选出数据源再使用聚合函数对结果集进行聚合分析再进行显示
2.having中为什么不能使用student表中的列? --分组后的结果集只针对分组后的结果字段,会忽略掉student表中其他字段
3.having中为什么不能使用别名? --先对分组统计的结果集做筛选,在进行显示
4.order by中为什么能使用别名? --先对最终结果集进行显示,在对数据进行重排
5.没分组时就是1个组,也可以使用having筛选,只不过没有实际意义
6.没分组时不能对count和classid同时进行显示,数据源筛选后count是一个值,而classid是多个值,
筛选后结果集中每个字段值必须是一对一关系
单个的字段值不能应用于组,having子句中的列必须是组列
7.分组一般是题中出现查询'每个'或'各个'...字样时分组

--类型转换函数--

--cast(源数据 as 目标类型)

print '我的总成绩是:'+cast(200 as varchar(30))

--Convert(目标类型,源数据, 格式)

print '我的总成绩是:'+convert(char(3),200)

select CONVERT(char(30),GETDATE(),121)


4.union运算符:

--union可以合并多个结果集--

它有两个前提和一个注意:

1.合并的结果集的列数必须完全一致
2.合并的多个结果集的对应列的类型需要一致(可以相互转换)
3.结果集的列名只与第一个结果集有关

--union 与 union all 区别

union:做了distinct操作,过滤重覆记录
union all:不做distinct操作,它的合并效率更高,因为没有必须去判断结果记录是否重复

5.子查询:

1.什么是子查询?

在一个查询中,一个查询的结果作为另一个查询的条件,那么这个
查询称为子查询,这个使用条件的查询称为外部查询

2.标量子查询与多值子查询

标量子查询:单值子查询(查询结果是单个值)  where 字段=(单值子查询)
多值子查询:多值子查询(查询结果是多个值) where 字段 in(多值子查询)

3.独立子查询与相关子查询

独立子查询:字段与外部查询没有关系,可以独立查询出结果
相关子查询:条件中某个字段与外部查询表中字段有联系,不能独立查询出结果
子查询中 where 字段 = 外表名.字段(多值时也可以)

6.连接查询(表连接):

一:交叉连接(笛卡尔积)

from 结果集 cross join 结果集

二:内连接(按条件关系匹配满足条件的) --on 条件(有主外键关系的字段)

from 结果集 inner join 结果集 on 条件

三:外连接(恢复没有匹配的)

from 结果集 left|right|full join 结果集 on 条件

四:语法注意:网上很多都是这样写的,不建议下面这种写法

国际组织ANSI-SQL 89版语法(当时还没有外连接)

select * from Employee, Title;		--交叉连接
select * from Employee t1, Title t2 where t1.titleId=t2.titleId; --内连接

五:注意问题:

1.连接查询是将多个表按相应条件拼接成一个结果表

	可以select * from 表连接 ;  将所有字段全部显示
也可以 select 字段 from 表连接 ; 若选择重名字段,必须指明其所在表; 不是重名的字段可以不指定

2.表自连接时必须为表取别名,否则产生中间表后,会因为表同名而产生错误

3.内连接实现的查询可以使用where来实现 --第五点的说明

4.where子句替换having子句的情况:

当实现相同功能时可以替换:having中使用组列进行筛选时可以用where替换,使用聚合函数筛选时不可以用where替换

		where StuNo = 6;   筛选源数据中StuNo为6的行(相当于StuNo为6的组)  --这种查询更快,毕竟比下面少一条语句
group bu StuNo having StuNo = 6; 将StuNo分组,再筛选StuNo为6的组

5.from 结果集1 ... join 结果集2 ... join ... on 连接条件 --on 不能使用where替换,会出现语法错误

  from 结果集1,结果集2,... where 连接条件		--where 不能使用on替换

三:SQL server基础的更多相关文章

  1. SQL server基础知识(表操作、数据约束、多表链接查询)

    SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...

  2. 数据库开发基础-SQl Server 基础

    SQL Server 基础 1.什么是SQL Server SQL:Structured Query Language  结构化查询语言 SQL Server是一个以客户/服务器(c/s)模式访问.使 ...

  3. 【SQL Server】SQL Server基础之存储过程

    SQL Server基础之存储过程  阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储 ...

  4. 《SQL Server基础——SQL语句》

    SQL Server基础--SQL语句       一.创建和删除数据库: 1.创建数据库(默认化初始值) 格式: CREATE DATABASE 数据库名称 例如: CREATE DATABASE ...

  5. Sql Server 基础知识

    Sql Server 基础知识: http://blog.csdn.net/t6786780/article/details/4525652 Sql Server 语句大全: http://www.c ...

  6. Sql Server 基础语法

    来自:http://www.cnblogs.com/AaronYang/archive/2012/04/24/2468093.html Sql Server 基础语法 -- 查看数据表 select  ...

  7. sql server 基础教程[温故而知新三]

    子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果 ...

  8. SQL Server基础知识三十三问 (15-21)

    15. 存储过程可以调用自己么, 或者说可能有递归的存储过程么? SP nesting最多可以到多少层? 答: 可以的. 因为Transact-SQL 支持递归, 你可以编写可以调用自己的存储过程. ...

  9. SQL Server基础知识三十三问 (7-14)

    8. 一般什么时候使用update_statistics命令? 答:  这个命令基本上是在很多数据被处理过了之后才使用的. 如果大量的删除, 修改, 或这大量的数据插入已经发生了, 那么index就需 ...

  10. SQL Server基础知识三十三问 (1-7)

    1. SQL Server运行在什么端口上? 可以被修改么? 答: 1433端口. 可以修改的, 在SQL Server Configuration Manager的SQL Server Networ ...

随机推荐

  1. pyppeteer初尝滋味

    最近在爬几个电商平台网站用的selenium一登录就会有验证,目前这些网站对selenium检测很严格 因为不少大网站有对selenium的js监测机制.比如navigator.webdriver,n ...

  2. BZOJ 1426--收集邮票(概率与期望&DP)

    1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 504  Solved: 417[Submit][Status][Discuss] ...

  3. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option)

    今天运行Redis时发生错误,错误信息如下: org.springframework.dao.InvalidDataAccessApiUsageException: MISCONF Redis is ...

  4. (二)Python 装饰器

    1. 函数 在 Python 中,使用关键字 def 和一个函数名以及一个可选的参数列表来定义函数.函数使用 return 关键字来返回值.定义和使用一个最简单的函数例子: >>> ...

  5. 数据分析:pandas 基础

    pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据 ...

  6. 【ASP.NET】DataTable导出EXCEL,弹窗提示下载保存(完整代码)

    //新建ASPX protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); Data ...

  7. CSS--浮动(float)布局

    浮动概述:浮动,指的是元素标签使用float属性.应用float属性的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.浮动的本质是让文字围绕图片,但现在很多时候使用浮动进行布局 ...

  8. 爬虫之chrome浏览器的使用方法

    chrome浏览器使用方法介绍 1. 新建隐身窗口 1.1 为什么需要新建隐身窗口 在打开隐身窗口的时候,第一次请求某个网站是没有携带cookie的,和代码请求一个网站一样,不携带cookie.这样就 ...

  9. Django环境搭建之hello world

    当我们想用Python来开发一个web应用时,首先要选择一个优秀的web框架,Django是个非常成熟的web开发框架,网上具有丰富的文档和学习资料,所以选择Django框架来入门web开发是个不错的 ...

  10. 51nod1965. 奇怪的式子(min_25筛)

    题目链接 http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 题解 需要求的式子显然是个二合一形式,我们将其拆开,分别计算 \(\ ...