在练习mysql语句时遇到下面问题,请指教执行
(1)select first.Cno,second.Cpno from course first,course second where first.Cpno=second.Cno;
和执行
(2)select Cno,Cpno from course where Cpno=Cno;
的结果为什么不一样?在(1)中,
first和second是course的别名,
也就是说first和second是同一个表,
那么像(2)那样不用别名,
只在本表中查询,理论上而言,结果不是应该是相同的吗?

解决方案 »

  1.   

    select Cno,Cpno from course where Cpno=Cno;
    这相当于where 1=1 和没加条件一样
      

  2.   

    1是用到了join的原理,
    2是同一行的2个字段来比较;
      

  3.   

    1    2
    2    3
    1    4 
    这样的表,你用第2个方法的话 不会出结果;
    但是用到第一条的自连接的话,就可以出一条结果.手册中
    13.2.7.1. JOIN语法
      

  4.   

    1)select first.Cno,second.Cpno from course first,course second where first.Cpno=second.Cno;==>这个语句你可以认为是2个表在做链接查询,只是2个表的记录和格式都是一样的而已。是一个内连接查询语句。(2)select Cno,Cpno from course where Cpno=Cno;
    ==》一个表内的2个字段如果相等,就列入到结果集。
      

  5.   

    select first.Cno,second.Cpno from course first,course second 
    course first和course second是两个单独的表啊,为什么要进行连接(关系代数)?
    连接是是否是采用了一般连接?
      

  6.   

    楼主去看看手册里面的join 章节;
      

  7.   

    先读三遍《数据库系统概论(第四版)》 王珊 萨师煊   高等教育出版社 (掌握基础知识和概念) 然后再粗略浏览一遍MYSQL的官方手册。(方便以后查找,避免类似于考试的时候,给你本政治书也不知道答案在第几章,第几页)MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  8.   

    select first.Cno,second.Cpno from course first,course second where first.Cpno=second.Cno;
    我的语句里并没有出现 join啊
    如果是有join我就容易理解了
      

  9.   


    join...on可以省略的.省略之后 表之间用逗号隔开, on用where 代替