SQL Server 数据库

  • 一、了解数据库
  • 二、创建库表
    • 1.创建数据库
      • A:可视化创建库
      • B:Sql 语句创建库
      • C:切换数据库
      • D:删除数据库
      • E:开启数据库服务
    • 2.创建数据表
      • A:可视化创建表
      • B:通过 Sql 语句来创建
  • 三、增.改.删数据
    • 1.insert 添加数据
    • 2.update更新表
    • 3.数据删除 (delete和truncate)
  • 四、查询数据
    • distinct 过滤重复
    • 使用 top
    • group by分组
    • having
    • order by排序
    • 列的别名
    • case when
    • like模糊查询
    • in
    • between
    • where 限定条件
    • 运算符
      • 比较运算符
      • 逻辑运算符

一、了解数据库

数据库:用于存储数据的仓库
常用的数据库 :
Oracle:大型商用数据库
SqlServer:中大型数据库,商用也需要收费。
MySql:中型数据库,商用有免费版
Access:小型数据库
SQLite:可以运行在多种平台上
系统数据库:
msdb:记录SQL Server中所有的系统级别信息
model:新建数据库的模板
tempdb:保存了所有的临时表和临时存储过程
msdb:提供代理程序调度、警报、作业以及记录操作员等活动。

二、创建库表

1.创建数据库

A:可视化向导来创建库 B:通过 Sql 语句来创建

A:可视化创建库

右键单击数据库,选择“新建数据库”
在弹出对话框中输入数据库名称,可以修改数据库文件的保存路

B:Sql 语句创建库

CREATE DATABASE [TestDB] ON PRIMARY
( NAME = N'TestDB', FILENAME = N'E:\TestDB\TestDBX.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED,
FILEGROWTH = 2048KB )
LOG ON
( NAME = N'TestDB_log', FILENAME = N'E:\TestDB\TestDBX_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB ,
FILEGROWTH = 10%)
GO

C:切换数据库

将查询编辑器连接切换到 TestDB数据库

USE TestDB
GO

D:删除数据库

DROP DATABASE [TestDB]

E:开启数据库服务

开启数据库服务:
Wind+R搜索services.msc打开服务管理器,找到SQL Server (MSSQLSERVER)手动开启/属性自动开启
Dos命令启动:启动:net start mssqlserver关闭:net stop mssqlserver
忘记数据库密码:先启动数据库,使用Windows登录,在数据库安全性找到sa的账户名,双击打开窗口,更改密码,确定即可;

2.创建数据表

A:可视化向导来创建表 B:通过 Sql 语句来创建
表就像大仓库中的一个个隔间一样,数据按照分类存储在隔间中

A:可视化创建表

选中Test库下的“表”节点,单击右键,选择“新建表”,

在打开的设计窗口中,设计此表所需的列

B:通过 Sql 语句来创建

CREATE TABLE [dbo].[Student]([Id] [int] IDENTITY(1,1) NOT NULL,[StuCode] [varchar](20) NULL,[RealName] [nvarchar](20) NULL,[Sex] [nchar](1) NULL
);
--创建表的过程中,最后一行语句后面可以不加逗号;
--create table 表名 (字段名 字段类型,字段名 字段类型);
--注释:--表示单行注释,/**/表示多行注释;

三、增.改.删数据

DDL:数据定义语言 create、alter、drop
DML:数据操纵语言 insert、update、delete
DQL:数据查询语言 select
DCL:数据控制语言 commit、rollback、savepoint

关键字:
添加:insert
修改:update
删除:delete
@@identity用于插入数据时显示的自增值;
@@rowcount用于更新数据时显示修改了多少行的数据

1.insert 添加数据

-- 添加单条数据
INSERT dbo.Student (StuCode, RealName, Sex)  VALUES ('2021', '张三', '男')
GO
--添加多条数据
INSERT dbo.Student (StuCode, RealName, Sex)  VALUES ('2021', '张三', '男') ,('2022', 'Tom', '男')
GO
--基本语法如下:INSERT 表名 列的列表 VALUES 要插入的值的列表
--注意:添加多条的数据不能完全相同,否则会认为成是一条数据!
--如果某行的前面有两个连字符,则指示该行为注释,编译器将忽略其文本。 在这种情况下,注释说明允许的语法变体。
--以下语句显示如何通过在字段列表(在圆括号中)中和值列表中均切换 RealName和 StuCode的位置,更改提供参数的顺序。
INSERT dbo.Student (RealName,StuCode,Sex)  VALUES ('张三', '2021','男')
GO
--以下语句演示,只要值是按正确顺序列出的,列的名称就是可选的。
--此语法很常见,但是建议不要使用它,因为其他人了解您的代码可能会更困难。
--NULL 为 Sex列指定,因为还不知道此产品的价格。
INSERT dbo.Student VALUES ('2021', '张三', '男')
GO
--由于 sex列允许 Null 值,而且没有提供值,因此可以从语句中完全删除 sex列的名称和值。
INSERT dbo.Student (StuCode, RealName)  VALUES ('2021', '张三')
GO

@@identity 自增值

INSERT dbo.Student (StuCode, RealName)  VALUES ('2021', '张三')
GO
Print @@identity
--@@identity,是一个系统变量,表示当前 “会话”中最后一条 insert 语句 产生的自增值;
注意:
1、所有列都添加不需要指明哪个字段
2.有默认值和可为空的列可以不添加值,值要和字段位置一致。
3.选择列添加时需要看字段设置,自增一定不添加
4.列名所提供值的数目和表定义的不匹配
5.不能为空的列,必须添加值
6、外键约束下开启需要注意引用表的ID数据
7.使用SQL语句对数据库中表进行操作时,文本型和日期型数据需要加上单引号

ID为自增时,再添加ID时会报错错误

2.update更新表

UPDATE dbo.Student  SET RealName = 'Tim'  ,列2 = 新值2WHERE ID = 15
GO
--语法:UPDATE 表名 SET COLUMN1 = 新值 1,COLUMN2=新值 1….. WHERE 条件
--注意:修改数据时一定要添加条件,否则将会改变表中的所有的数据;
--条件表达式,指明了我们要修改哪些数据,最终可能是 0 条、1 条也可能是很多条
--每次 update 执行完后,我们可以从@@rowcount 系统变量中获取真正发生修改了多少行数据。
UPDATE dbo.Student  SET RealName = 'Tim'  WHERE ID = 15
select @@rowcount; --返回更新查询中修改的行数,返回一个数值型数值;

Top 限定修改

--在实际开发中,不经常用到此知识点,它表示的含义是 在满足 where 条件的数据中,选取若干条来进行更新
update top (20) Student  set RealName ='Tim' where RealName ='张三'
注意:update修改前一定检查好条件,谨慎对待
总结:
1、修改语法:
2、@@rowcount  返回受影响的行数
3、top限定修改的使用

3.数据删除 (delete和truncate)

如果删除数据后,再次创建数据时,编号可能会断裂(除自增列)。

可视化界面:
右击表—>编辑前200行—>选中要删除的数据—>右击—>删除

语法:
DELETE [FROM] 表名称 WHERE 条件
TRUNCATE TABLE 表名称 --总结:
--delete:删除整张表的数据或者某条数据。速度慢
--truncate:只能删除整张表的数据。  快速
--注意:Delete 删除语句执行的过程中如果不添加条件则会删除表中的所有数据;

Top 限定的删除

--Top 限定的删除是在满足条件的语句中删除指定数量的数据。
delete top(2) Student  where Id<7

四、查询数据

  1. 在查询中使用*代表所有列。
  2. 结果集:查询得到的数据行的集合
查询的步骤:
1.  先确定要查询的表;
2.  确定查询的列名;
3.  结合条件看是否符合条件;

distinct 过滤重复

distinct 关键字用来过滤重复数据,保证查到的数据是唯一的。
语法:select distinct 列 1,列 2…… from 表名

使用 top

--上面也简单的提到过 top 的使用,在真正的开发中,top 更多用于查询,
--用来限制结果集中的行数,我们可以直接指定一个数值来限制记录的条数,
--TOP 必须放在*型号或者列名的前面
语法:SELECT TOP (expression) [PERCENT] [ WITH TIES ] 列名 1……列名 N
FROM 表
例子:
查询Student表中的前 10 条记录
select top (10) * from Student
查询Student表中的前 10%的记录
select top (10) percent * from Student --也可以指定一个百分比

group by分组

将查询结果划分为多个行组的 SELECT 语句子句,通常用于在每个组上执行一个或多个聚合。 SELECT 语句每组返回一行。
语法:select 列1 from 表A group by 列1
列表达式:允许使用下面的语句:SELECT ColumnA, ColumnB FROM 表A GROUP BY ColumnA, ColumnB;  SELECT ColumnA + ColumnB FROM 表A GROUP BY ColumnA, ColumnB;  SELECT ColumnA + ColumnB FROM 表A GROUP BY ColumnA + ColumnB;  SELECT ColumnA + ColumnB + constant FROM 表A GROUP BY ColumnA, ColumnB;不允许使用下面的语句:SELECT ColumnA, ColumnB FROM 表A  GROUP BY ColumnA + ColumnB;  SELECT ColumnA + constant + ColumnB FROM 表A  GROUP BY ColumnA + ColumnB;
例子:
A:根据班级名称分组
select ClassName from Classes group by ClassName
B:和having子句一起使用
select ClassName from Classes group by ClassName having ClassName = '1班'

having

having指定分组的过滤,having通常与 GROUP BY 子句一起使用。where 和having 的区别 :
having 子句限制的是组,而不是行,先分组再过滤。
where 先过滤再分组
where 子句中不能使用聚集函数,而 having 子句中可以。
两者都可以的情况下建议where优先,能用where不要用having

order by排序

--指定用于对查询结果集进行排序的列或表达式。
语法:select 列名 from 表名 order by 列名 asc/desc
--ASC 按从最低值到最高值的顺序进行排序。
--DESC 按从最高值到最低值的顺序进行排序。
-- ASC 是默认排序顺序。Null 值被视为最低的可能值。
例:
A:select top (10) * from Product order by SellPrice desc
B:同时指定升序和降序
--以下示例按两个列对结果集进行排序。
--先按 FirstName 列升序对查询结果集进行排序,然后按 LastName 列降序进行排序。
SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC ;

列的别名

我们进行查询时,有时候希望以汉语的方式显示列名,这时候我们就可以采用别名的方式来进行查询了
三种:as 空格 等号=
select Id as '编号',Name '名称','价格'=price from 表名
--注意:在其他数据库中,= 的方式起别名可能不被支持,推荐使用 as。

case when

允许您有条件地从多次比较中返回特定值。 有两种类型的 Case 语句:
作用:1、转换显示。2、分等级
结构:case 列名 when '真实值' then '显示值'(when可以多个)else '' end
--任务1:将Student表中的sex列中男显示为'man',女显示为'woman'
select RealName,case sex
when '男' then 'man'
when '女' then 'woman'
else '未知'end as '性别'
from Student;
--任务2:查询 News 表中的数据,并对点击量进行分级
--1 到 100 为 C 级,100 到 500 为 B 级,500 到 2000 为 A 级,2000 以上为 T 级
select Title,Clicks, case
when Clicks<100 and Clicks>=1 then 'C'
when Clicks<500 then 'B'
when Clicks<2000 then 'A'
else 'T' end
from News;

like模糊查询

%:包含零个或多个字符的任意字符串。
_(下划线):任何单个字符。
[]:指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。
[^]:不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
例子:
A:查询姓王的学生(使用带 % 通配符)
select * from Student where RealName like '王%'
B:查询姓王的学生(使用带 _ 通配符)
select * from Student where RealName like '王_'
C:查找姓名为王文或张文的学生(使用 [] 通配符)
select * from Student where RealName like '[王,张]文'

in

in确定指定的值是否列表中的值相匹配。
一个方法是很多个OR条件,可以用IN或NOT IN关键字。
例子:
--选出年龄是20,21,19岁的学生
select * from Student where Age in(20,21,19)
–-选出年龄不是20,21,19岁的学生
select * from Student where age not in (20,21,19)

between

首先先思考一下between 15 and 20的范围包括15和20吗?
例子:
select * from studnet
whree age between 15 and 20--查询出年龄介于15到20之间的学生信息--后面条件也可以更改为 where age>=20 and age<=50

where 限定条件

指定查询返回的行的搜索条件。
A. 使用简单等式查找行
SELECT EmployeeKey,LastName FROM DimEmployee WHERE LastName ='Smith';
B. 查找包含作为字符串一部分的值的行
SELECT EmployeeKey,LastName FROM DimEmployee WHERE LastName LIKE('%Smi%');
C. 使用比较运算符查找行
SELECT EmployeeKey,LastName FROM DimEmployee  WHERE EmployeeKey<= 500;
D. 查找满足三个条件当中的任何一个条件的行
SELECT EmployeeKey,LastName FROM DimEmployee
WHERE EmployeeKey = 1 OR EmployeeKey = 8 OR EmployeeKey = 12;
E. 查找必须满足若干个条件的行
SELECT EmployeeKey, LastName FROM DimEmployee
WHERE EmployeeKey <= 500 AND LastName LIKE '%Smi%' AND FirstName LIKE'%A%';
--"%" 是个通配符表示匹配所有字符。匹配单个字符需要使用 "_"。
--查询某列的内容本身中含有%的行,用中括号[]将%包起来。
F. 查找位于值列表中的行
SELECT EmployeeKey, LastName FROM DimEmployee
WHERE LastName IN ('Smith', 'Godfrey', 'Johnson');
--in 后边跟一对小括号,括号内填写 常量值,值之间用逗号分割,
--当然也可以使用 not in 来表达相反的意思。
G. 查找含有两个值之间的一个值的行
SELECT EmployeeKey, LastName FROM DimEmployee
WHERE EmployeeKey Between 100 AND 200
--NOT对谓词指定的布尔表达式求反
--AND组合两个条件,并在两个条件都为 TRUE 时取值为 TRUE
--OR组合两个条件,并在任何一个条件为 TRUE 时取值为 TRUE。

运算符

比较运算符

比较运算符测试两个表达式是否相同。 除 text、ntext 或 image 数据类型的表达式外,比较运算符可以用于所有其他表达式。 下表列出了 Transact-SQL 比较运算符。

运算符 含义
=(等于) 等于
>(大于) 大于
<(小于) 小于
>=(大于或等于) 大于等于
<=(小于或等于) 小于或等于
<>(不等于) 不等于
!=(不等于) 不等于(非 ISO 标准)
!<(不小于) 不小于(非 ISO 标准)
!>(不大于) 不大于(非 ISO 标准)

逻辑运算符

逻辑运算符对某些条件进行测试,以获得其真实情况。 逻辑运算符和比较运算符一样,返回带有 TRUE、FALSE 或 UNKNOWN 值的布尔数据类型。

运算符 含义
AND 连接两个条件,并且仅当两上条件都为真时才返回true
OR 连接两个条件,但只要其中任一个为真就返回TRUE。
NOT 一个语句中使用了多个逻辑运算符时,首先求not的值,然后求and的值 ,最后再求or的值
ANY 表示至少一个值 例:>ANY (1, 2, 3) 表示大于 1
ALL 表示每一个值或者说表示最大值 例:>ALL (1, 2, 3) 表示大于 3
SOME 表示其中某些,与any等效的。
BETWEEN 如果操作数在某个范围之内,那么就为 TRUE。
EXISTS 如果子查询包含一些行,那么就为 TRUE。
IN 如果操作数等于表达式列表中的一个,那么就为 TRUE。
LIKE 如果操作数与一种模式相匹配,那么就为 TRUE。

注意:
=ANY 运算符与 IN 等效
< >ANY 运算符则不同于 NOT IN
<>ANY(a,b,c) 表示不等于 a,或者不等于 b,或者不等于 c。NOT IN 表示不等于 a、不等于 b 并且不等于 c。
<>ALL 与 NOT IN 表示的意思相同。

查询结果集创建新表

语法:SELECT * INTO 新表名称 FROM 源表名

查询结果集加入已有表

INSERT [INTO] 表名1 (列名) 结果集

SQL Server 数据库相关推荐

  1. SQL Server 数据库备份

    SQL Server 数据库备份 原文 http://www.cnblogs.com/ynbt/archive/2013/04/04/2999642.html 备份数据库是指对数据库或事务日志进行复制 ...

  2. SQL Server数据库六种数据移动方法

    1. 通过工具DTS的设计器进行导入或导出DTS的设计器功能强大,支持多任务,也是可视化界面,容易操作,但知道的人一般不多,如果只是进行SQL Server数据库中部分表的移动,用这种方法最好,当然, ...

  3. python 使用pymssql连接sql server数据库

    Python连接SQL Server数据库 - pymssql使用基础 ----原文地址:http://www.cnblogs.com/baiyangcao/p/pymssql_basic.html ...

  4. powershell连接数据库_PowerShell 连接SQL Server 数据库

    PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本.工作中整理的一小段脚本,后来没有用上,先记录在这里: 建立数据库连接 查询返回一个DataTatble对象 执 ...

  5. SQL Server数据库错误9003(LSN无效)的处理方法

    国内一些ERP.财务软件一般后台都使用SQL Server的数据库,SQL Server作为一个中大型数据库是不应该在桌面系统上运行的,小规模企业一般不使用专用服务器,大部分直接使用XP系统+桌面引擎 ...

  6. 如何通过代码连接SQL Server数据库

    我们曾经为南方电网做过几个有关架空线路的科技项目,要趁着假期有整段的空闲时间,把这些代码整理一下,放入团队刚刚重构的代码库中. 由于这些项目使用的数据库为 SQL Server,所以在整理代码之前需要 ...

  7. SQL Server数据库收缩日志的方法

    SQL Server数据库收缩日志的方法: 方法一 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大. 1.设置数据库模式为 ...

  8. 数据库附加出错显示服务器,SQL Server数据库附加失败的解决办法

    SQL Server数据库附加失败的解决办法 本文为大家分享了SQL Server数据库附加失败的具体解决方法,供大家参考,具体内容如下 1.错误3415 问题:附加数据库的时候,发现总是附加失败,查 ...

  9. JDBC连接sql server数据库及其它

    JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...

  10. [转载]在SQL Server数据库之间进行数据导入导出,OPENDATASOURCE

    需要在c盘下先建立一个data.txt文件,然后在文件的第一行写上你要导出的列,不如说要导出id和name这两列,就在第一行写上 id,name 然后保存,使用下列SQL就可以了,你如果要保持原有的I ...

最新文章

  1. iOS字体换算 PS的字体大小 =iOS上字体大小
  2. 查找内存泄漏的一个思路
  3. 由自动装箱和拆箱引发我看Integer源码
  4. [云炬mysql数据库笔记] Work2
  5. 彻底搞清楚浏览器渲染过程
  6. JavaFX实际应用程序:AISO HRC-Matic
  7. 动态规划——编辑距离
  8. 【不行你来找我】webstorm设置背景图片
  9. 一个普通的 Zepto 源码分析(一) - ie 与 form 模块
  10. Web前端开发规范之脚本文件和动态文本文件命名规则
  11. blog群发王(价值1980元)源代码提供
  12. android 应用APK使用系统APK
  13. linux网络通讯架构实战篇【02、nginx整体结构、进程模型】
  14. linux windows 剪辑,LosslessCut-超快速、好用、不破坏画质又免安装的免费影片剪辑工具 (Windows/Mac/Linux)...
  15. c语言第七章函数笔记,我的C语学习笔记-C语言教程(七).doc
  16. 信息学奥赛一本通:1084:幂的末尾
  17. SQL审核 | 如何利用 OpenAPI 实现自己的扫描任务
  18. 在markdown下用mma画函数图像
  19. 2021.11.17
  20. 杨振宁国科大演讲互动

热门文章

  1. 虚拟服务器vps怎么扩展,vps虚拟服务器怎么用
  2. 网络入门模拟器:Cisco Packet Tracer 实验教程
  3. 他竟然只用25万美元换来苹果1/3的股票?
  4. 数据分析Qgis-城市餐饮店铺选址
  5. 多肉商店html网页代码,[转载]国外多肉植物及种子购买网站(转载)
  6. 各大厂商企业级BOM解决方案PK
  7. JAVA 酒店预订系统
  8. GIS教程之Cesium 基础入门教程
  9. 真侍魂_全角色特殊能力
  10. UPS不间断电源常见问题及解决办法