请教这个语句的具体处理过程含exists和相关子查询
select   姓名 
 from   xs   where      not   exists 
 ( 
 select   *   from   kc       
    where   not   exists 
          ( 
             select   *   from   xs_kc 
 where   学号=xs.学号   and   课程号=kc.课程号 
          ) 
 ) 
 /*查找选修全部课程的学生姓名   */   
 有3个表   xs,   kc,xs_kc      
 请问具体的处理过程是怎么样的呢   谢谢   可以的话请说出开始到结束的过程
------解决方案--------------------相关子查询(也称为重复子查询)   
 许多查询都可以通过执行一次子查询并将结果值代入外部查询的 WHERE 子句进行评估。 
 在包括相关子查询(也称为重复子查询)的查询中,子查询依靠外部查询获得值。 
 这意味着子查询是重复执行的,为外部查询可能选择的每一行均执行一次。   
 下面的查询查找获得某本书 100 % 共享版税 (royaltyper) 的所有作者名。   
 USE pubs 
 SELECT au_lname, au_fname 
 FROM authors a 
 WHERE 100 IN 
    (SELECT royaltyper 
    FROM titleauthor 
    WHERE titleauthor.au_ID = a.au_id)   
 下面是结果集:   
 au_lname                                 au_fname              
 ---------------------------------------- --------------------  
 White                                    Johnson               
 Green                                    Marjorie              
 Carson                                   Cheryl                
 Straight                                 Dean                  
 Locksley                                 Charlene              
 Blotchet-Halls                           Reginald              
 del Castillo                             Innes                 
 Panteley                                 Sylvia                
 Ringer                                   Albert                  
 (9 row(s) affected)   
 与以前提到的大多数子查询不同,该语句中的子查询无法独立于主查询而得到解决。 
 该子查询需要一个 authors.au_id 值,而该值是个变量,随 Microsoft SQL Server  
 检查 authors 表中的不同行而更改。   
 下面准确说明如何评估该查询:SQL Server 考虑 authors 表中的每一行是否都包括在结果中, 
 方法是将每一行的值都代入内部查询中。例如,如果 SQL Server 首先检查 Cheryl Carson 行, 
 那么变量 authors.au_id 将取值 238-95-7766,SQL Server 将该值代入到内部查询中。   
 USE pubs 
 SELECT royaltyper 
 FROM titleauthor 
 WHERE au_id =  '238-95-7766 '   
 结果为 100,所以外部查询评估为:   
 USE pubs 
 SELECT au_lname, au_fname 
 FROM authors 
 WHERE 100 IN (100)   
 由于这是真的,因此 Cheryl Carson 行包括在结果中。对 Abraham Bennet 行运行相同的过程,会发现该行没有包括在结果中。 
 ---------------------------------------------------------------   
 举个例子; 
 SELECT t1.type 
 FROM titles t1 
 GROUP BY t1.type 
 HAVING MAX(t1.advance) > =ALL 
 (SELECT 2 * AVG(t2.advance) 
 FROM titles t2 
 WHERE t1.type = t2.type) 
 这个结果返回最高预付款超过给定组中平均预付款两倍的书籍类型。 
 -----------------------------------   
 再举个例子: 
 要求返回每一个编号的最大值(列出id,name,score) 
 ID Name(编号) Score(分数) 
 1 a 88 
 2 b 76 
 3 c 66 
 4 c 90 
 5 b 77 
 6 a 56 
 7 b 77  
 8 c 67 
 9 a 44 
 select * from t a where score= 
 (select Max(Score) from t b where a.name=b.name) 
 ------------------------------   
 再给一个排位的sql语句 
 SELECT  
 ( SELECT count(*)+1 as dd FROM [Test ] as a where a.[F2] <b.[F2] ) AS ord, 
 b.[F1], b.[F2]  
 FROM [Test ] as b  
 order by b.[F2];   
 相关子查询与普通子查询的区别在于:相关子查询引用了外部查询中的列!这种用外部查询来限制子查询的方法使 
 SQL查询变得更加强大和灵活。因为相关子查询能够引用外部查询,所以它们尤其适合编写复杂的where条件! 
 相关子查询不能自己单独运行,其执行顺序如下: 
 1.首先执行一次外部查询 
 2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。 
 3.使用子查询的结果来确定外部查询的结果集
------解决方案--------------------此语句使用了双重否定为肯定式,可以这样理解:  
   1.选择学生姓名 
   2.不存在一个学生