热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer一

SQL语句基本大同小异,只是记录下不同点SQLServer一constraint可使用如下语句,表示当前操作的是Test数据库,当然

SQL语句基本大同小异,只是记录下不同点

SQL Server一

constraint

可使用如下语句,表示当前操作的是Test数据库,当然也可以自己在SSMS中选择操作的数据库

use [Test]
go

1.添加主外键约束
可参考Creating and Working with tables - Part 3

语法为:

Alter table ForeignKeyTable add constraint ForeignKeyTable_ForiegnKeyColumn_FK
FOREIGN KEY (ForiegnKeyColumn) references PrimaryKeyTable (PrimaryKeyColumn)

2.添加默认约束
语法:
a.给现有的某列添加默认约束

ALTER TABLE { TABLE_NAME }
ADD CONSTRAINT { CONSTRAINT_NAME }
DEFAULT { DEFAULT_VALUE } FOR { EXISTING_COLUMN_NAME }

b.添加新的column,并添加默认约束

ALTER TABLE { TABLE_NAME }
ADD { COLUMN_NAME } { DATA_TYPE } { NULL | NOT NULL }
CONSTRAINT { CONSTRAINT_NAME } DEFAULT { DEFAULT_VALUE }

c.去掉约束

ALTER TABLE { TABLE_NAME }
DROP CONSTRAINT { CONSTRAINT_NAME }

3.级联引用完整性约束(Cascading referential integrity constraint)
如下,有主外键关联的表

这里写图片描述

当删除tblGender表中ID为2的行时:

delete from tblGender where ID = 2

会提示如下的错误:

DELETE 语句与 REFERENCE 约束"tblPerson_GenderID_FK"冲突。该冲突发生于数据库"Test",表"dbo.tblPerson", column 'GenderID'

可参考:

  • Cascading referential integrity constraint - Part 5
  • 级联引用完整性约束

有如下的值:

  • NO ACTION产生错误并回滚
  • CASCADE删除或者更新所有包含那些外键的行
  • SET NULL外键的所有值将被设置为 NULL
  • SET DEFAULT设置为默认值

4.check约束
check约束用来限制value的范围,例如假设有Age列,Age不小于0也不能大于150

参考Check constraint in SQL Server - Part 6

ALTER TABLE tblPerson
ADD CONSTRAINT CK_tblPerson_Age CHECK (Age > 0 AND Age <150)

5.identity colunm
参考Identity column in SQL Server - Part 7
如果某个column被指定为identity colunm&#xff0c;那么当插入数据的时候这列的值就会自动生成

Create Table tblPerson
(
PersonId int Identity(1,1) Primary Key,
Name nvarchar(20)
)

也可以在SSMS中指定&#xff0c;如下&#xff1a;

这里写图片描述

如果要给identity colunm指定一个明确的值&#xff0c;如下&#xff1a;
a.首先打开Identity_Insert SET Identity_Insert tblPerson ON
b.插入值 Insert into tblPerson(PersonId, Name) values(2, &#39;John&#39;)

如果删除了表中所有的列&#xff0c;想重置identity colunm的值&#xff0c;使用DBCC CHECKIDENT命令

DBCC CHECKIDENT(tblPerson, RESEED, 0)

6.获取最后生成的identity列的值
参考How to get the last generated identity column value in SQL Server - Part 8

可使用&#xff1a;SCOPE_IDENTITY()&#64;&#64;IDENTITYIDENT_CURRENT(&#39;TableName&#39;)
它们之间的区别&#xff1a;

SCOPE_IDENTITY() - returns the last identity value that is created in the same session and in the same scope.
&#64;&#64;IDENTITY - returns the last identity value that is created in the same session and across any scope.
IDENT_CURRENT(&#39;TableName&#39;) - returns the last identity value that is created for a specific table across any session and any scope.

7.Unique约束
参考Unique key constraint - Part 9
添加Unique约束

alter table tblPerson
add constraint Unique_Email Unique(Email)

主键约束和Unique约束的区别&#xff1f;
1.一个表只能有一个主键&#xff0c;但是可有多个unique key
2.主键不允许有null值&#xff0c;而unique key允许有null

select

1.SELECT DISTINCT
在表中&#xff0c;可能会包含重复值。关键词 DISTINCT 用于返回唯一不同的值。
如列出说有的City

select distinct City from tblPerson

注意select distinct Name, City from tblPerson表示的是去掉的是两列都相同的后的结果&#xff0c;其结果可能如下&#xff1a;

这里写图片描述

操作符和通配符

这里写图片描述

例如&#xff0c;选择NameMST其中一个开头的行

select * from tblPerson where Name like &#39;[MST]%&#39;

top关键字&#xff0c;选择前多上行数据&#xff1a;

select top 5 * from tblPerson

也可以指定百分比&#xff0c;如下

select top 50 percent * from tblPerson

2.Group By
参考Group By - Part 11
聚合函数&#xff1a;Count() Sum() avg() Min() Max()
Group By总是和一个或多个聚合函数一起使用

如下的表tblPerson02
这里写图片描述

如果要按city来统计每个city要付的salary&#xff1a;

select city, sum(salary) as totalSalary from tblPerson02 group by city

如果要按按city、gender来统计每个city要付的salary&#xff0c;并统计数量&#xff1a;

select city, gender, sum(salary) as totalSalary, count(ID) as totalEmployees
from tblPerson02
group by city, gender

结果为&#xff1a;

这里写图片描述

HAVING子句用于过滤聚合之后的group。Where子句在聚合之前过滤行&#xff0c;而HAVING在聚合后&#xff0c;过滤group
如使用where子句&#xff1a;

Select City, SUM(Salary) as TotalSalary
from tblEmployee
Where City &#61; &#39;London&#39;
group by City

如使用having子句&#xff1a;

Select City, SUM(Salary) as TotalSalary
from tblEmployee
group by City
Having City &#61; &#39;London&#39;

Where和Having子句之间的区别&#xff1a;

1.where子句可用在select、insert、update语句中。而having子句只能用在select语句中
2.where子句在聚合&#xff08;Grouping&#xff09;之前过滤行&#xff0c;而having在聚合执行之后过滤group
3.聚合函数不能用在where子句中&#xff0c;除非包含在having子句中的子查询中。而having子句中可以使用聚合函数

如&#96;select * from tblPerson02 where sum(salary) > 4000&#96;&#xff0c;则会提示&#96;聚合不应出现在 WHERE 子句中&#xff0c;除非该聚合位于 HAVING 子句或选择列表所包含的子查询中&#xff0c;并且要对其进行聚合的列是外部引用&#96;。

而如下可正常执行

select city, gender, sum(salary) as totalSalary, count(ID) as totalEmployees
from tblPerson02
group by city, gender
having sum(salary) > 5000

join

参考Joins in sql server - Part 12
SQL Server中&#xff0c;join的类型&#xff1a;

  • CROSS JOIN 笛卡尔积
  • INNER JOIN 等同于join
  • OUTER JOIN 分为三种&#xff1a;

    • Left Join or Left Outer Join
    • Right Join or Right Outer Join
    • Full Join or Full Outer Join

不同join之间的区别&#xff1a;

这里写图片描述

Advanced Joins

参考Advanced Joins - Part 13
如下的两张表tblEmployeetblDepartment

这里写图片描述这里写图片描述

1.只获取左表中不匹配的数据

这里写图片描述

SELECT Name, Gender, Salary, DepartmentName
FROM tblEmployee E
LEFT JOIN tblDepartment D
ON E.DepartmentId &#61; D.Id
WHERE D.Id IS NULL

2.只获取右表中不匹配的数据
这里写图片描述

SELECT Name, Gender, Salary, DepartmentName
FROM tblEmployee E
RIGHT JOIN tblDepartment D
ON E.DepartmentId &#61; D.Id
WHERE E.DepartmentId IS NULL

3.获取左右表中都不匹配的数据

这里写图片描述

SELECT Name, Gender, Salary, DepartmentName
FROM tblEmployee E
FULL JOIN tblDepartment D
ON E.DepartmentId &#61; D.Id
WHERE E.DepartmentId IS NULL
OR D.Id IS NULL

自连接

参考Self join in sql server - Part 14

SQL Server中替换NULL的不同方式

参考Different ways to replace NULL in sql server - Part 15

1.使用ISNULL()函数
2.使用CASE 语句
3.使用COALESCE()函数

UNION与UNION ALL

参考Union and union all in sql server - Part 17
UNION与UNION ALL的区别在于&#xff0c;UNION移除重复的行&#xff0c;UNION ALL并不移除重复的行

UNION与JOIN的区别
JOINS and UNIONS are different things. However, this question is being asked very frequently now. UNION combines the result-set of two or more select queries into a single result-set which includes all the rows from all the queries in the union, where as JOINS, retrieve data from two or more tables based on logical relationships between the tables. In short, UNION combines rows from 2 or more tables, where JOINS combine columns from 2 or more table.

存储过程

参考Stored procedures - Part 18

存储过程是一组T-SQ语句

1.创建不带参数的存储过程
如下&#xff0c;获取从tblEmployee中获取所有的NameGender

create procedure spGetEmployees
as
beginselect Name, Gender from tblEmployee
end

注意&#xff1a;在命名存储过程时&#xff0c;Microsoft建议不要使用“sp_”作为前缀&#xff0c;所以系统的存储过程&#xff0c;使用“sp_”作为前缀

执行以上的存储过程&#xff0c;可以有如下的形式&#xff1a;

  1. spGetEmployees
  2. EXEC spGetEmployees
  3. Execute spGetEmployees

也可以右键存储过程名字&#xff0c;选择 EXECUTE STORED PROCEDURE

2.带输入参数的存储过程
参数和变量前有&#64;前缀

Create Procedure spGetEmployeesByGenderAndDepartment
&#64;Gender nvarchar(50),
&#64;DepartmentId int
as
BeginSelect Name, Gender from tblEmployee Where Gender &#61; &#64;Gender and DepartmentId &#61; &#64;DepartmentId
End

执行这个存储过程&#xff0c;需要传递参数&#xff0c;注意参数的顺序

EXECUTE spGetEmployeesByGenderAndDepartment &#39;Male&#39;, 1

如果指定了参数的名字&#xff0c;可以不在意顺序

EXECUTE spGetEmployeesByGenderAndDepartment &#64;DepartmentId&#61;1, &#64;Gender &#61; &#39;Male&#39;

3.带输出参数的存储过程
参考Stored procedures with output parameters - Part 19

要使用关键字OUT或者OUTPUT

Create Procedure spGetEmployeeCountByGender
&#64;Gender nvarchar(20),
&#64;EmployeeCount int Output
as
BeginSelect &#64;EmployeeCount &#61; COUNT(Id) from tblEmployee where Gender &#61; &#64;Gender
End

执行带有输出参数的存储过程
1.初始化一个同样数据类型的输出参数
2.把变量传递到存储过程&#xff0c;要指定OUTPUT关键字&#xff0c;如果没有指定OUTPUT关键字&#xff0c;变量就为NULL
3.执行

Declare &#64;EmployeeTotal int
Execute spGetEmployeeCountByGender &#39;Female&#39;, &#64;EmployeeTotal output
Print &#64;EmployeeTotal

如果使用变量的名字&#xff0c;可以在任意位置传递参数

Declare &#64;EmployeeTotal int
Execute spGetEmployeeCountByGender &#64;EmployeeCount &#61; &#64;EmployeeTotal OUT, &#64;Gender &#61; &#39;Male&#39;
Print &#64;EmployeeTotal

一些非常有用的系统的存储过程
1.sp_help SP_Name 显示存储过程的信息
2.sp_helptext SP_Name显示存储过程的text
3.sp_depends SP_Name显示存储过程的依赖


推荐阅读
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
author-avatar
非策不劃小子白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有