威尼斯正规官网SQL Server数据库基础,因此我首先总是将原始数据载入一个单独的暂存数据库
分类:热门资源

核心提示:我最早使用的一个关系型 DBMS 就是 Microrims R:Base 4000. R:Base

    学习web安全足足有一个半月有余,之前学的是前端,也会一点python。。好吧差不多忘了。常规工具算是熟悉基本流程了。。还欠缺实战。

SQL Server数据库基础

我最早使用的一个关系型 DBMS 就是 Microrims R:Base 4000. R:Base,与其 PC 竞争对手 dBase 不同的是,它是真正的关系型数据库管理系统,是在 20 世纪 80 年代初作为 NASA RIM(关系信息管理,Relational Information Management)系统的一个 PC 版本开发出来的。而我最欣赏的功能之一是它允许用户在导入过程中查看示例数据。尽管像 bcp、DTS、新的 SQL Server 2005 集成服务这样的工具以及各种移植工具和向导已经将数据导入过程自动化到 SQL Server 之中,但这不意味着我们可以一劳永逸。本月,Ron Talmage 提供一些关于导入数据的非常好的常识性建议。 SQL Server DBA(Database Administrator,数据库管理员)发现他们经常使用 T-SQL 导入和处理数据。为什么呢?因为一些数据传输需要技术成熟的 SQL 所具备的强大功能。最近我刚好完成了另一个数据导入的案例,该案例触动我汇编了一份供我使用的行为规范列表。

    再学习SQL注入的时候,头痛于不理解SQL语法,这个骗不了别人,即使凭借经验记住SQL注入绕过语法也不懂得他们的意思,尤其是看《SQL注入攻击与防御》这本书的150-175页的时候,我是彻底懵比了!  

一、安装SQL Server数据库

确保将载入的原始数据暂存为 varchar 数据类型

       我内心是不服输的,然后书一直没看,因为看不懂啊,那种感受就好像有一大堆好吃的在你旁边,你却吸收不了。对就是那种感觉。

setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步->默认实例->混合模式->输入sa密码->实例账号添加当前账号即可。

源自所谓的旧式系统的原始数据通常以文本格式传送,因此我首先总是将原始数据载入一个单独的暂存数据库。我从不尝试将数据直接载入一个成品数据库。

    时间就是生命,我这星期才明白什么叫短暂的时间能做出很多事情,时间就像海绵一样,挤一挤就有了。利用下课的空闲时间完成了一份SQL语法笔记,我也是边看W3c边做的笔记。因为住宿,我无法提供数据库练习,这里颇有遗憾,但是笔记理论性绝对强!   笔记不是完美了,我只是个新手,从我的角度从我新手的角度理解,有不对的地方请各位大牛提出来,大家一起互相学习。

如果想要其他机器访问这台机器的sqlserver,需要使用windows防火墙中的入站规则,端口写1433.

我做的事情是将所有 原始文本数据载入相应的原始表,表中的列为 varchar 数据类型。(DTS 将自动完成该过程,这样很好。但是,DTS 还会将列命名为 COL001,因此您不用事先提供列名。)varchar 的主要优点是它能够接收任何数据 ― 甚至是“坏”数据。如果您尝试从一个没有对用户输入的数据进行严格检查的旧式系统加载数据,那么被忽略的数据或写入异常文件的数据可能比加载的数据还多,如果您不想冒这样的风险,除非接收每一个可能的值。将字符载入 varchar 数据类型的列则可以做到这一点。

   不bb了,看我四天的工作量吧!

二、SQL Server配置管理器

在暂存表/列名时不要使用非字母数字字符


包含各个sql服务,连接数据库时,务必保证sql server服务已开启.

您可能无法控制在包含原始数据的表中如何对列进行初始命名,但是我会尝试修改可能包含空格或其他非常规字符的旧式列名。当列名或表名包含非字母数字的字符时,我们必须使用方括号或双引号对其进行分隔。这种代码不但编写起来比较困难,而且可读性较差。

熟悉SQL之路

三、系统数据库

不要在列名中使用关键字

SQL是结构化查询语

1、master数据库

源自旧式系统的数据通常包含能够破坏 SQL 查询的描述性列名。例如,房地产数据可能会包含一个名为 KEY 的列,它用来反映放置在待售房屋上的钥匙箱。然而,KEY 也是 T-SQL 中的一个关键字 (!),如果使用这样的列名,查询操作在直接引用该列名时将失败。因此,最终您必须用方括号或双引号分隔含有关键字的列名。

SQL对大小写不敏感!

主系统数据库,丢失该库,sqlserver将无法启动。

确保使用正确的数据类型创建一个暂存表

*代表所有!

2、tempdb数据库

下一步是创建一个或多个额外的暂存表,这些表有“正确的”数据类型。我喜欢使暂存表和目标 OLTP(Online Transaction Processing,联机事务处理)数据库中的目的表具有相同的列名。不管怎样,重要的是原始数据中每列的数据类型在载入暂存时都将执行检查并予以改正。在 SQL Server 表中找到坏数据比在加载失败的外部文件中找到坏数据容易得多。

SELECT获取数据,查询语句

用来创建临时对象,包括临时表,存储过程,表变量,全局临时表以及游标等。

确保将新列添加到暂存表中

select name(列名) from admin(表名)

3、model数据库

当暂存数据没有相应的列时,您可以添加这些列,然后拆分或合并载入的数据。例如,即使目的表分解出街道名和门牌号,地址仍然可能作为一个简单的字符串载入暂存表。那么您可以在暂存表中添加街道名列和门牌号列,将旧式地址分解为两个列。这样做的优点是,原始数据与新拆分的数据并存,因此您能够通过比较列来测试脚本。


sqlserver实例中创建的全部数据库的模型。

确保使用本地副本来测试填充的产品数据

DISINCT,配合SELECT使用,作用,去除重复部分。

4、msdb数据库

当您准备好要插入暂存表的数据时,可以首先通过将其插入成品表的本地副本来测试这些数据。有时您只需清空表;有时,您必须填充表。

select disinct name from admin (from后面是存储数据(列名)的数据库表)

主要用于sqlserver代理的支撑后台。

确保保留产品约束


5、resource数据库

在副表上总是保留产品约束。这样,您就能够测试暂存表数据满足这些约束的程度。这些约束包括 NULL、默认值、检查、主键和外键约束。首先保证副表列上的 NULL 或 NOT NULL 属性与目标系统的相同,然后再逐步检查其他所有约束。如果您的测试表明暂存数据插入过程满足所有约束,那么您距离成功就只有一步之遥了。

WHERE字句,SELECT * from person where name="红尘"  查询列名是红尘的来自person表。

资源数据库,隐藏的制度数据库。主要用于改进sqlserver版本升级时的进程功能。

确保在一个产品数据副本上测试

//where是条件语句

6、distribution数据库

虽然将导入数据插入空表将遇到很多潜在的问题,但是不会遇到所有的问题。在通过了所有之前的测试后,确保您将在一个目标数据或成品系统的副本(或至少是一个合理的子集)上测试导入。您能够接收的最终错误类型将由数据配置决定,而且这是此项测试能够检测到的。那么,您就能够在数据库副本中检查结果,甚至可能将应用程序重定向到该副本以便进一步测试和验证。

用于条件搜索:select * from person where like='jack'//搜索关键字jack

分发数据库,只有将实例配置为复制的分发者时,该库才存在。复制中所有的元数据与各种类型的历史记录都存储在此数据库中。

如果导入过程至此通过了所有测试,那么您可能已经准备好进行导入数据了,或者至少可以将导入过程交给质量管理员 (QA, Quality Assurance) 了。


四、数据库的组成

AND&OR AND是并列关系,两者都需要满足,OR是或的意思,两者满足其一。

数据库主要由文件和文件组组成。数据库中的所有数据和对象(表、存储过程和触发器等)都被存储在文件中。


1、文件

关于order by

主要数据文件:存放数据和数据库的初始化信息。每个数据库只有一个主要数据文件,默认扩展名是.mdf。
次要数据文件:存放除主要数据文件意外的所有数据文件。有些数据库可能没有次要数据文件,也可能有多个次要数据文件,默认扩展名是.ndf。
事物日志文件:存放用于恢复数据库的所有日志信息。每个数据库至少有一个事物日志文件,也可以有多个事物日志文件,默认扩展名是.ldf。

order by字母的排序方式是以:A,B,C,D......Z这种,越靠前就排序靠前。

2.文件组
主文件组:包含主要数据文件和任何没有明确指派给其他文件组的文件。系统表的所有页都分配在主文件组中。
用户定义文件组:主要是在create database 或者alter database 语句中,使用filegroup关键字指定的文件组。

order by数字的排序方式是以:1,2,3,4,5,6....这种,越靠前排序靠前。

五、创建数据库
创建数据库时包括常规、选项和文件组 常规用于设置数据库的名称大小位置等,选项和文件组中定义数据库的一些选项,显示文件和文件组的统计信息,默认即可。
SQL Server 默认创建了一个primary文件组,用于存放若干个数据文件,但日志没有文件组。
SQL Server数据库的数据文件分逻辑名称和屋里名称。逻辑名称是在sql 语句中引用文件时所使用的名称;物理名称用于操作管理系统。

order by字母和order by数字同时排序的时候,排序的方式:字母的排序大于数字的排序!所以排序先看字母,字母越靠前顺序就最前面!假如字母的位数都相同,比较数字的话,那么数字越小的越靠前。

维护SQL Server数据库

SQL语句对大小写不敏感,ORDER BY也是可以。

一、脱机与联机

反之desc(DESC)是反序排列,排序方法与正序排列雷同。

数据库->右键脱机,copy之后右键联机->完成


二、分离与附加

insert into语句,含义:像表格中插入新的一行数据

分离不是删除数据库而是从服务器中移除。 exec sp_detach_db @dbname='webDB'

insert into admin(表名) values('红尘','男','red','apple')

数据库->右键分离->需要时再右键附加上。create database webDB on (filename='c:webDB.mdf'),(c:webDB.ldf) for attach

*要已知表名是admin并且admin表是四列!

三、导入和导出

insert into admin('姓名','性别') values('红尘','男');//指定插入一行数据,你得知道表中的列名。

数据库->右键导入->选择数据源->完成。


数据库->右键导出->输入服务器名称,账号密码->选择导出方式->完成。

update 含义:修改表中的数据

四、备份和恢复

update 表 set(创建) name=jack(新值) where people(列名)=man

数据库->右键备份->完整备份->完成。

update admin set name=jack where people=man

数据库->右键恢复->选择bak文件->完全覆盖->完成。


五、收缩数据库和文件

delete语句

因为数据库空间分配采用的是现分配、后使用的机制,所以数据库使用过程中就可能会存在多余的空间。收缩数据库功能允许对数据库的每个文件进行收缩。
数据库和日志文件都可以收缩,可以手动收缩额自动收缩。
自动收缩:数据库->右键属性->选项->自动收缩->完成。
手动收缩:数据库->右键任务收缩->数据库/文件->确定。

delete from admin(表名)  where name(列名)=jack

六、生成与执行SQL脚本

//删除表中列名为jack的一行。

将数据库生成SQL脚本:数据库->编写脚本->create database ->完成。
将数据表生成SQL脚本:数据表->编写脚本->create table->完成。
执行SQL脚本:新建查询->输入脚本->执行。

delete * from table_name

数据表

//删除所有行

一个数据库由多张数据表组成,每个数据表由行和列组成


一、数据类型

Top子句,Limit子句,ROWSUM子句

1、基本数据类型

不是所有数据库都支持top字句,支持top的只有mssql数据库(sql server数据库)

精确数字类型:bigint、int、smallint、tinyint、bit、decimal、numeric、money、smallmoney。

top的用法有两种:

浮点数据类型:freal、float。

1、select top 2  * /  指定某一个列名(columns_name) from admin(表名)  //注释top的含义自我翻译了下,含义很多,感觉最标准就是在...的前头,这里的含义就是查询所有列名中的前两行的数据记录行来自表名 (admin) / 查询前二行的指定列名下的数据内容来自表名(admin)。

字符数据类型:text、ntext、char、nchar(n)、varchar、nvarchar(n)。

2、select top 50percent * / 指定某一个列(columns_name)from admin(表名)   //查询前百分之50的所有列下的数据记录行来自admin(表) / 查询前百分之50的指定列名下的数据来自admin(表)。

二进制数据类型:binary、varbinary、image。

///////////////////

日期/时间数据类型:time、date、smalldatetime、datetime、datetime2、datetimeoffset。

与top用法相同的是limit字句,limit适用于mysql,它是支持mysql数据库的。

2、用户自定义数据类型

limit详细用法:

2.1 可编程性->类型->用户自定义数据类型->右键新增数据类型。

1、select * / 列名(columns_name) from admin(表名) limit 5     //查询前5行的所有列下的数据记录行来自admin(表) / 查询前5行的指定列名下的数据来自admin(表)。2、select * / 列名(columns_name) from admin(表名) limit 5,10 //查询前6行-15行的所有列下的数据记录行来自admin(表) / 查询前5行-15行的指定列名下的数据来自admin(表)。//limit5,10起始是5开始,变成6,因为返回的是所有记录,所以10要加上起始的5就是15。举例:limit 3,6就是前4行-9行。是limit (初始值+1) (初始值+末尾值)使用limit注意点:

2.2 exec sp_addtype code_name,'char(8)','not null'

limit不可以是负数!limit初始值是0不是1

二、数据表的数据完整性**

limt 0相当于limit 0,n。

表中的每一列都有一组属性,如名称、数据类型、数据长度和是否为空等。

取决于第二位数。

1.空与非空值(null/not null):定义是否允许为空


2.默认值(default):默认指定值。

 与top,limit雷同的语句是:ROWNUM,rownum支持oracle数据库。

3.标识属性(identity):自动为表中插入新行生成连续递增的编号,因标识值通常唯一,所以标识列通常定义为主键(整型数据类型,标识列不能为空)。

用法:select * from admin(表)  where rownum<=5

4.约束:用来定义自动强制数据库完整性的方式,约束优先于使用触发器、规则和默认值。

这里的rownum使用方式比较奇怪,它是跟在where子句上的,是条件语句执行的。

非空:用户必须输入一个值。可以有多个非空约束。

rownum初始值是1,rownum=1就是显示表中的第一行,顾名思义,2就是显示表中的前二行。但是写法上就有点不一样。

检查:用来指定一个布尔操作,限制输入到表中的值。

假如写成rownum=2,这样写看上去是对的,但是oracle语法不支持这种写法,既然是限制,那么我想显示表中前二行的记录行,那么应该是rownum<=2,这里的意思就是返回前面二行的记录行,<在这里有种过去的意思。

唯一性:用户的应用程序向列中输入一个唯一的值,值不能重复,但可以为空。

那rownum>2呢,它的意思就是从第二行开始返回记录行。怎么才能使用它?

主键:可以保证实体完整性,一个表只能有一个主键,主键不能为空。

答:需要调用rownum rn才行!

外键:控制存储在外键表中的数据。一个表可以有多个外键。

用法如下:

三、企业管理器管理数据表

查询前3条信息:select * from admin where rownum<4

创建表:数据库->表->右键新建表->输入列名->选择数据类型->是否允许空->保存输入表名。

查询前3条信息:select * from admin where rownum<=3

修改表:数据库->表->右键设计。

像mssql数据库中top n一样,我们需要:select * from (select * from admin order by ID) where rownum<=5

重命名:数据库->表->f2。

查询第3条-第5条信息:select * from(select a.* rownum rn from admin(表名) a)  where rn>=3 and rn<=5

删除表:数据库->表->右键删除。

a.*是数据库别名,我也不太懂。

非空约束->列->列属性->允许NULL -> 是/否。


主键约束->列->右键->设为主键->完成。

LIKE操作符,比较好理解,不像上面的那些好抽象。

唯一约束->列->索引/键->唯一->是->完成。

用法有四种:

检查约束->列->右键->check约束->表达式->完成。

1、select * from admin(表名) where name(列名) like 'j%'     //查询搜索来自admin表中以j开头name(列名)的人

默认约束->列->列属性->默认值。

2、select * from admin(表名) where name(列名) like '%j'     //查询搜索来自admin表中以j末尾的name(列名)的人

外键约束->列->右键->关系->表和列规范->选择外键表列。

3、select * from admin(表名) where name(列名) like '%jack%'    //查询搜索来自admin表中包含jack的name(列名)的人

四、关系的创建与维护

4、select * from admin(表名) where name(列名) not like '%jack%'    //查询搜索来自admin表中不包含jack的name(列名)的人

SQL Server 是一个关系数据库管理系统(Relational Datable Management System,RDBMS),当数据库中包含多个表时,需要通过主关键字来建立表之间的关系。

--  %是SQL的通配符

主表user 从表work 主表wid右键->关系->主键work id 外键 user wid。


五、计算列

IN操作符,选取表中的内容

列属性->计算列规范->公式。

用法:select * from admin(表) where name(列名) in('jack','marry')    //获取来自admin表中的name列名是jack和marry的数据记录行

T-SQL


一、T-SQL概述

BETWEEN操作符

T-SQL(Transact Structured Query Language)是标准的Microsoft SQL Server的扩展,是标准的SQL程序设计语言的增强版,程序与SQL Server沟通的主要语言。

between..and的含义就是选取两个值之间的数据范围,选取的两个值可以是数字,也可以是字母。

SQL是关系数据库系统的标准语言,标准的SQL可以运用在所有的关系型数据库上。但T-SQL是SQL Server系统产品独有的。

用法:

二、T-SQL语言的组成

1、select * from admin where name between 'jack' and 'abc'    //查询来自admin表中列名是在jack和abc之间的数据记录行

数据定义语言(Data Definition Language,DDL):用于在数据库系统中对数据库、表、视图、索引等数据库对象进行创建和管理。

2、也可以用大小于号代替BETWEEN

数据控制语言(Data Control Language,DCL):用于实现对数据库中数据的完整性、安全性等控制。

用法如下:select * from admin where number>10 and number<20    //查询来自admin表中number(列名)是在大于10和小于20的之间的数据记录行

数据操纵语言(Data Mainpulation Language,DML):用于插入、修改、删除和查询数据库中的数据。

这些都是选取两个值之间的数据范围,一切都是两面性,还有不选取两个值之间的数据范围,它就是not between,

三、T-SQL语句结构

not between用法和between用法雷同

每条SQL语句由一个谓词开始,该谓词描述这条语句要产生的动作,如select或update关键字。谓词后紧接着一个或多个子句,子句中给出了被谓词作用的数据或提供谓词动作的详细信息,每一条子句都由一个关键字开始。


select 子句[into 子句] from子句 [where 子句] [group by 子句][having 子句][order by 子句]

SQL JOIN彻底刨析

四、T-SQL语句分类

  我已经无法用语言解释了,此乃精品!

变量说明语句:用来说明变量的命令。


数据定义语句:用来简历数据库、数据库对象和定义列,如create table、create view、drop table等。

SQL  UNION

数据操纵语句:用来操纵数据库中数据的命令,如select、insert、update、delete和cursor等。

解释:UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我们用 UNION这个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT)。不会出现重复的一模一样的。

数据控制语句:用来控制数据库组件的存取许可、存取权限等,如grant、revoke等。

用法:union select name from admin

内嵌函数:说明变量的命令。

//会获取所有的name(列名),不会有重复

其他命令:嵌于命令中使用的标准函数。


五、常量

SQL  SELECT INTO FROM

数据在内存中存储始终不变化的量叫常量,常量,也称为文字值或标量值,是标识一个特定数据值的符号。格式区别与它所标识的值的类型。


1.数字常量:包括整数常量、小数常量以及浮点常量。【 1 2 3】

熟悉SQL之路续篇1

2.字符串常量:括在单引号内并且包含字母数字字符(a~z、A~Z、0~9)以及特殊字符,如”!、@、#“。 【‘a’ ‘asd’】

SQL   SELECT INTO FROM

3.日期和时间常量:SQL规定日期、时间和时间间隔的常量值被指定为日期和时间常量。【'2014-08-01'】

select...into...from...不支持mysql数据库!

4.符号常量:除了用户定义的常量外, SQL包含几个特定的符号常量,这些常量代表不同的常用数据值。【current_date标识当前的日期】

解释三个...;依次从左往后

六、变量

1、...*/columns_name

数据在内存中存储可以变化的量叫变量。用户必须指定存储信息的单元,并为该存储单元命名。T-SQL可以使用两种变量,局部变量和全局变量。

2、...newtable_name

1.局部变量

3、...oldtable_name

局部变量是用户可自定义的变量,作用范围仅在程序内部,局部变量名必须以“@”开头。

支持mssql数据库!

1.1声明局部变量:使用declare语句声明变量。

用法:select id,name into admin2 from admin1      //获取admin1表中的id,name;id和name都是admin1表中的列名插入到admin2表中了。在这里我们不需要事先创建admin2,admin2会系统自动创建假如你事先创建了admin2那么就会说你已经存在此表,不能插入。

declare @a char(10)

1.2局部变量赋值:一种select,一种set。

我们也可以添加where子句。

select : select @a = 1set : set @a = 'i love sql'/*定义变量 查询结果*/declare @title varchar(10)set @title = 'xxx'select * from article where title = @title

用法:select id,name into admin2 from admin1 where city='china'   //查询获取来自admin1中的id,name,把id,name插入到admin2表,这个插入过程中,需要满足的条件是要保证插入的城市是china。

输出语句


select : select @a as ‘A’ 返回带列明的变量值

create DB 数据库名 //创建数据库

print : print @a 输出变量

create table 表名称(列名1 数据类型,列名2 数据类型,列名3 数据类型.......)

2.全局变量


系统内部事先定义好的变量称为全局变量,不用用户定义,任何程序均可随时调用。全局变量以“@@”开头。

SQL的约束

@@identity: 最后一次自增的值。@@rowcount: 影响行数@@cursor_rows: 返回连接上打开的游标当前限定的数目@@error:返回错误号。若执行成功则返回0。@@connections:记录最后一次服务器启动以来,所有针对这台服务器进行的链接数目,包括没有链接成功的尝试。@@cup_busy:记录上次启动以来尝试的连接数,无论链接成功还是失败,都以ms为单位的cpu工作时间@@dbts:返回当前数据库中timestamp数据类型的当前值。@@fetch_status:返回上一次使用游标fetch操作所返回的状态值,并且返回值为整型。0成功,-1失败或不存在,-2被提取的行不存在。@@idle:返回以ms为单位计算SQL Server服务器自最近一次启动以来处于停顿状态的时间。@@io_busy:返回以ms为单位计算的SQL Server服务器自最近一次启动以来花在输入和输出上的时间。@@lock_timeout:返回当前对数据锁定的超时设置。@@pack_received:返回SQL Server服务器自最近一次启动以来一共从网络上接收数据分组的数目。@@pack_sent:返回SQL Server服务器自最近一次启动以来一共向网络上发送数据分组的数目。@@procid:返回当前存储过程ID标识。@@remserver:返回在登陆记录中记在远程SQL Server服务器的名字@@spid:返回当前服务器进程的ID标识。@@total_errors:返回自服务器启动以来,所遇到读写错误的总数。@@total_read:返回自服务器启动以来,读磁盘的次数。@@total_write:返回自服务器启动以来,写磁盘的次数。@@trancount:返回当前链接中,处于活动状态事务的数目。@@version:返回当前服务器的安装日期、版本、一级处理器的类型。

1、NOT NULL

七、运算符

NOT NULL顾名思义,没有NULL的意思。在SQL语法中就是强制列不接受NULL值。NOT NULL一般写在数据类型的后面或者代替数据类型的位置

代码注释:/*此处注视*/

举例子说明:

1、算数运算符

create table abc(

+、-、*、/。加减乘除。1+1。

id   int  NOT NULL

2、赋值运算符

);

=为赋值运算符,将 等号右侧的值赋给左侧变量。

2、UNIQUE

3、比较运算符

UNIQUE约束唯一标识数据库表中的每条记录。

>、=、<=、<>、!=、!>、! 比较运算符测试两个表达式是否相同

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

4、逻辑运算符

注意点:UNIQUE可以标识多次约束对每个表,而PRIMARY KEY只能标识一次对每个表。

  • all:如果一个比较集中全部都是true,则值为true。
  • and:如果两个布尔值表达式均为true,贼值为true。
  • any:如果一个比较集合中任何一个为true,则值为true。
  • between:如果操作数是在某个范围内,则值为true。
  • exists:如果子查询包含该行,则返回true。
  • in:如果操作数与一个表达式列表中的某个相等,则值为true。
  • like:如果操作数匹配某个模式,则值为true。
  • not:对任何其他布尔运算符的值相反。
  • or:如果任何一个表达式是true,则值为true。
  • some:如果一个比较集中的某些true,则值为true。
  • not and or 同意表达式中,优先级是not>and>or。

感觉很好理解,不手写了,负责一段内容自己找寻其中规律:

5、位运算符

下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束:

&(AND) |(OR) ^(互斥OR) ~(NOT)

     MySQL:

6、连接运算符

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (Id_P) )

使用"+"用于连接两个或者两个以上的字符串。'123'+'asd'

     SQL Server / Oracle / MS Access:

7、运算符优先级

威尼斯正规官网,CREATE TABLE Persons ( Id_P int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )

  • 1.+(加) -(减) ~(位反)
    1. *(乘) /(除) %(余)
  • 3.+(加) +(字符串连接) -(减)
  • 4.=、>、=、<=、<>、!=、!>、! >、!
  • 5.^(按位异或) &(按位与) | (按位或)
    1. NOT
    1. AND
  • ALL ANY BETWEEN IN LIKE OR SOME(逻辑运算符)。
  • =(赋值)

     如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:

8、通配符

     MySQL / SQL Server / Oracle / MS Access:

  • % : 包含0个或多个字符的任意字符(%title% "1title1","title","titlecsd")。
  • _ : 任何单个字符 (title_ "titlec"),通配符后只可跟一个字母。
  • [] : 指定范围[a~c] 或集合[abc]中的任何单个字符([0~9]123标识0~9之间任意一个字符开头,123结尾的字符)。
  • [^]:不属于指定范围或集合中的任何单个字符([^0~6]123 标识不以0~6之间的任意一个字母开头,却以123结尾的字符)。

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) )

9、控制流程


  • begin···end:用于将多个T-SQL语句组合为一个逻辑块。当流程控制语句必须执行一个包含两条或两条以上T-SQL语句时,使用begin end。
  • if:if@x%2=0 print '偶数' end
  • if···else:set @y = 3; if@x>0 print '1'else print'c'
  • case:使用case可以很方便的实现多重选择的情况,比if···then结构有更多的选择和判断机会。
    case······when aa > 10 then 'ok' when aa
  • while:T-SQL循环结构,条件为真的情况下while子句可以循环的其后的一条T-SQL命令,如果向循环执行一组命令,需配合begin······end。
  • while······continue······break:循环结构while子句还可以用continue和break控制while循环中语句的执行。
  • return:用于从查询或者过程中无条件退出。
  • goto:用来改变程序执行的流程,使程序调到标识符指定的程序行再继续往下执行。
  • dbcc:用来验证数据库完整性,查找错误和分析系统使用情况等。
  • declare:用来声明一个或多个局部变量、游标变量或表变量。
  • print: 用来向客户端返回一个字符串。
  • backup:用于将数据库内容或事务处理日志备份到磁盘或硬盘中。
  • restore:数据库发生丢失或者被破坏后可以使用restore将事务处理日志备份文件还原到SQL Server中。
  • select : 除查询外还可以给变量赋值。select @x=1,@y='love',多个赋值。
  • set:用来给局部变量赋值,set一次只能给一个变量赋值,select可以多个,不过set功能更强更严密。
  • shutdown:离职终止所有的用户过程,并在对每一现行的事务发生一个回滚后退出SQL Server。终止SQL服务。
  • use:用于在当前工作区打开数据库,如:use master select * from sysdatabases。

规律:UNIQUE约束都是添加在最后的,约束一个的话,最后一个逗号是UNIQUE前面一位数据类型上,而且需要区别数据库。UNIQUE约束多位的话,不需要区分多位数据库,并且UNIQUE约束的前一位数据类型后面不需要逗号,数据库认为约束的前面一位是最后一位。

 八、SQL语言操作

3、PRIMARY KEY

1、GO批处理语句

不想手写了,参照UNIQUE就行!摘录网上的一段:

用于同时执行多个语句

SQL PRIMARY KEY 约束

使用、切换数据库

     PRIMARY KEY 约束唯一标识数据库表中的每条记录。

use master

     主键必须包含唯一的值。

go

     主键列不能包含 NULL 值。

2、使用T-SQL语句操作数据库

     每个表都应该有一个主键,并且每个表只能有一个主键。

2.1、创建数据库

SQL PRIMARY KEY Constraint on CREATE TABLE

/*检查是否已存在该数据库*/if(exists(select * from sys.databases where name = 'webDB'))  drop database webDBgocreate database webDB on primary /*数据库名字 默认属于praimary组 可省略不写*/(  name = webDB, /*逻辑名称*/  filename='d:webDB.mdf', /*物理名称*/  size = 5mb, /*初始大小*/  maxsize = unlimited, /*增长率的最大值*/  filegrowth = 10% /*增长率*/)log on(  name = webDB_log,  filename = 'd:webDB.ldf',  size = 3mb,  maxsize = 50mb,  filegrowth = 2mb)

     下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 PRIMARY KEY 约束:

2.2修改数据库

     MySQL:

alter database webDB /*要修改的数据库*/modify file /*修改文件*/(  name = webDB, /*逻辑名*/  size = 6mb /*修改初始大小*/)

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) )

2.3使用存储过程修改数据库名

     SQL Server / Oracle / MS Access:

exec sp_renamedb 'webDB','newDB'

CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )

2.4删除数据库

     如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:

drop database webDB

     MySQL / SQL Server / Oracle / MS Access:

3、创建表

CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName) )

use webDBgoif(exists(select * from sys.objects where name='student'))  drop table studentgocreate table student(  name nvarchar(50),  age int)

//自行寻找规律

4、修改表

4、FOREIGN KEY

/*如果student表存在address列则删除该列*/if(exists(select * from sys.all_columns where object_id=object_id('student') and name='address'))  alter table student drop column address/*删除表中谋列*//*向表追加列*/alter table student add address varchar(50) not null/*修改该列*/alter table student alter column address varchar(20)/*向表中追加多列*/alter table student add tel varchar(50),sex char(2),hits int

FOREIGN KEY的含义是外键。

5、备份数据表

看了文章没看懂,到时候看懂补上。。。

select * into newTable from student

为什么要添加外键?

6、创建约束

答:FOREIGN KEY 约束用于预防破坏表之间连接的动作。

/*1、非空约束创建表时 创建非空约束*/create table [user](   id int not null,  name varchar(50),  age int)/*在现有表中追加约束*/alter table student alter column name varchar(50) not null /*2、主键约束创建表时 创建主键约束*/create table [user1](  id int constraint pk_id primary key,   name varchar(50))/*在现有表中 创建主键约束*/alter table user1 add constraint pk_id primary key(id) /*3、唯一约束创建表时 创建唯一约束*/create table [user2](  id int constraint uq_id unique,  name varchar(50))/*在现有表中 创建唯一约束*/alter table [user2] add constraint qu_id unique(id)/*4、检查约束*/create table user3(  sex char(2) constraint ck_sex check(sex in ('男','女')))alter table user3 add constraint ck_sex check(sex in ('男','女'))/*5、默认约束*/create table [defualt](  hits int constraint def_hits default 0)alter table [defualt] add constraint def_hits default 0 for [hits]/*6、外键约束*/alter table text add constraint fkey_id foreign key(id) references test(id)

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

 

熟悉SQL之路续篇2

5、SQL CHECK 约束  挺简单的。。。。

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

SQL CHECK Constraint on CREATE TABLE

下面的 SQL 在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数。

My SQL:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CHECK (Id_P>0)

)

SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

Id_P int NOT NULL CHECK (Id_P>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')

)

SQL CHECK Constraint on ALTER TABLE

如果在表已存在的情况下为 "Id_P" 列创建 CHECK 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons

ADD CHECK (Id_P>0)

如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons

ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')

撤销 CHECK 约束

如需撤销 CHECK 约束,请使用下面的 SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons

DROP CONSTRAINT chk_Person

MySQL:

ALTER TABLE Persons

DROP CHECK chk_Person

//偷懒了,实在内容太多这块,我解释不清。。。但是这个没啥难度。

6、DEFAULT

SQL DEFAULT 约束

DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新记录。

SQL DEFAULT Constraint on CREATE TABLE

下面的 SQL 在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束:

My SQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons

(

Id_P int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255) DEFAULT 'Sandnes'

)

通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

CREATE TABLE Orders

(

Id_O int NOT NULL,

OrderNo int NOT NULL,

Id_P int,

OrderDate date DEFAULT GETDATE()

)

SQL DEFAULT Constraint on ALTER TABLE

如果在表已存在的情况下为 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Persons

ALTER City SET DEFAULT 'SANDNES'

SQL Server / Oracle / MS Access:

ALTER TABLE Persons

ALTER COLUMN City SET DEFAULT 'SANDNES'

撤销 DEFAULT 约束

如需撤销 DEFAULT 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Personsk

ALTER City DROP DEFAULT

SQL Server / Oracle / MS Access:

ALTER TABLE Persons

ALTER COLUMN City DROP DEFAULT


CREATE  INDEX

create index index_name on table_name (column_name)

//"column_name" 规定需要索引的列。


SQL删除索引,表和数据库。

通过使用 DROP 语句,可以轻松地删除索引、表和数据库。

SQL DROP INDEX 语句

我们可以使用 DROP INDEX 命令删除表格中的索引。

用于 Microsoft SQLJet (以及 Microsoft Access) 的语法:

DROP INDEX index_name ON table_name

用于 MS SQL Server 的语法:

DROP INDEX table_name.index_name

用于 IBM DB2 和 Oracle 语法:

DROP INDEX index_name

用于 MySQL 的语法:

ALTER TABLE table_name DROP INDEX index_name

SQL DROP TABLE 语句

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):

DROP TABLE 表名称

SQL DROP DATABASE 语句

DROP DATABASE 语句用于删除数据库:

DROP DATABASE 数据库名称

SQL TRUNCATE TABLE 语句

如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?

请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):

TRUNCATE TABLE 表名称


SQL  ALERT TABLE

ALTER TABLE 语句

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

SQL ALTER TABLE 语法

如需在表中添加列,请使用下列语法:

ALTER TABLE table_name(表名)

ADD column_name(列名) datatype(数据类型)

要删除表中的列,请使用下列语法:

ALTER TABLE table_name

DROP COLUMN column_name(列名)

改变数据类型实例

我们使用下列 SQL 语句:

ALTER TABLE admin(表名)

ALTER COLUMN Birthday year(数据类型)

//修改表名中的列名的数据类型,把原先的数据类型改成year数据类型。

删除admin表中的列名Birthday

SQL语法如下:ALTER TABLE admin DROP COLUMN Birthday


SQL AUTO INCREMENT

AUTO INCREMENT 字段

我们通常希望在每次插入新记录时,自动地创建主键字段的值。

我们可以在表中创建一个 auto-increment 字段。

  自己的理解:就是主键的排序方式以递增的方式,是以1,2,3,4....这种,不是那种凌乱零散的排序,AUTO INCREMENT的开始值是1,以1递增。


熟悉SQL之路续篇3

1、SQL NULL

NULL 值是遗漏的未知数据。

SQL NULL 值

如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。

NULL 值的处理方式与其他值不同。

NULL 用作未知的或不适用的值的占位符。

注释:无法比较 NULL 和 0;它们是不等价的。

SQL 的 NULL 值处理

请看下面的 "Persons" 表:

Id LastName FirstName Address City

1 Adams         John                     London

2 Bush George Fifth Avenue     New York

3 Carter   Thomas                        Beijing

假如 "Persons" 表中的 "Address" 列是可选的。这意味着如果在 "Address" 列插入一条不带值的记录,"Address" 列会使用 NULL 值保存。

那么我们如何测试 NULL 值呢?

无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。

我们必须使用 IS NULL 和 IS NOT NULL 操作符。


2、SQL IS NULL

我们如何仅仅选取在 "Address" 列中带有 NULL 值的记录呢?

我们必须使用 IS NULL 操作符:

SELECT LastName,FirstName,Address FROM Persons

WHERE Address IS NULL

结果集:

LastName FirstName Address

Adams John

Carter Thomas

提示:请始终使用 IS NULL 来查找 NULL 值。


3、SQL IS NOT NULL

我们如何选取在 "Address" 列中不带有 NULL 值的记录呢?

我们必须使用 IS NOT NULL 操作符:

SELECT LastName,FirstName,Address FROM Persons  WHERE Address IS NOT NULL

结果集:

LastName FirstName Address

Bush George Fifth Avenue

源于W3C,这个解释的比较清楚,感觉没啥难度。


SQL NULL函数

不解释了:    自己去看,我解释不了。


SQL关键之SQL函数

SQL SVG()   此函数用来计算数值列的平均值,NULL不包括在其中。

用法:select SVG(column_name) from table_name


SQL COUNT()   此函数用来返回匹配指定条件的行数。

用法:select COUNT(column_name) from table_name

实例:

1、select COUNT(name) from admin      //查询来自admin表中的的列名name总共有多少行,假如name中有重复的名字,那么想不重复,语法如下:select COUNT(DISTINCT name) from admin //查询来自admin表中的列名是name的行数,name不重复。

2、select COUNT(*) from admin   //查询并且返回admin表中的全部行数,*代表所有,你懂的。


3、SQL FIRST()    FIRST() 函数返回指定的字段中第一个记录的值。

用法:select FIRST(column_name) from table_name


4、SQL LAST()    LAST() 函数返回指定的字段中最后一个记录的值。

用法:select LAST(column_name) from table_name


5、SQL MAX()

MAX()函数返回一列中的最大值。NULL 值不包括在计算中。

用法:select MAX(column_name) from table_name


6、SQL MIN()

MIN() 函数

MIN函数返回一列中的最小值。NULL 值不包括在计算中。

用法:select MIN(column_name) from table_name


7、SQL SUM() 函数

SUM()函数返回数值列的总数(总额)。

用法:select SUM(column_name) from table_name


8、SQL GROUP BY子句

GROUP BY 语句用于结合合计函数(如SUM就是合计函数),根据一个或多个列对结果集进行分组。

用法:select name(列名),SUM(money(列名)) from admin(表名) GROUP BY name

注意点:当name列中有相同的名字的话,那么group by的时候两个名字自动合并成一个名字。


9、SQL HAVING子句

代替where子句,用法雷同于where。

看看w3c给的解释:在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

用法:select name(列名),SUM(money(列名)) from admin(表) GROUP BY name(列名) HAVING  SUM(money(列名))<1500  //查询来自admin表中的名字和money的总和把他们的结果进行分组,有相同的就合并条件是name中money的总和要大于1500。

深度理解:group by是对你的结果进行分组,而having是对查询的结果进行一定的筛选。where只是一个普通的条件句,它只针对一些简单的条件进行的查询!

having子句与where子句的区别是:where子句在分组之前过滤数据,而having子句则过滤分组后的数据,从这两个示例来讲,后面这个的性能会比较前面的高。


10、SQL  UCASE() 函数

UCASE()函数把字段的值转换为大写。

用法:select UCASE(column_name) from table_name


11、SQL LCASE()函数

LCASE()函数把字段的值转换成小写。

用法:select LCASE(column_name) from table_name


12、MID() 函数

MID()函数用于从文本字段中提取字符。

SQL MID() 语法

select MID(column_name,start,[length]) from table_name

参数 描述

column_name 必需。要提取字符的字段。

start 必需。规定开始位置(起始值是 1)。

length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

用法:select MID(name,1,3) from admin

//查询来自admin表中的列名并且提取name(列名)中的前三个数。


12、SQL LEN()

LEN()函数返回文本字段中值的长度。

用法:select LEN(column_name) from table_name


13、SQL ROUND()

ROUND()函数用于把数值字段舍入为指定的小数位数。

SQL ROUND() 语法

SELECT ROUND(column_name,decimals) FROM table_name

参数 描述

column_name 必需。要舍入的字段。

decimals 必需。规定要返回的小数位数。

用法:select ROUND(price,1) from admin

//查询来自admin表中的价格,因为有ROUND函数,所以对price列的数据进行四舍五入并且保留一位小数,假如是ROUND(price,0),那么就是不保留小数。


14、SQL NOW()

NOW()函数返回当前的日期和时间。

用法:select NOW() from table_name


15、SQL FORMAT()

FORMAT 函数用于对字段的显示进行格式化。

SQL FORMAT() 语法

SELECT FORMAT(column_name,format) FROM table_name

参数

描述

column_name

必需。要格式化的字段。

format

必需。规定格式。


举实例方便理解:select FORMAT(name,'jack') from admin

//name是列名,admin是表名,FORMAT是格式化函数,这句话含义:查询来自admin表中的name列名,因为启用了FORMAT函数,所以格式化name列名中的jack。

      好了,笔记完了,利用了一点空闲时间写的,其实人的潜力还是很大的,赶快加入我吧,努力学习,珍惜你的时间。

本文由威尼斯在线注册平台发布于热门资源,转载请注明出处:威尼斯正规官网SQL Server数据库基础,因此我首先总是将原始数据载入一个单独的暂存数据库

上一篇:目录下的文件上传至帝国CMS系统目录,帝国CMS-内容页评论AJAX分页显示插件插件作者 下一篇:提过提供了栏目别名,修改后栏目别名使用
猜你喜欢
热门排行
精彩图文