SqlServer中的查询简单总结
一、sql语句的执行顺序
查询时数据库中使用最多的操作,一条sql语句的查询顺序是
1、from Tb1 [ join on ] 得到查询的数据源
2、where 对数据过滤(单条数据上过滤)
3、group by 对数据分组
4、having 筛选分组(在组别上进行过滤)
5、select distinct 获取结果集
6、order by 对结果集排序
二、常用的基础知识
1.创建表和查看表结构
--exec sp_help cities 可以用来查看一张表的详细信息
--创建省份表
CREATE TABLE [dbo].[Provices] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
CONSTRAINT [PK_Provices] PRIMARY KEY CLUSTERED ([Id] ASC)
); --创建城市表
CREATE TABLE [dbo].[Cities] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[ProviceId] INT NOT NULL DEFAULT 0,
[Name] NVARCHAR (MAX) NOT NULL,
CONSTRAINT [PK_Cities] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Cities_Provices_ProviceId] FOREIGN KEY ([ProviceId]) REFERENCES [dbo].[Provices] ([Id]) ON DELETE CASCADE,
);
查看表结构(原文地址)
SELECT
表名 = case when a.colorder=1 then d.name else '' end,
表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end,
字段序号 = a.colorder,
字段名 = a.name,
标识 = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主键 = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (
SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√' else '' end,
类型 = b.name,
占用字节数 = a.length,
长度 = COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小数位数 = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允许空 = case when a.isnullable=1 then '√'else '' end,
默认值 = isnull(e.text,''),
字段说明 = isnull(g.[value],'')
FROM syscolumns a
left join systypes b on a.xusertype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0
where d.name='LogInfo' --如果只查询指定表,加上此条件
order by
a.id,a.colorder
2.列的管理
对字段进行修改和删除的时候要首先删除和字段相关的约束,否则无法修改/删除成功
----1.添加字段
ALTER TABLE Student ADD TESTCOL NVARCHAR(20) DEFAULT 'HELLOWORLD' NOT NULL; ----2.修改字段长度
ALTER TABLE Student DROP CONSTRAINT DF__CITIES__TESTCOL;
ALTER TABLE Student ALTER COLUMN TESTCOL VARCHAR(100) NOT NULL;
ALTER TABLE Student ADD DEFAULT ('HELLOWORLD1') FOR TESTCOL WITH VALUES ----3.删除字段
ALTER TABLE Student DROP CONSTRAINT DF__CITIES__TESTCOL;
ALTER TABLE Student DROP COLUMN TESTCOL;
3.约束管理
--主键约束
ALTER TABLE Student
ADD CONSTRAINT PK_StuNo PRIMARY KEY (StudentNo) --唯一约束
ALTER TABLE Student
ADD CONSTRAINT UQ_stuID UNIQUE (IdentityCard) --默认约束(地址不详)
ALTER TABLE Student
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR Address --检查约束(出生日期是自1980年1月1日以后)
ALTER TABLE Student
ADD CONSTRAINT CK_stuBornDate CHECK(BornDate>='1980-1-1') --添加外键约束
ALTER TABLE Student
ADD CONSTRAINT FK_Student_Grade_GradID
FOREIGN KEY(GradeID) REFERENCES Grade(GradeID)
go ----查看和修改约束
exec sp_helpconstraint 'Student' --查看Student表的约束
alter table Student drop constraint FK_Student_Grade_GradID--删除约束
4.控制语句
----IF ELSE实例
declare @score int; SET @score=44;
IF (@score>=90) begin print '优秀'; end
ELSE if(@score>=60) begin print '及格'; end
ELSE begin print '不及格'; end ----WHILE实例 declare @i int; declare @sum int;
set @i=1; set @sum=0; WHILE(@i<=100)
BEGIN
SET @sum=@sum+@i ;
SET @i+=1;
END print @sum ----CASE实例 declare @sex int; SET @sex=1; --写法1
select
CASE
WHEN @sex=0 THEN 'female'
WHEN @sex=1 THEN 'male'
ELSE 'unknown'
END --写法2
select
CASE @sex
WHEN 0 THEN 'female'
WHEN 1 THEN 'male'
ELSE 'unknown'
END
一个小案例,当平均成绩小于60的时候进行加分来降低不及格率,90分以上的不加分,80分以上的加1分,其他的加3分
declare @avgscore int;
select @avgscore=avg(score) from stuScore
while(@avgscore<60)
begin
update stuScore set score+=
case
when score>=90 then 0
when score>=80 then 1
else 3
end
select @avgscore=avg(score) from stuScore;
end
5.常用的全局变量
select @@ERROR as 最后一个sql错误的错误码
select @@IDENTITY as 最后一次插入的记录的ID
select @@LANGUAGE as 语言
select @@MAX_CONNECTIONS as 可用的最大连接数
select @@ROWCOUNT as 最后一句sql语句的影响行数
select @@SERVERNAME as 本地服务器名称
select @@TRANCOUNT as 当前打开的事务数
select @@VERSION as sqlserver版本
SqlServer中的查询简单总结的更多相关文章
- sqlserver中怎么查询字段为空的记录
sqlserver中怎么查询字段为空的记录的两种方法: 详细介绍请查看全文:https://cnblogs.com/qianzf/ 原文博客的链接地址:https://cnblogs.com/qzf/
- SqlServer中循环查询结果集
); begin ; open c_test_main;--打开游标 --开始循环 begin fetch next from c_test_main into @id,@value; --赋值到变量 ...
- sqlserver中xml查询
DECLARE @DOC XML =' <books> <book category="C#"> <title language="e ...
- SQLServer中查询的数字列前面补0返回指定长度的字符串
SQLServer中查询的数字列前面补0返回指定长度的字符串: 如: 角本如下: /****** Script for SelectTopNRows command from SSMS ******/ ...
- Oracle&SQLServer中实现跨库查询
一.在SQLServer中连接另一个SQLServer库数据 在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器: EXEC master.dbo.sp_addlinked ...
- SQLSERVER中的LOB页面简单研究
SQLSERVER中的LOB页面简单研究 这篇文章和我另一篇文章是相辅相成的,在看<SQLSERVER2012 列存储索引的简单研究和测试>这篇文章之前希望大家先看一下这篇文章o(∩_∩) ...
- 用锁实现SQLSERVER中简单并发控制(转)
研究Oracle的同学都知道,Oracle的select语句中可以使用for update或者for update nowait来控制并发,这一功能可以使开发人员轻易的将锁定控制在会话级+行级,可以说 ...
- 通过SQL脚本来查询SQLServer 中主外键关系
在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...
- 【转载】Sqlserver中查询窗口显示行号
在Sqlserver中编写语句的时候,有时候因为业务逻辑比较复杂,编写的语句会比较多,此时如果编辑器中显示代码的行号,则对于我们的语句编写有很好的辅助作用.sqlserver默认未开启行号显示功能,可 ...
随机推荐
- 『编程题全队』Beta 阶段冲刺博客三
1.提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID) (1) 昨天已完成的工作 孙志威: 1.添加登录框的功能 2.修改登录框的UI 孙慧君: 1.提醒显示UI设计: 2 ...
- Selenium vs TestStudio,Selenium Grid vs F2Test
Selenium vs TestStudio,不知道差异在哪里? Selenium Grid vs F2Test,后者更优. 用Selenium + FireFox做了一个单机抓图,想要扩展成集群的话 ...
- BatchNormalization的使用
# import BatchNormalization from keras.layers.normalization import BatchNormalization # instantiate ...
- 【Spring】—— 自动装配
一.Spring中装配bean的方式 1.在XML中显式配置 2.在Java中进行显式配置 3.隐士的bean发现机制和自动装配 二.自动装配示例 1.在需要装配到其他bean中的类中加入@Compo ...
- http://python.jobbole.com/85056/ 简单 12 步理解 Python 装饰器,https://www.cnblogs.com/deeper/p/7482958.html另一篇文章
好吧,我标题党了.作为 Python 教师,我发现理解装饰器是学生们从接触后就一直纠结的问题.那是因为装饰器确实难以理解!想弄明白装饰器,需要理解一些函数式编程概念,并且要对Python中函数定义和函 ...
- linux 环境下 firefox乱码问题解决
https://blog.csdn.net/wlwlwlwl015/article/details/51482065
- 一本通1601【例 5】Banknotes
1601:[例 5]Banknotes 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 原题来自:POI 2005 Byteotian Bit Bank (B ...
- Django前端获取后端数据之前端自定义函数
在写网站的时候遇到了一个问题: Django在后端向前端传数据时,多数会使用dict字典来传送多个数据,但前端只能遍历,没有一个用key取到value值的方法可以直接使用 如果作为一个list传递到前 ...
- Codeforces Round #337 (Div. 2) C. Harmony Analysis
题目链接:http://codeforces.com/contest/610/problem/C 解题思路: 将后一个矩阵拆分为四个前一状态矩阵,其中三个与前一状态相同,剩下一个直接取反就行.还有很多 ...
- day26 多继承
class A(object): def test(self): print('from A') class B(A): def test(self): print('from B') class C ...