一、建库和表
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的学习的更多相关文章

  1. 关于SQL SERVER数据库学习总结

    对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...

  2. SQL SERVER XML 学习总结

    SQL  SERVER  XML  学习总结 最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的Service Broker技术,在熟悉使用该技术的同时,又用到了Sql s ...

  3. SQL SERVER深入学习学习资料参考

    SQL SERVER深入学习学习资料参考 1.微软Webcast<sql server 2000完结篇>. 尽管微软Webcast出了很多关于Sql Server的系列课程,但是最为深入讲 ...

  4. Sql Server新手学习入门

    Sql Server新手学习入门 http://www.tudou.com/home/_117459337

  5. SQL SERVER 内存学习系列(一)

    最近帮客户解决发布订阅的问题时,突然遇到这样一个问题发布订阅中报下面的错误,另外执行alter table 操作时也会报错 : 问题很奇怪发布订阅和CLR有什么关系?memtoleave内存是个啥?回 ...

  6. SQL Server数据库学习总结

    经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的     一图胜“十”言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数 ...

  7. SQL SERVER 内存学习系列(二)-DMV查看内存信息

    内存管理在SQL Server中有一个三级结构.底部是内存节点,这是最低级的分配器,用于SQL Server的内存.第二个层次是由内存Clerk组成,这是用来访问内存节点和缓存存储,缓存存储则用于缓存 ...

  8. SQL Server 2012 学习笔记5

    1. 索引(Index) 索引是快速的定位和查找数据.索引分为: 聚集索引:唯一,默认主键,一般选取比较连贯的字段,聚集索引是物理排序. 非聚集索引: 并没有把数据物理排序,只是多了一个索引页(包括索 ...

  9. SQL Server 2012 学习笔记1

    1. 新建的数据库会产生两个文件(数据文件.mdf 和日志文件.ldf) 2. 编辑表格和为表格录入数据 "Design"为设计表格,"Edit Top 200 Rows ...

  10. MS Sql server 2008 学习笔记

    数据库中常用的概念 Sql本身是一个服务器,没有界面,Management Studio  只是一个SQL Server管理工具而已,不是服务器. Sql server 在管理工具下面的服务SQL S ...

随机推荐

  1. 爬虫之爬取网贷之家在档P2P平台基本数据并存入数据库

    python 版本 :3.5.2 Jupyter Notebook 使用库: reuqests (For human) json (用来加载JSON数据) datetime (用来记录抓取所花时间,也 ...

  2. OSGI框架中通过BundleContext对象对服务的注册与引用

    BundleActivator 在每个Bundle新建时都会默认生成Activator类,该类实现了BundleActivator类,实现了其start()和stop()两个方法 BundleCont ...

  3. Java String类练习题

    题目:1. 给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置.如:"abcbcbabcb34bcbd"中,"bcb"子串的出现位 ...

  4. Trick 小记

    1.\[P(A|BC) = \frac{P(AB|C)}{P(B|C)}\] 2. In EM algorithm, the usual expectation function can be wri ...

  5. jquery实现显示和隐藏toggle()方法的使用

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. ios跳转到系统设置

    在项目中,我们经常会碰到使用位置的需求.当用户设置app不允许使用位置的时候,最好的用户体验就是直接调转到系统的位置设置界面,进行设置. 第一 跳转到自己项目(在需要调转的按钮动作中添加如下的代码,就 ...

  7. android学习5——画图问题

    重写View中的onDraw函数可以实现画图.代码如下: @Override public void onDraw(Canvas canvas) { Paint paint = new Paint() ...

  8. groovy学习(二)map

    names = ['Ken' : 'Barclay', 'John' : 'Savage']divisors = [4 : [2], 6 : [3, 2], 12 : [6, 4, 3, 2]]pri ...

  9. 快看我解决了一个Nginx的小问题

    前言 最近小编写项目的时候,需要用到Nginx服务器,对于Nginx正常安装就好了详情见[我是传送门],正当一切安好的时候问题来了,这台服务器的80端口竟然被占用了,什么鬼?怎么办,只有改端口.具体方 ...

  10. c++针对数据库,文件的操作总结(原始)

    1.将文件保存到sqlserver数据库的相关操作: Update t1 .txt’, SINGLE_BLOB ) Select convert( varchar(), data ) 注:fileTy ...