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默认未开启行号显示功能,可 ...
随机推荐
- Docker(十六)-Docker的daemon.json的作用
docker安装后默认没有daemon.json这个配置文件,需要进行手动创建.配置文件的默认路径:/etc/docker/daemon.json 一般情况,配置文件 daemon.json中配置的项 ...
- nginx gzip 以及 tcp 反向代理的 model
同事为了提高性能发给我一model 简单改了一下. 记录一下 #user nobody; worker_processes ; events { worker_connections ; } http ...
- 装CentOS 系统
一. 二. 三. 四. 五. 六. 七. 八. 九. 十. 十一. 十二. 十三. 十四. 十五. 十六. 十七. 十八. setup设置
- codeforces625C
K-special Tables CodeForces - 625C 人们经常做一些疯狂的事来凸显自己.有的人跳舞,有的人撩妹,有的人立志成为顶级程序猿(例如某peng),还有的人喜欢收集有趣的数学对 ...
- codeforces622B
The Time CodeForces - 622B 给你当前的时间(24小时制):HH:MM.输出 x 分钟后的时间是多少?(24小时制) 不明白可以看看例子哦- Input 第一行给出了当前时间, ...
- BZOJ3282Tree——LCT
题目描述 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和. 保证x到y ...
- python 随机数模块 -- random
一.概述 这个模块实现的伪随机数生成器. 对于整数,从区间选取.对于序列,随机元素. 在实线的,有功能来计算均匀分布,正态分布(高斯) ,对数正态分布,负指数,γ和β分布.对于生成的角度分布,冯·米塞 ...
- LOJ2540 [PKUWC2018] 随机算法 【状压DP】
题目分析: 听说这题考场上能被$ O(4^n) $的暴力水过,难不成出题人是毕姥爷? 首先思考一个显而易见的$ O(n^2*2^n) $的暴力DP.一般的DP都是考虑最近的加入了哪个点,然后删除后递归 ...
- Hibernate表关系03
一. 一对多映射 1.基本应用 1.1 准备项目 创建项目:hibernate-02-relation 引入jar,同前一个项目 复制实体(客户).映射.配置.工具类 1.2 创建订单表 表名: t_ ...
- MT【210】四点共圆+角平分线
(2018全国联赛解答最后一题)在平面直角坐标系$xOy$中,设$AB$是抛物线$y^2=4x$的过点$F(1,0)$的弦,$\Delta{AOB}$的外接圆交抛物线于点$P$(不同于点$A,O,B$ ...