(1)下面的语句会提示认不出t3,不知道为什么。这个语句逻辑上是有问题的,我只是想知道为什么最内层的t3会认不出来~~
   select * from employee as t1,departments as t2,salary as t3
     where t1.did=t2.did and t1.eid=t3.eid and income
    >all(select income from t3 where t2.name='hrm')
[三个关系模式: employee(eid,ename,did); departments(did,name);salary(eid,income) ]
(2)数据库原理教科书经典例子:查找选修了全部课程的学生的姓名。是用exists实现的,除了它还有其他方法吗?也就是说,exists是不是有时候是非它不可的。
(3)自定义数据类型,sp_addtype [ @typename = ] type,[ @phystype = ] system_data_type[ , [ @nulltype = ] 'null_type' ] [ , [ @owner = ] 'owner_name' ],空值类型可以有NONULL,是什么意思?
(4)看这两句:
DECLARE @student char(8)
SET @student=(SELECT name FROM student)
查询的结果是一个数据集,但student是一个字符串,怎么赋值呢?先到这里吧~~谢谢了!

解决方案 »

  1.   

    2. exists很多时候可以使用in或者join实现3. sp_addtype [ @typename = ] type,  -- 用户定义的类型的名称
            [ @phystype = ] system_data_type[ , -- sql支持的数据类型
            [ @nulltype = ] 'null_type' ]       -- 当该类型用于列的类型时, 默认是否允许NULL值,例如: sysname 就是一种自定义数据类型, 如果你创建类型为sysname的列, 你会发现它是不允许为NULL值的, 除非你定义列的时候, 显式地指定了 NULL
            ;[ , [ @owner = ] 'owner_name' ],
      

  2.   

    4.DECLARE @student char(8)
    DECLARE @s nvarchar(4000)
    SET @s = 'SET @student=(SELECT name FROM ' + @student + ')'
    exec sp_executesql @s, N'@student char(8) out', @student out
      

  3.   

    (4)看这两句:
    DECLARE @student char(8)
    SET @student=(SELECT name FROM student)
    查询的结果是一个数据集,但student是一个字符串,怎么赋值呢?
    ------
    DECLARE @student char(8)
    select @student=name from student
      

  4.   

    1.表别名是为了简化输出列的简便,如:表名.colname 可以简化为:别名.colname
    2.exists 可以用NOT INT替代
    3.查联机帮助
    [@nulltype =] 'null_type'指明用户定义的数据类型处理空值的方式。null_type 的数据类型为 varchar(8),默认值为 NULL,并且必须用单引号引起来('NULL'、'NOT NULL' 或 'NONULL')。如果没有用 sp_addtype 显式定义 null_type,则将其设置为当前默认的为空性。使用 GETANSINULL 系统函数可确定当前默认的为空性,可以使用 SET 语句或 sp_dboption 对该为空性进行调整。应显式定义为空性。 
    说明  null_type 参数只为该数据类型定义默认的为空性。如果在创建表的过程中使用用户定义的数据类型时显式地定义了为空性,那么该为空性优先于已定义好的为空性。有关更多信息,请参见 ALTER TABLE 和 CREATE TABLE。 4.(DECLARE @student char(8)
    SET @student=(SELECT top 1 name FROM student)
      

  5.   

    谢谢!!!
    2.这个语句我还是没想出来怎么用in来代替:
    SELECT 姓名 FROM XS WHERE NOT EXISTS 
       (SELECT * FROM KC WHERE NO EXISTS
           (SELECT * FROM XSKC WHERE 学号=XS.学号 AND 课程号=KC.课程号
       )
    XS——学生基本信息;KC——课程信息;XSKC——成绩表3. [ @nulltype = ] 'null_type' ]  'null_type' 可以是'NULL','NOT NULL','NONULL',前两个我明白,可是'NONULL'是什么意思?谢谢!!
      

  6.   

    2.
    SELECT 姓名 FROM XS WHERE 学号 in(
        select 学号 from xskc
        group by 字号
        having count(distinct 课程号) = (SELECT count(*) FROM KC))3. NOT NULL == NONULL
      

  7.   

    恩,换成这个思路是可以~~谢谢哦 ~~!!可是下面这条就不能用这样的思路了吧:
    SELECT DISTINCT 学号
        FROM XS_KC AS CJ1
        WHERE NOT EXISTS
        (SELECT *
            FROM XS_KC AS CJ2
            WHERE CJ2.学号='001102' AND NOT EXISTS
            (SELECT *
                 FROM XS_KC AS CJ3
                 WHERE CJ3.学号=CJ1.学号 AND CJ3.课程号=CJ2.课程号
            )
        )