头歌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 ---------- 
相关推荐
muxin-始终如一2 小时前
MySQL与Redis面试问题详解
数据库·redis·mysql
龙茶清欢2 小时前
7、revision 是 Maven 3.5+ 引入的现代版本管理机制
java·elasticsearch·maven
歪歪1003 小时前
如何在SQLite中实现事务处理?
java·开发语言·jvm·数据库·sql·sqlite
瑶总迷弟3 小时前
静默安装 Oracle Database 21c on CentOS 7.6
数据库·oracle·centos
know__ledge3 小时前
Pytest+requests进行接口自动化测试6.0(Jenkins)
elasticsearch·jenkins·pytest
在未来等你3 小时前
Elasticsearch面试精讲 Day 20:集群监控与性能评估
大数据·分布式·elasticsearch·搜索引擎·面试
博睿谷IT99_4 小时前
SQL SELECT 语句怎么用?COMPANY 表查询案例(含条件 / 模糊 / 分页)
数据库·sql·mysql
浅拾光º4 小时前
mysql字符串截取,如何在MySQL备份文件中安全截取敏感字符串?
数据库·mysql·安全
鸠摩智首席音效师5 小时前
如何删除 MySQL 数据库中的所有数据表 ?
数据库·mysql·oracle