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默认未开启行号显示功能,可 ...
随机推荐
- Rabbitmq vs. kafka
https://mp.weixin.qq.com/s/2i_9TWoF3TsJvG6Dj_75vw http://www.cnblogs.com/valor-xh/p/6348009.html htt ...
- XShell+Xmanager实现在XShell中显示远程服务器的图形界面
http://blog.csdn.net/linghao00/article/details/8768435
- git 快捷键
实际上就是弄了个别名 $ git config --global alias.st status $ git config --global alias.ci commit $ git config ...
- python下划线
单下划线(_) 通常情况下,会在以下3种场景中使用: 1.在解释器中:在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器 ...
- linux服务器上安装python 3.6.3
一.下载源码包 地址https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz 二.解压源码包 1.下载解压工具xz #yum -y ins ...
- JavaScript——数组
数组是JavaScript中的常用类型,本文详述了数组的基本知识以及一些常用的数组方法,并对每种方法进行了详细解释 数组定义 用字面量直接定义 1 var arr=[0,0,0]; //注意,是方括号 ...
- Python面向对象静态方法,类方法,属性方法
Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...
- 什么是Maven?
绝大部分Maven用户都会说:Maven是一个“构建工具”——一个用来把源代码构建成可发布的构建的工具. 构建工程师和项目经理会说Maven是一个更复杂的东西:一个项目管理工具. Maven除了提供构 ...
- EF 更新 删除
为了避免先查询后更新或删除的问题 可以使用如下语句 Entities db = new Entities(); Orders o = new Orders(); o.id = 6; o.name = ...
- hdu 3397 Sequence operation (线段树 区间合并 多重标记)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397 题意: 给你一串01串,有5种操作 0. 区间全部变为0 1.区间全部变为1 2.区间异或 3.询问 ...