要查找所有學(xué)生的學(xué)號以及選修的課程號,將所有學(xué)生所在的學(xué)生信息表S作為主表,與被選修的課程所在的學(xué)生選課信息表SC進(jìn)行表連接,以上選項中只有D選項是將S作為主表進(jìn)行橫向連接。
正確答案是:D: SELECT S.SNO,CNO FROM S LEFT JOIN SC ON S.SNO=SC.SNO;
專業(yè)分析如下:
1. **題目要求**:查找所有學(xué)生的學(xué)號以及選修的課程號。需要注意的是,有的學(xué)生沒有選課,因此需要包含所有學(xué)生的信息,即使他們沒有選修任何課程。
2. **選項分析**:
- **A: SELECT SNO,CNO FROM GRADE;**
- 這個選項有誤,因為表名應(yīng)為SC(學(xué)生選課信息表),而不是GRADE。
- **B: SELECT S.SNO,CNO FROM S INNER JOIN SC ON S.SNO=SC.SNO;**
- INNER JOIN 只會返回兩個表中都有匹配記錄的行。如果某個學(xué)生沒有選修任何課程,這個學(xué)生的信息將不會出現(xiàn)在結(jié)果中,不符合題目要求。
- **C: SELECT S.SNO,CNO FROM S OUTER JOIN SC ON S.SNO=SC.SNO;**
- OUTER JOIN 不是標(biāo)準(zhǔn)的SQL語法,SQL標(biāo)準(zhǔn)中定義的是LEFT JOIN、RIGHT JOIN和FULL JOIN。
- **D: SELECT S.SNO,CNO FROM S LEFT JOIN SC ON S.SNO=SC.SNO;**
- LEFT JOIN 會返回左表(學(xué)生信息表)中的所有記錄,即使右表(學(xué)生選課信息表)中沒有匹配的記錄。這正好符合題目要求,因為即使某個學(xué)生沒有選修任何課程,該學(xué)生的學(xué)號也會出現(xiàn)在結(jié)果中。
綜上所述,選項D是正確的SQL語句。