SQL语句查询——以一个表中的两列数据为条件据查询另一个表中的数据

这篇博客介绍了如何使用SQL语句从学生基本信息表中查询语文成绩大于80分的学生信息。通过联接操作,结合学生考试成绩总分表和考试成绩明细表,实现了跨表查询。查询条件是将班级和姓名拼接后匹配,确保了查询结果的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL语句查询——以一个表中的两列数据为条件据查询另一个表中的数据

有三个表格:分别如下
表一【学生基本信息表】包含:班级、姓名、年龄、学号、家庭住址等
表二【学生考试成绩总分表】包含:ID、班级、姓名、总分
表三【考试成绩明细表】包含:ID、各科成绩名称、分数

查询要求:

查询语文成绩大于80分的学生的基本信息,但是姓名有重复的,(即可能1班、2班都有小明)

select *   FROM Students
  where ClassName + CAST(Name as varchar ) 
  in (select ClassName + CAST(Name as varchar )  from SumScore where ID in
  		(select ID from Score_DETAIL where ITEM_NAME ='语文' and score > 80)
	  )

注释:

CAST (expression AS data_type)
将某一列的数据转换成其他类型的数据。
查询语句中的【ClassName + CAST(Name as varchar ) 】这一部分,是将班级和姓名连起来,然后去比较;使用到➕,左右两边都得是字符串的格式,所以用到CAST,但是姓名本身就是varchar所以这里的CAST()可以省略,变成【ClassName + Name 】

### SQL 更新字段1等于特定值时将字段2数据赋值给字段1的方法 在 SQL 中,可以通过 `UPDATE` 语句来完成这一需求。具体来说,当需要更新中某些满足条件的记录并将字段2的数据赋值给字段1时,可以按照以下语法结构编写: ```sql UPDATE table_name SET field1 = field2 WHERE field1 = specific_value; ``` 其中: - `table_name` 是目标的名字; - `field1` 是要被更新的目标字段; - `field2` 是提供新值的源字段; - `specific_value` 是用于限定哪些记录会被更新的具体值。 此语法会找到所有 `field1` 等于 `specific_value` 的记录,并将其 `field1` 的值设置为这些记录中对应的 `field2` 值[^1]。 #### 示例代码 假设有一个名为 `example_table` 的,该包含两列:`column_a` 和 `column_b`。如果希望把所有 `column_a` 等于 `'old_value'` 的记录替换为其对应的 `column_b` 数据,则可执行如下命令: ```sql UPDATE example_table SET column_a = column_b WHERE column_a = 'old_value'; ``` 这条指令将会扫描整个格寻找符合条件——即 `column_a='old_value'` ——的所有行,并把这些行里的 `column_a` 替换成它们各自的 `column_b` 值[^1]。 对于可能存在的 NULL 处理情况,在 Oracle 或其他支持 NVL 函数的数据库系统下,还可以利用类似下面的方式防止因 NULL 而产生的错误或者意外行为: ```sql UPDATE example_table SET column_a = NVL(column_b, default_value) WHERE column_a = 'old_value'; ``` 这里默认使用了一个假定的 `default_value` 来替代任何可能出现的 NULL 值[^2]。 外需要注意的是不同类型的 DBMS 对应的功能实现细节可能会有所差异,比如 PostgreSQL 下面提到的例子就是针对其特性的解决方案之一[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值