多张表进行查询

1、表中存在的关系,一对一,一对多,多对多。

2、等值查询

SELECT 表1.字段名,表2.字段名 FROM 表1,表2WHERE 表1.关键字段=表2.关键字段;

可以使用别名,一旦使用别名则不能再使用表的名字来指定对应字段。

3、自连接查询

多表查询不仅可以在多张表之间查询,也可以在一张表之间进行多表查询

1、内连接 join on 语句,多个条件可以使用( )括起来

SELECT 表1.字段,表2.字段 FROM 表1 JOIN 表2 ON 表1.关键字段=表2.关键字段;

2、外连接 外连接分为左外连接( left outer join ) 和右外连接( right outer join )其值outer 可以省略。外连接查询时,条件用 on 连接,多个条件使用() 将其括起来.左外连接表示以左表为主表,右外连接表示以右表为主表。查询时将主表信息在从表中进行匹配

1、左外连接;

SELECT 字段列表 FROM 表1 LEFT JOIN 表2 ON 条件 ... ;

2、右外连接:

SELECT 字段列表 FROM 表1 RIGHT JOIN 表2 ON 条件 ... ;

3、子查询

1、单行子查询:

SELECT * FROM 表名 WHERE 字段名= ( 查询语句);

2、多列子查询:

SELECT * FROM 表名 WHERE (字段名1,字段名2)= (查询语句);;

注意,查询语句中的字段名应当与"="前的字段名一致。

3、多行子查询:

操作符有:IN,ALL,ANY,NOT IN

IN:在指定范围内即可

ALL:子查询返回列表的所有值都必须满足

ANY;满足返回列表中任意一个即可

4、关联子查询:

关联子查询与外部查询(主查询)之间存在联系,并且内部子查询的结果依赖于外部查询的值。内部子查询的执行取决于外部查询的每一行。

SELECT student_name,
(SELECT score FROM scores WHERE subject = 'Math' AND
students.student_id = scores.student_id) AS math_score
FROM students;

补充:

IFNULL用法:

可以接受两个参数,如果不是NULL,返回第一个参数。否则返回第二个参数。

IFNULL(NUM,'暂无');

CASE语句:

CASE 
​
 WHEN    条件1         THEN       返回值
​
 WHEN    条件1         THEN       返回值 
​
WHEN    条件1         THEN       返回值
​
ELSE      返回值
​
END

满足第一个条件时返回一个值,一旦条件为真,会停止读取并返回结果。如果都没有条件为真,则会返回ELSE子句的值。

如果没有ELSE自居部分且没有条件为真,则返回NULL。

在Spring MVC架构中,Controller通常负责处理用户的请求并调用服务层(Service)来进行业务逻辑。如果需要同时从多张数据库查询数据,Controller可以将查询需求封装成Service,并通过Repository层去执行这些查询。 1. **定义Repository接口**:首先,在Repository接口中声明方法,这些方法应对应于对多张的操作,比如`findAllFromTableAAndTableB()`,这样Service层就可以依赖这些方法获取数据。 ```java public interface MyMultiTableRepository { List<MyDataObject> findAllFromTableAAndTableB(); } ``` 2. **实现Repository**:Spring Data JPA 或 Hibernate 等 ORM 框架会自动为Repository接口生成对应的实现类,它会提供执行SQL查询的功能。 3. **Service层调用**:在Service层,注入相应的Repository实例,然后调用这些方法来执行联合查询。 ```java @Service public class MyService { private final MyMultiTableRepository repository; public MyService(MyMultiTableRepository repository) { this.repository = repository; } public List<CombinedData> getCombinedData() { return repository.findAllFromTableAAndTableB().stream() .map(this::transformToCombinedData) .collect(Collectors.toList()); } // 这里省略了将查询结果转换的具体实现 } ``` 4. **Controller返回响应**:最后,在Controller层,Service层返回的结果会被组装成合适的视图模型,传给前端展示。 注意,在实际操作中,为了提高性能和减少数据库交互,可以考虑使用JOIN查询、延迟加载或分页策略。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值