假设有如下三个表
学生(学号,姓名,年龄,所在系)
课程(课程号,课程名,先行课)
选课(学号,课程号,成绩)
假设要求如下SQL查询:
求没有选修C2课程的学生姓名。
可以写成
SELECt 姓名
FROM 学生
WHERe NOT EXISTS (SELECt *
FROM 选课
WHERe 学生。学号=学号 AND 课程号=‘C2');
书上有提示,说
由于WHERe子句中的条件是元祖选择条件,所以不能写成
SELECt 姓名
FROM 学生,选课
WHERe 学生。学号=选课。学号 AND 课程号 < > 'C2';
这是为什么呢?
还有一个例子是,求选修了C1课程,并且也选修了C2课程的学生学号
不能写成
SELECt 学号
FROM
WHERe 课程号='C1' AND 课程号=’C2';
书上说WHERe子句是元祖选择子句,就不能这样用。我不明白。难道用AND连接两个条件就不行么?WHERe到底怎么用的~?
谢谢
关于WHERe语句的问题
答案:2 悬赏:50
解决时间 2021-02-18 01:26
- 提问者网友:回憶丶初
- 2021-02-17 17:59
最佳答案
- 二级知识专家网友:我叫很个性
- 2021-02-17 18:45
where 之后的语句是用来做筛选的条件
and 关键字是用来进行多条件连接的
你这里进行二定义了,当然让数据库不知道你到底要做什么
WHERe 课程号='C1' AND 课程号=’C2';
这一句中,你先定义了“课程号要等于C1”,却在AND联接后面再要求它等于C2,这个时候就像你告诉一个人往左转,但紧接着就说是往右转,搞得别个也不知道到底该听你哪一句才是对的。
如果你想同时满足这两种条件:“课程号即等于C1,又等于C2”,那么可以用in 或者 or 关键字
in(条件1,条件2,.....,条件N)
in关键字可以从后面指定的条件中将结果集进行逐个匹配,如果有一个条件成立那么就成立
所以你这里可以写成
SELECt 学号
FROM 选课
WHERe 课程号 in ('C1' ,’C2')
and 关键字是用来进行多条件连接的
你这里进行二定义了,当然让数据库不知道你到底要做什么
WHERe 课程号='C1' AND 课程号=’C2';
这一句中,你先定义了“课程号要等于C1”,却在AND联接后面再要求它等于C2,这个时候就像你告诉一个人往左转,但紧接着就说是往右转,搞得别个也不知道到底该听你哪一句才是对的。
如果你想同时满足这两种条件:“课程号即等于C1,又等于C2”,那么可以用in 或者 or 关键字
in(条件1,条件2,.....,条件N)
in关键字可以从后面指定的条件中将结果集进行逐个匹配,如果有一个条件成立那么就成立
所以你这里可以写成
SELECt 学号
FROM 选课
WHERe 课程号 in ('C1' ,’C2')
全部回答
- 1楼网友:眠于流年
- 2021-02-17 20:12
你的语句有问题应该这样
select id , name from test where id in('1001','1005','1003');
如果你想按顺序的话 这样就可以
select id , name from test where id='1001'
union all
select id , name from test where id='1005'
union all
select id , name from test where id='1003'
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯