头歌Kingbase ES内连接、外连接查询

第1关:内连接(1)

任务描述
本关任务:在 TESTDB 数据库中查询指定数据。

相关知识
连接查询
连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。
当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息,连接操作给用户带来很大的灵活性。

内连接
内连接的查询结果显示符合条件的记录。
如图所示的表A和表B,我们对其进行内连接查询。

表的连接方法有以下两种:
(1)FROM子句指明进行连接的表名,WHERE子句指明连接的列名及其连接条件。

SELECT <字段名1>, <字段名2>...
FROM <表名1>,<表名2>,...
WHERE 表连接条件 <AND 检索条件>;
(2)利用关键字JOIN进行连接。
内连接:inner join
基本语法:

SELECT <字段名1>, <字段名2>...
FROM <表名1> INNER JOIN <表名2>
ON 表连接条件
WHERE 检索条件;
示例用法
(1)select * from A, B  WHERE A.type = B.type;
(2)select * from A inner join B on A.type = B.type;

示例结果(黄色部分)


这样,就内连接查询到了表中含有相同信息的结果集。

编程要求
查询参加了G001课程的学生人数。

测试说明
平台会对你编写的代码进行测试,结果正确即可通关。

开始你的任务吧,祝你成功!

---------- BEGIN ---------- 
SELECT SUM(gnum)
from class INNER JOIN teaching ON class.gno=teaching.gno 
INNER  JOIN course on teaching.cno=course.cno AND course.cno='G001'
GROUP BY teaching.cno;



---------- END ---------- 

第2关:内连接(2)

任务描述
本关任务:在 TESTDB 数据库中查询指定数据。

相关知识
连接查询
连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。
当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息,连接操作给用户带来很大的灵活性。

内连接
内连接的查询结果显示符合条件的记录。
如图所示的表A和表B,我们对其进行内连接查询。

表的连接方法有以下两种:
(1)FROM子句指明进行连接的表名,WHERE子句指明连接的列名及其连接条件。

SELECT <字段名1>, <字段名2>...
FROM <表名1>,<表名2>,...
WHERE 表连接条件 <AND 检索条件>;
(2)利用关键字JOIN进行连接。
内连接:inner join
基本语法:

SELECT <字段名1>, <字段名2>...
FROM <表名1> INNER JOIN <表名2>
ON 表连接条件
WHERE 检索条件;
示例用法
(1)select * from A, B  WHERE A.type = B.type;
(2)select * from A inner join B on A.type = B.type;

示例结果(黄色部分)

这样,就内连接查询到了表中含有相同信息的结果集。

编程要求
查询“杨梅”老师所讲授的课程,要求列出教师号、教师姓名和课程号。
列顺序请按照 tno  | tname | cno 。 

测试说明
平台会对你编写的代码进行测试,结果正确即可通关。

开始你的任务吧,祝你成功!

---------- BEGIN ---------- 
select teacher.tno,tname,cno
from teacher,teaching
where teacher.tno=teaching.tno and tname='杨梅';

---------- END ---------- 

第3关:外连接

任务描述
本关任务:在 TESTDB 数据库中查询指定数据。

相关知识
外连接
内连接的查询结果显示符合条件的记录,而外连接的查询结果除了显示符合条件的记录,还包括不符合条件的记录。
实例还是使用此表。

外连接是以某张表(左表或右表)为主,取出里面的所有记录, 然后每条与另外一张表(从表)进行连接;不管能不能匹配上条件,主表记录最终都会保留。能匹配,正确保留;不能匹配,从表的字段都置空NULL。而内连接只保留匹配条件的行。

左(外)连接
left join: 以左表为主表
基本语法: from 左表 left join 右表 on 左表.字段 = 右表.字段;
示例用法
select * from A left join B on A.type = B.type;
示例结果(黄色部分,无数据为null)


右(外)连接
right join: 以右表为主表
基本语法: from 左表 right join 右表 on 左表.字段 = 右表.字段;
示例用法
select * from A right join B on A.type = B.type;
示例结果(黄色部分,无数据为null)


全(外)连接
全外连接的查询结果显示符合条件的记录,以及左、右表中不符合条件的记录。
基本语法: from 左表 full join 右表 on 左表.字段 = 右表.字段;
示例用法
select * from A full join B on A.type = B.type;
示例结果(黄色部分,无数据为null)


编程要求
查询18级所有班级的上课信息,要求列出班级号、课程号、开课学期和教室名。
列顺序请按照   gno   | cno  | term | classroom 。

测试说明
平台会对你编写的代码进行测试,结果正确即可通关。

开始你的任务吧,祝你成功!

---------- BEGIN ---------- 
select teaching.gno,cno,term,classroom
from class
inner  JOIN teaching ON class.gno=teaching.gno and grade='18级'

---------- END ---------- 

第4关:自连接

任务描述
本关任务:在 TESTDB 数据库中查询指定数据。

相关知识
自连接
针对相同的表进行的连接被称为“自连接”。自联接用于将表连接到自身(同一个表)。 它对于比较同一个表中的行很有用。
 由于使用自联接的查询引用同一个表,因此表别名用于为查询中的表分配不同的名称。
请注意,如果在不使用表别名的情况下在查询中多次引用同一个表,则会出现错误。
基本语法:
(1)利用FROM...WHERE...

SELECT <字段名1>, <字段名2>...
FROM <表名> AS X , <表名> AS Y
WHERE 表连接条件 <AND 检索条件>;
(2)利用关键字JOIN。

SELECT <字段名1>, <字段名2>...
FROM <表名> AS X INNER JOIN <表名> AS Y
ON 表连接条件
WHERE 检索条件;
自连接的用途以及用法
例子:查找收入超过各自经理的员工的姓名

Id    Name    Salary    ManagerId
1    Joe    70000    3
2    Henry    80000    4
3    Sam    60000    NULL
4    Max    90000    NULL
SELECT e1.Name AS employee_name
FROM Employee AS e1, Employee AS e2
WHERE e1.ManagerId=e2.Id
AND e1.Salary>e2.Salary
例子:查找比昨天温度高的所有日期的 Id

Id(INT)    RecordDate(DATE)    Temperature(INT)
1    2015-01-01    10
2    2015-01-02    25
3    2015-01-03    20
4    2015-01-04    30
SELECT w1.Id
FROM weather w1
JOIN weather w2
ON DATEDIFF(w1.RecordDate,w2.RecordDate)=1
WHERE w1.Temperature>w2.Temperature
编程要求
查询比“软件19级3班”人数少的班级信息。
列顺序请按照   gno   |    gname    | gnum 。

测试说明
平台会对你编写的代码进行测试,结果正确即可通关。

开始你的任务吧,祝你成功!

---------- BEGIN ---------- 
select gno,gname,gnum
from class
where gnum<(
    select gnum
    from class
    where gname='软件19级3班'
)

---------- END ---------- 

提供的参考引用中未提及KingbaseES连接名重复问题的解决方案。一般来说,解决KingbaseES连接名重复问题可以尝试以下方法: ### 检查连接配置文件 在配置文件中查找重复的连接名,比如在相数据库连接配置文件(可能是JDBC配置文件等)中,仔细核对每个连接的名称,将重复的名称进行修改,确保每个连接名唯一。例如,在使用JDBC连接KingbaseES时,如果是在Java项目的配置文件里,可以按如下示例检查: ```xml <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="driverClassName" value="com.kingbase8.Driver"/> <!-- 检查这里的连接名相配置 --> <property name="url" value="jdbc:kingbase8://host:port/database"/> <property name="username" value="yourUsername"/> <property name="password" value="yourPassword"/> </bean> ``` ### 检查数据库管理工具 如果是通过数据库管理工具(如KingbaseES自带的管理工具)创建连接,在创建连接时,工具通常会提示连接名是否重复。此时需要手动修改连接名,使其具有唯一性。 ### 代码层面检查 若在代码中动态创建数据库连接,要在创建连接时添加逻辑来检查连接名是否重复。例如在Java代码中: ```java import java.util.HashSet; import java.util.Set; public class ConnectionNameManager { private static Set<String> connectionNames = new HashSet<>(); public static boolean isConnectionNameDuplicate(String name) { return connectionNames.contains(name); } public static void addConnectionName(String name) { connectionNames.add(name); } } // 使用示例 public class Main { public static void main(String[] args) { String connectionName = "myConnection"; if (ConnectionNameManager.isConnectionNameDuplicate(connectionName)) { // 处理重复情况,如添加序号 int index = 1; String newName = connectionName + "_" + index; while (ConnectionNameManager.isConnectionNameDuplicate(newName)) { index++; newName = connectionName + "_" + index; } connectionName = newName; } ConnectionNameManager.addConnectionName(connectionName); // 后续使用connectionName创建连接 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值