子查询或内部查询或嵌套查询在另一个SQL查询的查询和嵌入式WHERE子句中。

子查询用于返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据。

子查询可以在SELECT,INSERT,UPDATE使用,而且随着运算符如DELETE语句 =, <, >, >=, <=, IN, BETWEEN 等.

这里有一些规则,子查询必须遵循:

  • 子查询必须被圆括号括起来。

  • 子查询只能在有一列的SELECT子句中,除非多个列中的子查询,以比较其选定列主查询。

  • ORDER BY不能在子查询中使用,主查询可以使用ORDER BY。GROUP BY可以用来在子查询中如ORDER BY执行相同的功能。

  • 返回多于一个行子查询只能用于具有多个值运算符,如IN操作。

  • SELECT列表中不能包含到值计算到任何引用 BLOB, ARRAY, CLOB, 或NCLOB.

  • 子查询不能立即封闭在一组函数。

  • BETWEEN 操作符不能与子查询使用;然而,操作符BETWEEN可以在子查询中使用。

学习本节所需要的表:

  1. CREATE TABLE TEACHER
  2. (
  3. ID INT IDENTITY (,) PRIMARY KEY , --主键,自增长
  4. TNO INT NOT NULL, --教工号
  5. TNAME CHAR() NOT NULL, --教师姓名
  6. CNO INT NOT NULL, --课程号
  7. SAL INT, --工资
  8. DNAME CHAR() NOT NULL, --所在系
  9. TSEX CHAR() NOT NULL, --性别
  10. AGE INT NOT NULL --年龄
  11. )
  12. INSERT INTO dbo.TEACHER VALUES( ,'王军',,,'数学','男',)
  13. INSERT INTO dbo.TEACHER VALUES( ,'李彤',,,'生物','女',)
  14. INSERT INTO dbo.TEACHER VALUES( ,'王永军',,,'计算机','女',)
  15. INSERT INTO dbo.TEACHER VALUES( ,'刘晓婧',,,'计算机','女',)
  16. INSERT INTO dbo.TEACHER VALUES( ,'高维',,,'电子工程','男',)
  17. INSERT INTO dbo.TEACHER VALUES( ,'李伟',,,'机械工程','女',)
  18. INSERT INTO dbo.TEACHER VALUES( ,'刘辉',,,'生物','女',)
  19. INSERT INTO dbo.TEACHER VALUES( ,'刘伟',,,'计算机','男',)
  20. INSERT INTO dbo.TEACHER VALUES( ,'刘静',,,'经济管理','男',)
  21. INSERT INTO dbo.TEACHER VALUES( ,'刘奕锴',,,'计算机','女',)
  22. INSERT INTO dbo.TEACHER VALUES( ,'高维',,,'经济管理','男',)
  23.  
  24. CREATE TABLE COURSE
  25. (
  26. ID INT IDENTITY (,) PRIMARY KEY , --主键,自增长
  27. CNO INT NOT NULL, --课程号
  28. CNAME CHAR() NOT NULL, --课程名称
  29. CTIME INT NOT NULL, --学时
  30. SCOUNT INT NOT NULL, --容纳人数
  31. CTEST SMALLDATETIME NOT NULL, --考试时间
  32. )
  33. INSERT INTO dbo.COURSE VALUES( ,'应用数学基础',,,'2006-7-10')
  34. INSERT INTO dbo.COURSE VALUES( ,'生物工程概论',,,'2006-7-8')
  35. INSERT INTO dbo.COURSE VALUES( ,'计算机软件基础',,,'2006-7-8')
  36. INSERT INTO dbo.COURSE VALUES( ,'计算机硬件基础',,,'2006-6-28')
  37. INSERT INTO dbo.COURSE VALUES( ,'模拟电路设计',,,'2006-7-10')
  38. INSERT INTO dbo.COURSE VALUES( ,'机械设计实践',,,'2006-7-14')
  39. INSERT INTO dbo.COURSE VALUES( ,'生物化学',,,'2006-7-2')
  40. INSERT INTO dbo.COURSE VALUES( ,'数据库设计',,,'2006-7-1')
  41. INSERT INTO dbo.COURSE VALUES( ,'设计理论',,,'2006-6-30')
  42. INSERT INTO dbo.COURSE VALUES( ,'计算机入门',,,'2006-6-29')
  43. INSERT INTO dbo.COURSE VALUES( ,'数字电路设计基础',,,'2006-6-20')
  44. CREATE TABLE STUDENT
  45. (
  46. ID INT IDENTITY(,) PRIMARY KEY NOT NULL,
  47. SNO CHAR() NOT NULL, --学号
  48. SNAME CHAR() NOT NULL, --姓名
  49. DNAME CHAR() NOT NULL, --系
  50. SSEX CHAR() NOT NULL, --性别
  51. CNO INT , --课程号
  52. MARK DECIMAL(,), --成绩
  53. TYPE CHAR() --课程类型
  54. )
  55. INSERT INTO dbo.STUDENT VALUES('','刘建国','管理工程','男',,82.5,'必修')
  56. INSERT INTO dbo.STUDENT VALUES('','刘建国','管理工程','男',,,'选修')
  57. INSERT INTO dbo.STUDENT VALUES('','刘建国','管理工程','男',,78.5,'选修')
  58. INSERT INTO dbo.STUDENT VALUES('','李春','环境工程','女',,,'必修')
  59. INSERT INTO dbo.STUDENT VALUES('','李春','环境工程','女',,,'选修')
  60. INSERT INTO dbo.STUDENT VALUES('','王天','生物','男',,48.5,'必修')
  61. INSERT INTO dbo.STUDENT VALUES('','王天','生物','男',,,'选修')
  62. INSERT INTO dbo.STUDENT VALUES('','李华','计算机','女',,,'必修')
  63. INSERT INTO dbo.STUDENT VALUES('','李华','计算机','女',,,'必修')
  64. INSERT INTO dbo.STUDENT VALUES('','李华','计算机','女',,,'必修')
  65. INSERT INTO dbo.STUDENT VALUES('','李华','计算机','女',,,'必修')
  66. INSERT INTO dbo.STUDENT VALUES('','李华','计算机','女',,,'选修')
  67. INSERT INTO dbo.STUDENT VALUES('','孙庆','电子工程','男',,,'必修')
  68. INSERT INTO dbo.STUDENT VALUES('','孙庆','电子工程','男',,,'必修')
  69. INSERT INTO dbo.STUDENT VALUES('','孙庆','电子工程','男',,,'必修')
  70. INSERT INTO dbo.STUDENT VALUES('','孙庆','电子工程','男',,,'必修')
  71. INSERT INTO dbo.STUDENT VALUES('','高伟','机械工程','男',,,'必修')
  72. INSERT INTO dbo.STUDENT VALUES('','高伟','机械工程','男',,88.5,'必修')
  73. INSERT INTO dbo.STUDENT VALUES('','高伟','机械工程','男',,,'选修')
  74. INSERT INTO dbo.STUDENT VALUES('','高伟','机械工程','男',,,'选修')
  75.  
  76. 数据表

表数据

  1. --在多表查询中使用子查询
  2. --采用连接表的方法
  3. SELECT s.CNO,SNO,SNAME,DNAME FROM dbo.STUDENT AS s INNER JOIN dbo.COURSE AS c ON s.CNO = c.CNO WHERE c.CNAME='计算机入门'
  4.  
  5. --采用子查询
  6. SELECT CNO,SNO,SNAME,DNAME FROM dbo.STUDENT WHERE CNO=(SELECT CNO FROM dbo.COURSE WHERE CNAME='计算机入门')

    

  1. --在子查询中使用聚合函数
  2. --使用平均值函数
  3. SELECT * FROM dbo.TEACHER WHERE AGE>(SELECT AVG(AGE) FROM dbo.TEACHER)
  4.  
  5. --比较判式两边均采用聚合分析的字查询
       --TEACHER中查询教师的教工号等信息,并且要求教师所在系的平均年龄大于所有老师的平均年龄
  6. SELECT t.TNO,t.TNAME,t.DNAME,t.CNO,t.AGE FROM dbo.TEACHER AS t WHERE (SELECT AVG(AGE) FROM dbo.TEACHER WHERE DNAME=t.DNAME)>(SELECT AVG(AGE) FROM dbo.TEACHER)
  7.   
  1.    --在where子句中使用子查询
       --在TEACHER中查询所有教师的教工号等,以及在STUDENT中修了这门课程的学生人数
  2. SELECT TNO,TNAME,DNAME,CNO,(SELECT COUNT(*) FROM dbo.STUDENT WHERE CNO=dbo.TEACHER.CNO) AS S_NUN FROM dbo.TEACHER ORDER BY S_NUN
      
  1.    介绍一下代码的执行过程
  2. 1、首先DBMS读取TEACHER表中的一行教师信息数据,来执行主查询。
  3. SELECT TNO,TNAME,DNAME,CNO FROM dbo.TEACHER
  4. 2、在从TEACHER表中提取了教师信息之后,DBMS将该行的TNOTNAMEDNAMECNO字段信息添加到结果表中,然后执行子查询获取STUDENT表中修改该教师开设课程的学生人数。
  5. (SELECT COUNT(*) FROM dbo.STUDENT WHERE CNO=dbo.TEACHER.CNO)
  6. 3、在子查询的WHERE子句中,CNO为子查询的表STUDENT表中的列,而TEACHER.CNOTEACHER表中的CNO列.他们的列名相同,因此对于子查询外表(即TEACHER表)中的CNO列我们一定要指明表名。
  7. 注意:在SELECT子句中使用子查询时,子查询必须返回单值。
  1. --创建和使用返回多行的子查询
  2. --一个子查询除了可以产生一个单值外,也可以产生一个关系,该关系可以包括若干元组。SQL提供了若干对于关系的操作符,主要包括:INEXISTSSOMEANY)、ALLUNIQUE等。
  3. --IN子查询
  4. 用法:
  5. SELECT column_name
  6. FROM table_name
  7. WHERE test expression [NOT] IN (subquery)
  8. test expression可以是实际值、列名、表达式或是另一个返回单一值的子查询。IN运算符前面加上NOT关键字,表示与集合成员不匹配时,NOT IN判别式求值为True
  9.  
  10. --查询不及格的课程的姓名、系、所有的课程及成绩信息
  11. SELECT s1.SNAME,s1.DNAME,s1.CNO,s1.MARK,s1.SNO FROM dbo.STUDENT AS s1,dbo.STUDENT AS s2 WHERE s1.SNO=s2.SNO AND s1.MARK< ORDER BY s1.SNAME
  12. --采用IN子查询的写法
  13. SELECT SNAME,DNAME,CNO,MARK,SNO FROM dbo.STUDENT WHERE SNO IN(SELECT SNO FROM dbo.STUDENT WHERE MARK<) ORDER BY SNAME
      
  1.    分析代码执行的过程
  2. 1、执行一个查询时,DBMS首先处理最里面的子查询。系统首先执行"SELECT SNO FROM dbo.STUDENT WHERE MARK<60"语句,生成STUDENT表中成绩小于60的学生的学号SNO集。
  3. 2DBMS一次处理STUDENT表中的一行记录,并且将每行记录中的SNO列值与子查询结果集中的SNO值进行比较。
  4. 3、如果在系统子查询结果中找到了与正在处理的记录中的SNO值相匹配的值,WHERE子句求值为TrueDBMS则将该记录的相关信息归入结果表。
  5. 4、如果在子查询结果集中没有发现与记录的SNO值相匹配的值,WHERE子句求值为FalseDBMS转而去处理STUDENT表中的下一行而舍弃该行数据。
  1. --IN子查询实现集合交和集合差运算
  2. --采用IN子查询实现集合交运算
  3. SELECT CNO,SNO,SNAME,DNAME FROM dbo.STUDENT WHERE CNO= AND SNO IN(SELECT SNO FROM dbo.STUDENT WHERE CNO=) --查询修过1号或者10号课程的学生信息--采用IN子查询实现集合差运算
  4. SELECT CNO,SNO,SNAME,DNAME FROM dbo.STUDENT WHERE CNO= AND SNO NOT IN(SELECT SNO FROM dbo.STUDENT WHERE CNO=) --查询修过1号但是没有修10号课程的学生信息
      
    注意:由运算符IN引入的子查询返回的列值,既可以来自主查询的表,也可以来自其他表。SQL对查询的唯一要求就是它必须返回单一列的数据值,并且其数据类型必须与IN前面的表达式的数据类型相兼容。
  1. --EXISTS子查询
  2. --前言:在某些情况下,我们只需要子查询返回一个True或者False,子查询数据内容本身并不重要,这时,可使用EXISTS判式来定义子查询。EXISTS判式用来测试集合是否为空,它总是与子查询结合使用,而且只要子查询中至少返回一个值,EXISTS判式的值就为True。如果子查询的表中没有值(表中没有行满足子查询的WHERE子句的搜索条件),那么EXISTS判式的值为False
  3. 用法:
  4. SELECT column_name
  5. FROM table_name
  6. WHERE [NOT] EXISTS (subquery)
  7. 只要子查询(subquery)中返回的结果表存在记录,EXISTS (subquery)就返回TrueWHERE子句的结果也就为True。如果使用[NOT] EXISTS判式,当子查询返回的结果没有记录行时,其返回True
  8. --使用EXISTS子查询
  9. SELECT TNO,TNAME,DNAME,CNO FROM dbo.TEACHER AS t WHERE EXISTS(SELECT * FROM dbo.STUDENT WHERE CNO=t.CNO) ORDER BY t.TNO --查询开设的课程有学生修过的教师信息
      
  1.    --使用NOT EXISTS子查询
  2. SELECT CNO,CNAME,CTIME,CTEST FROM dbo.COURSE AS c WHERE NOT EXISTS(SELECT * FROM dbo.STUDENT WHERE CNO=c.CNO) --查询学生表中未被选修的课程信息
  3. --使用IN子查询:
  4. SELECT CNO,CNAME,CTIME,CTEST FROM dbo.COURSE WHERE CNO NOT IN(SELECT CNO FROM dbo.STUDENT)
      
  1. --EXISTS子查询实现两表交集
  2. SELECT CNO,TNAME,DNAME FROM dbo.TEACHER WHERE TSEX='女' AND EXISTS(SELECT * FROM dbo.COURSE WHERE MONTH(CTEST)= AND CNO=dbo.TEACHER.CNO) ORDER BY CNO --女教师开设7月份课程的交集
  3. --也可以用INNER JOIN
  4. SELECT t.CNO,t.TNAME,t.DNAME FROM dbo.TEACHER AS t INNER JOIN dbo.COURSE AS c ON c.CNO = t.CNO AND t.TSEX='女' AND MONTH(c.CTEST)= ORDER BY c.CNO

    

  1. --SOME/ALL子查询
  2. --只要我们使用了SQL比较运算符(=、<、>、<=、>=)中的一个来比较两个表达式的值,那么运算符前后的表达式都必须为单一值。而数量词SOMEANYALL则允许使用比较运算符将单值与子查询返回的值加以比较,这里的子查询返回的结果可以是多行的。
  3. 用法:
  4. SELECT column_name
  5. FROM table_name
  6. WHERE test expression # SOME/ALL (subquery)
  7. test expression可以是实际值、列名、表达式或是另一个返回单一的子查询。
SOME/ALL关键字与比较运算符的联合使用
表达式 含义
>SOME 大于子查询结果中的某个值
>ALL 大于子查询结果中的所有值
<SOME 小于子查询结果中的某个值
<ALL 小于子查询结果中的所有值
>=SOME 大于等于子查询结果中的某个值
>=ALL 大于等于子查询结果中的所有值
<=SOME 小于等于子查询结果中的某个值
<=ALL 小于等于子查询结果中的所有值
=SOME 等于子查询结果中的某个值
=ALL 等于子查询结果中的所有值(通常没有实际意义)
!=SOME 不等于子查询结果中的某个值
!=ALL 不等于子查询结果中的任何一个值
  1.    --SOME/ALL子查询
  2. SELECT SNO,AVG(MARK) AS 成绩 FROM dbo.STUDENT GROUP BY SNO HAVING AVG(MARK)>=ALL(SELECT AVG(MARK) FROM dbo.STUDENT GROUP BY SNO) --平均成绩最高的学生
      
  1.    分析执行过程:
  2. 1、执行查询时,DBMS首先根据学号SNO,将STUDENT表中的数据分组,得到分组后的中间表。
  3. 2、接着执行HAVING子句,从分组后的中间表中取出一组,执行AVG(MARK)聚合函数,得到平均成绩。
  4. 3、而后系统开始执行子查询,子查询返回的结果为STUDENT表中每个同学的平均成绩。
  5. 4、如果2取出的这组同学的平均成绩小于3得到的结果表中的所有记录,则DBMS转而处理下一组数据;而如果满足条件,则DBMS将该组记录的学号和平均成绩添加到主查询的结果表中,而后继续处理下一组数据。
  6.    注意:关键字SOME和关键字ANY具有完全相同的功能
  7. --SOME/ALL子查询的使用
  8. --查询其他系中比经济管理系中所有教师年龄都小的教师信息
  9. SELECT TNO,TNAME,DNAME,AGE FROM dbo.TEACHER WHERE AGE<ALL(SELECT AGE FROM dbo.TEACHER WHERE DNAME='经济管理 ') AND DNAME<>'经济管理 ' ORDER BY AGE
  10. --采用聚集函数来实现
  11. SELECT TNO,TNAME,DNAME,AGE FROM dbo.TEACHER WHERE AGE<(SELECT MIN(AGE) FROM dbo.TEACHER WHERE DNAME='经济管理') AND DNAME<>'经济管理' ORDER BY AGE

     

    

    实际上,聚集函数实现子查询通常比直接用SOME或All查询效率更高。SOME和ALL与聚集函数关系如下:

SOME和ALL与聚集函数的对应关系
表达式 对应的聚集函数
>SOME >MIN
>ALL >MAX
<SOME <MIN
<ALL <MAX
>=SOME >=MIN
>=ALL >=MAX
<=SOME <=MAX
<=ALL <=MIN
=SOME IN
=ALL
!=SOME
!=ALL NOT IN
  1.  
  1. --相关子查询
  2. --由前面介绍的一些子查询我们不难发现,有些复杂的子查询需要执行若干次,因为每次执行时,都需要来自子查询外部的元组变量的值,也就是说,子查询的执行要依赖于上层查询元组的当前值,我们将这种子查询称之为相关子查询。
  3. --使用IN引入相关子查询
  4. SELECT CNO,CNAME,CTIME,CTEST FROM dbo.COURSE WHERE '李华' IN (SELECT SNAME FROM dbo.STUDENT WHERE CNO=dbo.COURSE.CNO) --查询李华的信息
  5. --采用表的连接
  6. SELECT c.CNO,c.CNAME,c.CTIME,c.CTEST FROM dbo.COURSE AS c INNER JOIN dbo.STUDENT AS s ON s.CNO = c.CNO WHERE s.SNAME='李华' ORDER BY c.CNO
  7.   
  1.    --比较运算符引入相关子查询
  2. SELECT s.SNAME,s.DNAME,s.CNO,s.MARK FROM dbo.STUDENT AS s WHERE (SELECT CTEST FROM dbo.COURSE WHERE CNO=s.CNO)<CAST('2006-7-2' AS SMALLDATETIME) ORDER BY s.SNAME --查询时间小于2006--,的信息
  3. --采用表的连接
  4. SELECT s.SNAME,s.DNAME,s.CNO,s.MARK FROM dbo.STUDENT AS s INNER JOIN dbo.COURSE AS c ON c.CNO = s.CNO WHERE CTEST<'2006-7-2' ORDER BY s.SNAME
      
  1. 注意:二者实现功能一样,采用表连接的方式对数据的查询更加灵活。因为采用相关子查询,所查询的列只能是主查询中FROM子句的列,不能查其他列,而采用多表连接则不存在这个问题。
  2. --在HAVING子句中使用相关子查询
  3. --在老师表中查询包含的系的名称,要求这些系中,各系包含的教师数目要少于学生表中修改该系的教师开设课程的学生的人次。
  4. --假如老师表中,A系有m个教师,而在学生表中有n人次修过这m个教师开设的课程,如果n>m,则A系就符合查询条件。
  5. SELECT t.DNAME FROM dbo.TEACHER AS t GROUP BY t.DNAME HAVING COUNT(*)<(SELECT COUNT(*) FROM dbo.STUDENT WHERE CNO IN(SELECT CNO FROM dbo.TEACHER AS t2 WHERE t2.DNAME=t.DNAME)) ORDER BY t.DNAME
      
  1.    分析执行过程:
  2. 1、执行该select语句时,DBMS首先执行FROMGROUP BY子句,将TEACHER表中的记录依据DNAME字段进行分组,形成中间表(虚拟表)。该中间表从概念上可理解为图一,其中共有6个分组。
      
  1. 2、接着系统处理来自中间表的一个分组信息,即依次对每个系名DNAME执行HAVING子句,这里假定取出第一组,即DNAME为‘电子工程’。
  2. 3HAVING子句中,比较运算符右边是一个相关子查询,而相关子查询中又含有一个子查询。系统将从最底层的子查询“SELECT CNO FROM dbo.TEACHER AS t2 WHERE t2.DNAME=t.DNAME”开始执行,即查询TEACHER表中电子工程系的所有教师所授课程的课程号,从图一见,只有一个,即‘8’。
  3. 4、而后系统将执行其外层的相关子查询,即计算STUDENT表中所有修过8号课程的记录数量。这时执行如下语句:SELECT COUNT(*) FROM dbo.STUDENT WHERE CNO IN(8),如图结果:
      
  1. 所以最终相关子查询的结果是2,而比较运算符左边为计算DNAME为‘电子工程’这组的记录条目,从图一知,只有一个记录,结果为1。显然1<2的判别式成立,HAVING子句返回TRUE,‘电子工程’就被写入结果表中。接着系统按照同样的方式依次处理图一中的第2组、第3组......
  1. --嵌套子查询
  2. --位于子查询内的子查询被称为嵌套的子查询--在COURSE中查询计算机系教师开设课程信息,并且要求在STUDENT中所有修过这门课程的同学的成绩都及格
  3. SELECT * FROM dbo.COURSE WHERE CNO IN (SELECT CNO FROM dbo.TEACHER WHERE DNAME='计算机' AND NOT EXISTS(SELECT * FROM dbo.STUDENT WHERE CNO=dbo.TEACHER.CNO AND MARK<)) ORDER BY CNO
  4. --通过两个子查询来实现
  5. SELECT * FROM dbo.COURSE WHERE CNO IN(SELECT CNO FROM dbo.TEACHER WHERE DNAME='计算机') AND NOT EXISTS (SELECT * FROM dbo.STUDENT WHERE CNO=dbo.COURSE.CNO AND MARK<) ORDER BY CNO
      
  1.   分析:在主查询WHERE子句中通过IN关键字引入一个子查询,该子查询实现的功能是:搜索那些在TEACHER表中由计算机系教师开设的、并且在STUDENT表中没有同学不及格的课程号;而在该子查询内SELECT语句的WHERE子句中,又通过NOT EXISTS关键词引入了一个子查询,该子查询即为嵌套子查询,用来判断计算机系教师开设的课程在STUDENT中是否有同学不及格。
  1. --使用子查询创建视图
  2. CREATE VIEW <view_name> [(column1,column2...)]
  3. AS
  4. SELECT <column_name>
  5. FROM <table_name>
  6. 前面博客有讲到视图的用法,可以去看http://www.cnblogs.com/liuchenxing/p/8251932.html   --创建视图,包含学生表中课程号和课程平均成绩
  7. CREATE VIEW VIEW_AVGMARK(CNO,AVG_MARK)
  8. AS
  9. SELECT CNO,AVG(MARK) FROM dbo.STUDENT GROUP BY CNO
  10. --查询这个视图
  11. SELECT * FROM VIEW_AVGMARK
  12.   
  1.    --在COURSE表中查询在STUDENT中平均成绩高于70的课程的课程号和信息
  2. SELECT CNO,CNAME,CTEST FROM dbo.COURSE WHERE CNO IN (SELECT CNO FROM VIEW_AVGMARK WHERE AVG_MARK>) ORDER BY CNO
      
  1.    --不采用视图,对比结果,用视图显得更直观,更简化语句
  2. SELECT CNO,CNAME,CTEST FROM dbo.COURSE WHERE CNO IN (SELECT CNO FROM dbo.STUDENT GROUP BY CNO HAVING AVG(MARK)>) ORDER BY CNO

Sql Server的艺术(六) SQL 子查询,创建使用返回多行的子查询,子查询创建视图的更多相关文章

  1. Sql Server的艺术(一) 视图的增删查改

    视图是从一个或者多个表中查询数据的另一种方式.利用视图可以集中.简化定制数据库,同时还能保障安全. 视图其结构和数据是建立在对应的查询基础上的.和表一样,视图也是包括几个被定义的数据列和多个数据行,但 ...

  2. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  3. SQL Server中常用的SQL语句(转):

    SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...

  4. 引用:初探Sql Server 执行计划及Sql查询优化

    原文:引用:初探Sql Server 执行计划及Sql查询优化 初探Sql Server 执行计划及Sql查询优化 收藏 MSSQL优化之————探索MSSQL执行计划 作者:no_mIss 最近总想 ...

  5. 如何转换SQL Server 2008数据库到SQL Server 2005

        背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...

  6. [转]如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine)

    [转]如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine) http://blogs.technet. ...

  7. 使用CASE表达式替代SQL Server中的动态SQL

    原文:使用CASE表达式替代SQL Server中的动态SQL 翻译自: http://www.mssqltips.com/sqlservertip/1455/using-the-case-expre ...

  8. 【转】SQL Server 运行状况监控SQL语句

    SQL Server 运行状况监控SQL语句   Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (D ...

  9. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  10. 检测SQL Server表占用空间大小SQL

    检测SQL Server表占用空间大小SQL,要先选择需要查询的数据库,然后点击执行下面脚本. ),ROWS ),reserved ) ,Data ) ,index_size ) ,Unused ) ...

随机推荐

  1. dump_stack 分析使用

    dump_stack是用来回溯内核运行的信息的,打印内核信息堆栈段: dump_stack原型: void dump_stack(void); 1.使用这个功能时需要将内核配置勾选上: make me ...

  2. java中的重载与重写

    重载简述 在java语言中,同一个类中的两个或者两个以上的方法可以有同一个名字,只要他们的的参数声明不同即可,该方法被称为重载,这个过程称为方法的重载,它是实现java多态性的一种方式. 重载是友好的 ...

  3. Andorid基础_web通信_webView案例

    一.创建Activity,layout文件 activity_web_view.xml代码: <?xml version="1.0" encoding="utf-8 ...

  4. Maven教程(1)--maven的下载、安装与配置

    Maven下载 下载地址:http://maven.apache.org/download.cgi 下载后,解压得到 Maven目录分析: bin文件夹:含有mvn运行的脚本 boot文件夹:含有pl ...

  5. 图的存储结构的实现(C/C++实现)

    存档: #include <stdio.h> #include <stdlib.h> #define maxv 10 #define max 10 typedef char e ...

  6. malloc函数用法

    malloc函数用法 函数声明(函数原型): void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类型.void* ...

  7. vue实现侧边栏手风琴效果

    模板 代码如下 html <template> <div class="header"> <ul> <!-- 循环数据在点击调用chang ...

  8. BLE空中升级 谈(二)

    BLE 空中升级谈 -- CC2541 的产品开发中OAD注意事项(续) TI CC2541支持多个硬件,多个软件对它进行空中升级,可以有不同的组合,硬件有 编号 名称 Hex 用法 1 Cc2540 ...

  9. Actor-ES框架:Ray

    并发 1. 并发和并行 并发:两个或多个任务在同一时间段内运行.关注点在任务分割. 并行:两个或多个任务在同一时刻同时运行.关注点在同时执行. 本文大多数情况下不会严格区分这两个概念,默认并发就是指并 ...

  10. Core Animation 文档翻译(第三篇)

    Core Animation 文档翻译(第三篇) 设置Layer对象 当我们使用核心动画时,Layer对象是一切的核心.Layers 管理我们APP的可视化content,Layer也提供了conte ...