一、sql语句的执行顺序

  查询时数据库中使用最多的操作,一条sql语句的查询顺序是

    1、from Tb1 [ join on ]   得到查询的数据源

    2、where         对数据过滤(单条数据上过滤)

    3、group by                    对数据分组

    4、having        筛选分组(在组别上进行过滤)

    5、select distinct     获取结果集

    6、order by      对结果集排序

二、常用的基础知识

1.创建表和查看表结构

  1. --exec sp_help cities 可以用来查看一张表的详细信息
    --创建省份表
  2. CREATE TABLE [dbo].[Provices] (
  3. [Id] INT IDENTITY (1, 1) NOT NULL,
  4. [Name] NVARCHAR (50) NOT NULL,
  5. CONSTRAINT [PK_Provices] PRIMARY KEY CLUSTERED ([Id] ASC)
  6. );
  7.  
  8. --创建城市表
  9. CREATE TABLE [dbo].[Cities] (
  10. [Id] INT IDENTITY (1, 1) NOT NULL,
  11. [ProviceId] INT NOT NULL DEFAULT 0,
  12. [Name] NVARCHAR (MAX) NOT NULL,
  13. CONSTRAINT [PK_Cities] PRIMARY KEY CLUSTERED ([Id] ASC),
  14. CONSTRAINT [FK_Cities_Provices_ProviceId] FOREIGN KEY ([ProviceId]) REFERENCES [dbo].[Provices] ([Id]) ON DELETE CASCADE,
  15. );

  查看表结构(原文地址

  1. SELECT
  2. 表名 = case when a.colorder=1 then d.name else '' end,
  3. 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end,
  4. 字段序号 = a.colorder,
  5. 字段名 = a.name,
  6. 标识 = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
  7. 主键 = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (
  8. SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√' else '' end,
  9. 类型 = b.name,
  10. 占用字节数 = a.length,
  11. 长度 = COLUMNPROPERTY(a.id,a.name,'PRECISION'),
  12. 小数位数 = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
  13. 允许空 = case when a.isnullable=1 then '√'else '' end,
  14. 默认值 = isnull(e.text,''),
  15. 字段说明 = isnull(g.[value],'')
  16. FROM syscolumns a
  17.   left join systypes b on a.xusertype=b.xusertype
  18.   inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
  19.   left join syscomments e on a.cdefault=e.id
  20.   left join sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_id
  21.   left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0
  22. where d.name='LogInfo' --如果只查询指定表,加上此条件
  23. order by
  24. a.id,a.colorder

2.列的管理

  对字段进行修改和删除的时候要首先删除和字段相关的约束,否则无法修改/删除成功

  1. ----1.添加字段
  2. ALTER TABLE Student ADD TESTCOL NVARCHAR(20) DEFAULT 'HELLOWORLD' NOT NULL;
  3.  
  4. ----2.修改字段长度
  5. ALTER TABLE Student DROP CONSTRAINT DF__CITIES__TESTCOL;
  6. ALTER TABLE Student ALTER COLUMN TESTCOL VARCHAR(100) NOT NULL;
  7. ALTER TABLE Student ADD DEFAULT ('HELLOWORLD1') FOR TESTCOL WITH VALUES
  8.  
  9. ----3.删除字段
  10. ALTER TABLE Student DROP CONSTRAINT DF__CITIES__TESTCOL
  11. ALTER TABLE Student DROP COLUMN TESTCOL;

3.约束管理

  1. --主键约束
  2. ALTER TABLE Student
  3. ADD CONSTRAINT PK_StuNo PRIMARY KEY (StudentNo)
  4.  
  5. --唯一约束
  6. ALTER TABLE Student
  7. ADD CONSTRAINT UQ_stuID UNIQUE (IdentityCard)
  8.  
  9. --默认约束(地址不详)
  10. ALTER TABLE Student
  11. ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR Address
  12.  
  13. --检查约束(出生日期是自198011日以后)
  14. ALTER TABLE Student
  15. ADD CONSTRAINT CK_stuBornDate CHECK(BornDate>='1980-1-1')
  16.  
  17. --添加外键约束
  18. ALTER TABLE Student
  19. ADD CONSTRAINT FK_Student_Grade_GradID
  20. FOREIGN KEY(GradeID) REFERENCES Grade(GradeID)
  21. go
  22.  
  23. ----查看和修改约束
  24. exec sp_helpconstraint 'Student' --查看Student表的约束
  25. alter table Student drop constraint FK_Student_Grade_GradID--删除约束

4.控制语句

  1. ----IF ELSE实例

  2. declare @score int; SET @score=44;
  3. IF (@score>=90) begin print '优秀'; end
  4. ELSE if(@score>=60) begin print '及格'; end
  5. ELSE begin print '不及格'; end
  6.  
  7. ----WHILE实例
  8.  
  9. declare @i int; declare @sum int;
  10. set @i=1; set @sum=0;
  11.  
  12. WHILE(@i<=100)
  13. BEGIN
  14. SET @sum=@sum+@i
  15. SET @i+=1;
  16. END
  17.  
  18. print @sum
  19.  
  20. ----CASE实例
  21.  
  22. declare @sex int; SET @sex=1;
  23.  
  24. --写法1
  25. select
  26. CASE
  27. WHEN @sex=0 THEN 'female'
  28. WHEN @sex=1 THEN 'male'
  29. ELSE 'unknown'
  30. END
  31.  
  32. --写法2
  33. select
  34. CASE @sex
  35. WHEN 0 THEN 'female'
  36. WHEN 1 THEN 'male'
  37. ELSE 'unknown'
  38. END

一个小案例,当平均成绩小于60的时候进行加分来降低不及格率,90分以上的不加分,80分以上的加1分,其他的加3分

  1. declare @avgscore int;
  2. select @avgscore=avg(score) from stuScore
  3. while(@avgscore<60)
  4. begin
  5. update stuScore set score+=
  6. case
  7. when score>=90 then 0
  8. when score>=80 then 1
  9. else 3
  10. end
  11. select @avgscore=avg(score) from stuScore;
  12. end

5.常用的全局变量

  1. select @@ERROR as 最后一个sql错误的错误码
  2. select @@IDENTITY as 最后一次插入的记录的ID
  3. select @@LANGUAGE as 语言
  4. select @@MAX_CONNECTIONS as 可用的最大连接数
  5. select @@ROWCOUNT as 最后一句sql语句的影响行数
  6. select @@SERVERNAME as 本地服务器名称
  7. select @@TRANCOUNT as 当前打开的事务数
  8. select @@VERSION as sqlserver版本

SqlServer中的查询简单总结的更多相关文章

  1. sqlserver中怎么查询字段为空的记录

    sqlserver中怎么查询字段为空的记录的两种方法: 详细介绍请查看全文:https://cnblogs.com/qianzf/ 原文博客的链接地址:https://cnblogs.com/qzf/

  2. SqlServer中循环查询结果集

    ); begin ; open c_test_main;--打开游标 --开始循环 begin fetch next from c_test_main into @id,@value; --赋值到变量 ...

  3. sqlserver中xml查询

    DECLARE @DOC XML =' <books> <book category="C#">    <title language="e ...

  4. SQLServer中查询的数字列前面补0返回指定长度的字符串

    SQLServer中查询的数字列前面补0返回指定长度的字符串: 如: 角本如下: /****** Script for SelectTopNRows command from SSMS ******/ ...

  5. Oracle&SQLServer中实现跨库查询

    一.在SQLServer中连接另一个SQLServer库数据 在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器: EXEC master.dbo.sp_addlinked ...

  6. SQLSERVER中的LOB页面简单研究

    SQLSERVER中的LOB页面简单研究 这篇文章和我另一篇文章是相辅相成的,在看<SQLSERVER2012 列存储索引的简单研究和测试>这篇文章之前希望大家先看一下这篇文章o(∩_∩) ...

  7. 用锁实现SQLSERVER中简单并发控制(转)

    研究Oracle的同学都知道,Oracle的select语句中可以使用for update或者for update nowait来控制并发,这一功能可以使开发人员轻易的将锁定控制在会话级+行级,可以说 ...

  8. 通过SQL脚本来查询SQLServer 中主外键关系

    在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...

  9. 【转载】Sqlserver中查询窗口显示行号

    在Sqlserver中编写语句的时候,有时候因为业务逻辑比较复杂,编写的语句会比较多,此时如果编辑器中显示代码的行号,则对于我们的语句编写有很好的辅助作用.sqlserver默认未开启行号显示功能,可 ...

随机推荐

  1. Rabbitmq vs. kafka

    https://mp.weixin.qq.com/s/2i_9TWoF3TsJvG6Dj_75vw http://www.cnblogs.com/valor-xh/p/6348009.html htt ...

  2. XShell+Xmanager实现在XShell中显示远程服务器的图形界面

    http://blog.csdn.net/linghao00/article/details/8768435

  3. git 快捷键

    实际上就是弄了个别名 $ git config --global alias.st status $ git config --global alias.ci commit $ git config ...

  4. python下划线

    单下划线(_) 通常情况下,会在以下3种场景中使用: 1.在解释器中:在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器 ...

  5. 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 ...

  6. JavaScript——数组

    数组是JavaScript中的常用类型,本文详述了数组的基本知识以及一些常用的数组方法,并对每种方法进行了详细解释 数组定义 用字面量直接定义 1 var arr=[0,0,0]; //注意,是方括号 ...

  7. Python面向对象静态方法,类方法,属性方法

    Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...

  8. 什么是Maven?

    绝大部分Maven用户都会说:Maven是一个“构建工具”——一个用来把源代码构建成可发布的构建的工具. 构建工程师和项目经理会说Maven是一个更复杂的东西:一个项目管理工具. Maven除了提供构 ...

  9. EF 更新 删除

    为了避免先查询后更新或删除的问题 可以使用如下语句 Entities db = new Entities(); Orders o = new Orders(); o.id = 6; o.name = ...

  10. hdu 3397 Sequence operation (线段树 区间合并 多重标记)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397 题意: 给你一串01串,有5种操作 0. 区间全部变为0 1.区间全部变为1 2.区间异或 3.询问 ...