请问:
如:有两个表a,b 表a中有sno,sex两列 表b中有sno,score两列
1,当使用:SELECT sno FROM  a,b 语句执行查询时 会
报错:列名 'sno' 不明确。
单独使用不会报错 如:SELECT sno FROM a
明确指定哪个表中的sco列不报错 如:SELECT a.sno FROM a,b
2,当使用:SELECT sex,score FROM a,b 语句执行查询时
不会报错 会正确显示a中的sex列和b中的score列也就是说当从多个表中查询某些列的时候 可以直接查询出每个表特有的列 也可以查询出多个表共有的列 只要指定列名所属的表即可 问题:既然可以直接查询出所需的列 那为什么还要使用连接查询呢 连接查询该怎么理解呢
谢谢

解决方案 »

  1.   

    因为sno字段是2个表都有的字段,如果不用别名是没办法区分是A表还是B表,建议你还是对表采用别名来取数据,采用标准SQL语句,不要用那种墨零两可的方法,并不能说明不报错就是你语句正确,只能说MSSQL对SQL语法要求不是那么严格罢了正确语句应该这么写:
    SELECT 
      A1.SNO,
      A1.SEX,
      B1.SNO,
      B1.SCORE
    FROM
      A AS A1,
      B AS B1
      

  2.   

    1:因為兩張表都有SNO,所以要指明
    2:SELECT sex,score FROM a,b得到兩張表的迪卡尔集
      
      

  3.   

    请问: 
    如:有两个表a,b 表a中有sno,sex两列 表b中有sno,score两列 
    1,当使用:SELECT sno FROM  a,b 语句执行查询时 会 
    报错:列名 'sno' 不明确。 
    单独使用不会报错 如:SELECT sno FROM a 
    明确指定哪个表中的sco列不报错 如:SELECT a.sno FROM a,b 
    ------------------------
    select a.sno , b.sno from a,b当连接的表中有相同的列时,需要指明获取哪个表的列.
    2,当使用:SELECT sex,score FROM a,b 语句执行查询时 
    不会报错 会正确显示a中的sex列和b中的score列 也就是说当从多个表中查询某些列的时候 可以直接查询出每个表特有的列 也可以查询出多个表共有的列 只要指定列名所属的表即可 问题:既然可以直接查询出所需的列 那为什么还要使用连接查询呢 连接查询该怎么理解呢 因为sex, score列分属不同的表,且各表中只有一个sex,score列,所以可以直接获取,不需要指明表名.连接的作用是指带条件的查询.SELECT sex,score FROM a,b
    SELECT sex,score FROM a,b where a.id = b.id
    SELECT sex,score FROM a,b where a.id = b.id and a.date <= getdate()
      

  4.   

    如:有两个表a,b 表a中有sno,sex两列 表b中有sno,score两列 
    1,当使用:SELECT sno FROM  a,b 语句执行查询时 会 
    报错:列名 'sno' 不明确。 
    这个地方有由于表a和表b中都有sno这个列,所以电脑不知道你这个地方表示的是那一个。
    单独使用不会报错 如:SELECT sno FROM a 
    由于这个地方只有一个列为sno,所以不会报错
    明确指定哪个表中的sco列不报错 如:SELECT a.sno FROM a,b
    已经明确的指定了是那一列
    2,当使用:SELECT sex,score FROM a,b 语句执行查询时 
    不会报错 会正确显示a中的sex列和b中的score列 
    也就是说当从多个表中查询某些列的时候 可以直接查询出每个表特有的列 也可以查询出多个表共有的列 只要指定列名所属的表即可 
    问题:既然可以直接查询出所需的列 那为什么还要使用连接查询呢 连接查询该怎么理解呢 
    SELECT sex,score FROM a,b
    显示的结果是sex的每一个数据分别对应的score中的每一个数据,也就是显示的数目条数为a表的数目条数乘以b表的数目条数
    连接查询之后可以取消掉很多多的查询就结果。
    比如:
    SELECT sex,score FROM a,b where a.sno=b.sno
    出来的结果是只有a表的列sno与b表的列sno相等的时候才会显示。
      

  5.   

    "SELECT sno FROM  a,b;" 这样语句的查询范围为a*b(笛卡儿积),效率不高.为了以后查询、更新工作更加高效方便,建议楼主定义不同表的列名时不要完全相同,否则以后的修改更新工作较为繁杂。个人拙见。
      

  6.   

    SELECT sex,score FROM a,b得到兩張表的迪卡尔集 
    SELECT sex,score FROM a,b where a.id = b.id