SQL Server的学习
一、建库和表
1.新建数据库
语法:
CREATE DATABASE SuperMarket
//建立一个名为SuperMarket的数据库。
2.打开数据库
语法:
USE SuperMarket
//打开刚刚建立的数据库
3.建表
语法:
CREATE TABLE Product(
cProdCode CHAR(6),
vProdName VARCHAR(50),
mPrice MONEY,
vFrom VARCHAR(30)
)
4.添加记录
语法:
INSERT INTO Product(cProCode,vProdName,mPrice,vFrom) VALUES('000001','IBM X201笔记本',6800,'美国')
INSERT INTO Product(cProCode,vProdName,mPrice,vFrom) VALUES('000002','APPLE MacBook笔记本',9900,'美国')
5.修改记录
把IBM X201的笔记本的价格更改为6600元
语法 :
UPDATE Product SET mPrice=6600 WHERE cProCode='000001'
二、删除数据库和表
1.删除Product表
语法 :
DROP TABLE Product
2.删除SuperMarket数据库
语法 :
USE master//注意:删除数据库之前要用USE打开另一个数据库,如master
DROP DATABASE SuperMarket
四、确定表中的关键字
1.关键字的种类
侯选关键字:一个可以唯一确定一行的属性称为侯选关键字;
主键:被选作唯一确定一行的侯选关键字;
候补关键字:在表中没有被选作主键的候选关键字;
组合关键字:表中多个属性才可以唯一确定一行时 ,这些属性称为组合关键字;
外键:两个表具有“关系”,当一个表中的主关键字在另一个表中也作为一个属性存在时,称为外键;
2.确定表中的关键字
2.1主键
2.2组合关键字
例如:表中表示s001做p003项目需要9小时,s002做p001项目需要18小时,以此类推;
2.3外键
公司员工(Employee)和公司部门(Department)存在关系
五、使用SELECT显示所有数据
语法:
SELECT * FROM Client
操作步骤:
(1)打开Microsoft SQL SERVER Management Studio;
(2)连接到远程服务器;
(3)点击“新建”查询,打开查询编辑器;
(4)输入:SELECT * FROM Client,然后点击“执行”按钮;
(5)显示查询结果;
六、使用SELECT显示指定列
我们使用“SELECT * FROM 表”查看所有数据,所以只需要把*替换为指定列,并用逗号隔开即可;
语法:
SELECT vClientName,vContacter,cMobile FROM Client
七、使用WHERE条件查询符合条件的记录
语法:
SELECT * FROM Client WHERE cClientCode=‘41010066’
注:如果条件是字符串或者日期类型,需要在条件的两边加单引号。
八、IS NULL的使用方法
NULL在SQL SERVER数据库中是比较特殊的值,代表没有,并不是字符串,所以NULL和‘NULL’是两个概念;
语法:
SELECT * FROM Client WHERE vEmail IS NULL
九、TOP的用法
TOP用于取前几名或者百分比,ORDER BY则指明排序方式,默认升序ASC,可以省略,如果是降序,使用关键字DESC。
语法:
SELECT TOP 5 * FROM CampusRecruitment ORDERY BY siTestScore DESC
十、集合函数
(1)使用集合函数统计数据(Sum Avg Max Min Count)
(2)包含集合函数的列必须是数值类型或者货币类型
集合函数可以按某列求和、平均值、最大值、最小值、统计记录数,再配合WHERE条件就可以实现初步的统计功能。
语法:
SELECT SUM(mTotal) '笔记本部' FROM DailySails WHERE cDepartmentCode='02'
SELECT SUM(mTotal) '数码部' FROM DailySails WHERE cDepartmentCode='03'
SELECT SUM(mTotal) '耗材部' FROM DailySails WHERE cDepartmentCode='04'
十一、使用GROUP BY分类汇总
语法:
SELECT cDepartmentCode,SUM(mTotal) '销售金额' FROM DailySails GROUP BY cDepartmentCode
分析:SELECT后有两列,中间用逗号隔开,第一列表示分类的列,如cDepartmentCode,第二列表示统计列,如SUM(mTotal)。GROUP BY后面为分类的列。
注:在“查询编辑器”中,可以把GROUP BY句子放在第二行,这样看起来更清晰。
十二、使用GROUP BY ...HAVING分类汇总后二次筛选
语法:
SELECT cDepartmentCode,SUM(mTotal) '销售金额' FROM DailySails
GROUP BY cDepartmentCode
HAVING SUM(mTotal)>5000
十三、使用COMPUTE BY分类汇总
GROUP BY 可以实现分类汇总,而COMPUTE...BY...则在实现分类汇总的基础上同时能够显示明细。
语法:
SELECT * FROM DailySails
ORDER BY cDepartmentCode
COMPUTE SUM(mTotal) BY cDepartmentCode
注:COMPUTE...BY...的前提是对分类列排序,所以SQL语句中用ORDER BY cDepartment进行排序,尔后COMPUTE 汇总列 BY 分类列。
十四、使用COMPUTE...BY...COMPUTE分类汇总
语法:
SELECT * FROM DailySails
ORDER BY cDepartmentCode
COMPUTE SUM(mTotal) BY cDepartmentCode
COMPUTE SUM(mTotal)
十五、LIKE模糊查询
例如查询一个含“广”字的员工
语法:
SELECT * FROM Employee WHERE vEmployeeName LIKE '%广%'
十六、使用DISTINCT筛选重复的列
例如显示所有员工的省份并删除相同的省份
语法:
SELECT DISTINCT(vProvince) FROM Employee
十七、数据库常用函数
(一)字符串函数
1.ASCII(‘A’) -->65 返回A的ASCII值
2.CHAR(65) -->'A' 返回ASCII为65所对应的字符
3.LEFT('Hello',4)-->‘Hell’ 取左四个字符
4.RIGHTH('Hello',3)-->'llo' 取右三个字符
5.LEN('Hello')-->5 字符的长度
6.LOWER('Hello')-->'hello' 转换为小写
7.UPPER('hello')-->'HELLO' 转换为大写
8.LTRIM(' Hello')-->'Hello' 去除左边空格
9.RTRIM('Hello ')-->'Hello' 去除右边空格
10.SUBSTRING('Hello',3,2)-->'ll' 从第3个字符开始取2个字符
11.STUFF('Hello',2,3,'abcd')-->'Habcdo' 用abcd替换从第2个字符开始的3个字符
(二)日期函数
1.DATEADD(日期元素,数字,日期)-->向指定日期添加“数字”个“日期元素”
2.DATEIFF(日期元素,日期1,日期2)-->返回两个日期之间的“日期元素”的个数
3.DATENAME(日期元素,日期)-->以字符串形式返回“日期元素”,如“May”
4.DATEPART(日期元素,日期)-->以数字形式返回“日期元素”,如“5”
5.GETDATE()-->返回当前的日期和时间
日期元素:
yy-->年
mm-->月
dd-->日
hh-->小时
ss-->秒
(三)数学函数
1.ABS(-5)-->5
2.RAND()-->0到1之间的随机浮点数
3.ROUND(数值表达式,长度)-->指定长度进行四舍五入
4.SQRT(浮点表达式)-->指定值的平方根
例:获取Email域名地址
语法:
SELECT SUBSTRING(vEmail,CHARINDEX('@',vEmail)+1,LEN(vEmail)-CHARINDEX('@',vEmail)) FROM Client
注:CHARINDEX('@',vEmail)返回@字符的位置;LEN(vEmail)返回Email的总长度;计算域名的地址长度=总长度-@的位置;SUBSTRING(vEmail,CHARINDEX('@',vEmail)+1,LEN(vEmail)-CHARINDEX('@',vEmail))则表示从vEmail中从“第@的位置+1”取“域名长度”个字符串。
十八、多表操作JOIN...ON...
注:SELECT * FROM 表一 JOIN 表二 ON 表一.条件列=表二.条件列;
一般常用于两个表存在外键关系,两个表名的列名可以不完全相同,但应该有相同条件。
语法:
SELECT vEmployeeName,cMobile,vDepartmentName FROM Employee
JOIN Department
ON Employee.cDepartmentCode=Department.cDepatmentCode
JOIN以后:
十九、左连接或右连接LEFT/RIGHT OUTER JOIN
LEFT OUTER 表示JOIN左边的无论ON条件如何都全部显示;
RIGHT OUTER表示JOIN右边的无论ON条件如何都全部显示;
在正常的JOIN...ON...的基础上,再把JOIN左边的表全部显示出来:
语法:
SELECT vEmployeeName,cMobile,vDepartmentName FROM Employee
LEFT JOIN Department
ON Employee.cDepartmentCode=Department.cDepartmentCode
二十、多表操作UNION
SELECT 列1,列2,列3 FROM 表一 UNION SELECT 列1,列2,列3 FROM 表二;
语法:
SELECT vContacter,vPhone,cMobile FROM Client
UNION
SELECT vEmployeeName,vPhone,cMobile FORM Employee
二十一、SELECT...INTO...把一个表中的数据复制到另一个新表
语法:
SELECT * INTO tmp_Client FROM Client
二十二、INSERT INTO...把一个表中的数据复制到另一个老表
语法:
INSERT INTO AllSails SELECT * FROM DailySails
二十三、子查询
当一个查询是另一个查询的条件时,称为子查询;
语法:
SELECT * FROM Newspaper
WHERE vCity=(SELECT vCity FROM Campus WHERE vCampusName='郑州大学')
二十四、修改表的结构
无论添加一列、修改一列还是删除一列,都需要修改表的结构,使用ALTER TABLE语句;
1.添加一列
添加一列电子邮件(vEmail):
ALTER TABLE Employee ADD vEmail VARCHAR(50)
2.修改一列
修改地址列(vAddress)的长度为50:
ALTER TABLE Employee ALTER COLUMN vAddress VARCHAR(50)
3.删除一列
删除爱好列(vFav):
ALTER TABLE Employee DROP COLUMN vFav
验证:使用SP_HELP Employee语句查看现在表的结构。
二十五、删除多条记录DELETE FROM WHERE...IN...
语法:
DELETE FROM Employee WHERE cEmployeeCode IN('E00001','E00004','E00005')
二十六、视图
创建视图 CREATE VIEW
我们通过创建视图可以完成简化查询的功能
语法:
CREATE VIEW vwEmployeeDepartment
AS
SELECT vEmployeeName,cMobile,vDepartmentName FROM Employee
JOIN Department
ON Employee.cDepartmentCode=Department.cDepartmentCode
CREATE VIEW vwXX AS SQL语句,SQL语句是我们常见的SELECT语句,即可以是一个表,也可以是多个表的查询结果。
创建视图成功后,我们可以把视图看作一个表来查询,如:SELECT * FROM vmEmployeeDepartment
注:虽然我们感觉视图像一个表,但实际上视图并不是表,是虚拟的表,我们把Employee表和Department表称为基表。
修改视图 ALTER VIEW
如果打算在视图vmEmployeeDepartment中把员工手机号也显示出来,只需加上cMobile即可
ALTER VIEW vwEmployeeDepartment
AS
SELECT vEmployeeName,cMobile,vDepartmentName,cMobile FROM Employee
JOIN Department
ON Employee.cDepartmentCode=Department.cDepartmentCode
删除视图DROP VIEW
语法:
DROP VIEW vmEmployeeDepartment
二十七、索引
索引:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。
1.使用索引的优点
提高执行查询的速度
实施数据唯一性
加速了表之间的连接
2.使用索引的缺点
创建索引要花时间
需要大量的磁盘空间来存储数据和数据源
每次修改数据都需要更新索引
3.索引的种类
在簇索引中:数据被物理地排序,每个表只可创建一个簇索引。
在非簇牵引中:行的物理顺序不同于索引的顺序,非簇索引一般用于连接和WHERE子句的列,且它的值可能被经常修改。
当给出CREATE INDEX命令时,SQL Server缺省地创建非簇索引,每个表可多达249个非簇索引。
4.索引的特性
索引加速了连接表的询问、执行排序和分组。
索引可用来实施行的唯一性
索引对数据大多是唯一的列很有用
当你修改索引列的数据时,相关索引会被自动更新
你需要时间和资源来维护索引,不要创建不被经常性使用的索引
簇索引应在非簇索引之前被创建,簇索引改变了行的顺序,如果非簇索引在簇索引之前被创建,那么它需要被重新构造
语法:
CREATE NONCLUSTERED INDEX idxCampusRecruitment ON CampusRecruitment(cCampusCode)
CREATE CLUSTERED INDEX idxCampus ON Campus (cCampusCode)
二十八、约束
1.数据完整性
数据完整性保证了在数据库中存储数据的一致性和正确性,数据完整性大致可分为以下四种类型:
实体完整性:保证每一个列都能由称为主键的属性来唯一标识
域完整性:保证只在有效范围内的值才能存储到列中
引用完整性:保证外键的值必须与相关的主键值相匹配
用户定义完整性:指的是由用户指定的一组规则,它不属于实体、域或引用完整性
2.创建约束
创建约束来保证数据的完整性:
约束定义了必须遵循的用于维护数据一致性和正确性的规则
约束可以在创建表时一同创建,也可随后加入
约束可在两个层次上实施:列层和表层
例:
CREATE TABLE Newspaper(
cNewspaperCode CHAR(2) PRIMARY KEY,
vNewspaperName char (20) NOT NULL,
cProvinceCode CHAR(2) DEFAULT ('41'),
vPhone VARCHAR(13) CHECK(vPhone LIKE('[0][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))
)
CREATE TABLE NewsAd(
cNewsAdNo CHAR(2) PRIMARY KEY,
vNewsAdDescript VARCHAR(200),
cNewspaperCode CHAR(2) REFERENCES Newspaper(cNewspaperCode)
)
二十九、IF 条件语句
语法:
DECLARE @TestScore INT
SET @TestScore=(SELECT siTestScore FROM CampusRecruitment WHERE cStudCode='41010033')
IF @TestScore>90
PRINT '欢迎您参加面试,您的成绩为:'+CAST(@TestScore AS CHAR(3))
ELSE
PRINT'对不起,希望我们下次有机会合作!'
注:DECLARE @TestScore INT 表示声明一个整型变量;
SET @TestScore=(SELECT siTestScore FROM CampusRecruitment WHERE cStudCode='41010033')表示把学号为“41010033”学生的成绩赋值给@TestScore;
CAST(@TestScore AS CHAR(3))用于把整型转换为字符串;
三十、CASE...WHEN...分支语句
例:90分以上者显示“5号参加面试”,80分以上者显示“10号参加面试”,80分以下显示“'对不起,希望我们下次有机会合作!”
语法:
SELECT vStudName,siTestScore,面试日期=
CASE
WHEN siTestScore>=90 THEN '5号参加面试'
WHEN siTestScore>=80 THEN '10号参加面试'
WHEN siTestScore<80 THEN '对不起,希望我们下次有机会合作'
END
FROM CampusRecruitment
三十一、WHILE循环语句
例:新建一个空表,用WHILE循环插入100条记录
建表:
CREATE TABLE UserInfo(
vUserName VARCHAR(20),
vPassword VARCHAR(20),
vEmail VARCHAR(50),
cMobile CHAR(11),
dRegDate DATETIME
)
语法:
DECLARE @Count INT
SET @Count=0
WHILE (@Count<=100)
BEGIN
SET @Count=@Count+1
INSERT INTO UserInfo VALUES('User'+CAST(@Count AS CHAR(3)),'Password'+CAST(@Count AS CHAR(3)),'Email'+CAST(@Count AS CHAR(3)),'13903710'+CAST(@Count AS CHAR(3)),GETDATE())
END
待续
SQL Server的学习的更多相关文章
- 关于SQL SERVER数据库学习总结
对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...
- SQL SERVER XML 学习总结
SQL SERVER XML 学习总结 最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的Service Broker技术,在熟悉使用该技术的同时,又用到了Sql s ...
- SQL SERVER深入学习学习资料参考
SQL SERVER深入学习学习资料参考 1.微软Webcast<sql server 2000完结篇>. 尽管微软Webcast出了很多关于Sql Server的系列课程,但是最为深入讲 ...
- Sql Server新手学习入门
Sql Server新手学习入门 http://www.tudou.com/home/_117459337
- SQL SERVER 内存学习系列(一)
最近帮客户解决发布订阅的问题时,突然遇到这样一个问题发布订阅中报下面的错误,另外执行alter table 操作时也会报错 : 问题很奇怪发布订阅和CLR有什么关系?memtoleave内存是个啥?回 ...
- SQL Server数据库学习总结
经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的 一图胜“十”言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数 ...
- SQL SERVER 内存学习系列(二)-DMV查看内存信息
内存管理在SQL Server中有一个三级结构.底部是内存节点,这是最低级的分配器,用于SQL Server的内存.第二个层次是由内存Clerk组成,这是用来访问内存节点和缓存存储,缓存存储则用于缓存 ...
- SQL Server 2012 学习笔记5
1. 索引(Index) 索引是快速的定位和查找数据.索引分为: 聚集索引:唯一,默认主键,一般选取比较连贯的字段,聚集索引是物理排序. 非聚集索引: 并没有把数据物理排序,只是多了一个索引页(包括索 ...
- SQL Server 2012 学习笔记1
1. 新建的数据库会产生两个文件(数据文件.mdf 和日志文件.ldf) 2. 编辑表格和为表格录入数据 "Design"为设计表格,"Edit Top 200 Rows ...
- MS Sql server 2008 学习笔记
数据库中常用的概念 Sql本身是一个服务器,没有界面,Management Studio 只是一个SQL Server管理工具而已,不是服务器. Sql server 在管理工具下面的服务SQL S ...
随机推荐
- 爬虫之爬取网贷之家在档P2P平台基本数据并存入数据库
python 版本 :3.5.2 Jupyter Notebook 使用库: reuqests (For human) json (用来加载JSON数据) datetime (用来记录抓取所花时间,也 ...
- OSGI框架中通过BundleContext对象对服务的注册与引用
BundleActivator 在每个Bundle新建时都会默认生成Activator类,该类实现了BundleActivator类,实现了其start()和stop()两个方法 BundleCont ...
- Java String类练习题
题目:1. 给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置.如:"abcbcbabcb34bcbd"中,"bcb"子串的出现位 ...
- Trick 小记
1.\[P(A|BC) = \frac{P(AB|C)}{P(B|C)}\] 2. In EM algorithm, the usual expectation function can be wri ...
- jquery实现显示和隐藏toggle()方法的使用
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- ios跳转到系统设置
在项目中,我们经常会碰到使用位置的需求.当用户设置app不允许使用位置的时候,最好的用户体验就是直接调转到系统的位置设置界面,进行设置. 第一 跳转到自己项目(在需要调转的按钮动作中添加如下的代码,就 ...
- android学习5——画图问题
重写View中的onDraw函数可以实现画图.代码如下: @Override public void onDraw(Canvas canvas) { Paint paint = new Paint() ...
- groovy学习(二)map
names = ['Ken' : 'Barclay', 'John' : 'Savage']divisors = [4 : [2], 6 : [3, 2], 12 : [6, 4, 3, 2]]pri ...
- 快看我解决了一个Nginx的小问题
前言 最近小编写项目的时候,需要用到Nginx服务器,对于Nginx正常安装就好了详情见[我是传送门],正当一切安好的时候问题来了,这台服务器的80端口竟然被占用了,什么鬼?怎么办,只有改端口.具体方 ...
- c++针对数据库,文件的操作总结(原始)
1.将文件保存到sqlserver数据库的相关操作: Update t1 .txt’, SINGLE_BLOB ) Select convert( varchar(), data ) 注:fileTy ...