请问这道SQL题目,哪里出错了?

来源:百度知道 编辑:UC知道 时间:2024/05/26 12:49:56
请写出在class和stu表中查找满足如下条件的记录的SQL语句:
1.表class中的字段c_id与stu表中的s_cid为关联字段
2.返回字段c_name,s_no,s_name
3.查询条件:c_stu字段值大于20,并且s_no第二到四位是“006”这三个字符的
4:查询结果按s_no倒排序
注:因为两个表中的字段没有重名,因此写本条SQL语句时字段名前不用加表名

SELECT c_name,s_no,s_name FROM CLASS,STU WHERE c_id=s_cid AND c_stu>20 AND s_no like '_006%' ORDER BY s_no DESC

题目的问题,感觉存在一些让人容易误解的地方:
第一个条件中:说了class.c_id与s_cid关联,但是没有说以何种关系关联,难道仅仅是等式匹配形式关联?
没有说明结果集是以内联还是外联(包括左外联、右外联和全外联)形式返回。
------------------
回答当中的瑕疵:
你的回答是默认以题意为class.c_id与s_cid等式匹配关联并且两表以内联形式返回结果集的吧?不过你这种写法虽然可用,但不是建议的写法(你的写法本质上其实是先交叉联接(CROSS JOIN)查询,然后在通过where字句匹配过滤,不过在SQLServer2000及以后的版本中,这种写法会自动优化为内连接写法,所以效率一般感觉不出来,但是如果数据量大且在SQLServer2000以下的版本中,效率的劣势就很明显了,当然,现在已几乎没人用2000以下的版本了),建议如下格式书写:
SELECT c_name, s_no, s_name
FROM CLASS C INNER JOIN STU S ON C.c_id = S.s_cid
WHERE c_stu > 20
AND s_no LIKE '_006%'
ORDER BY s_no DESC

select class.c_name,stu.s_no,stu.s_name
from stu
inner join class on class.c_id=stu.s_cid
where length(class.c_stu)>20
and s_no like '_006%'
order by stu.s_no desc;
你试试

思路没错 前面Select是不写可以,后面最好加上。
SELECT C.c_name,S.s_no,S.s_name FROM CLASS C,STU S WHERE C.c_id=S.s_cid AND C.c_stu>20 AND S.s_no like '_006%' ORDER BY S.s_no DESC