OpenGauss数据库-F.连接查询与子查询

第1关:内连接查询

任务描述

本关任务:使用内连接查询数据表中学生姓名和对应的班级。

--########## 查询数据表中学生姓名和对应的班级 ##########
--#请在此处添加实现代码
--########## Begin ##########
SELECT 
    s.name AS studentName,
    c.name AS className
FROM 
    tb_student s
INNER JOIN 
    tb_class c 
ON 
    s.class_id = c.id;
--########## End ##########

第2关:外连接查询

任务描述

本关任务:使用外连接查询数据表中所有班级和对应班级里学生的姓名。

--########## 使用左外连接查询所有学生姓名(学生全部显示,不管有没有班级)和对应的班级 ##########

--#请在此处添加实现代码
--########## Begin ##########
SELECT 
    s.name AS studentName,
    c.name AS className
FROM 
    tb_student s
LEFT JOIN 
    tb_class c 
ON 
    s.class_id = c.id;
--########## End ##########

--########## 使用右外连接查询所有学生姓名和对应的班级(班级全部显示,无论有没有学生) ##########

--#请在此处添加实现代码
--########## Begin ##########
SELECT 
    s.name AS studentName,
    c.name AS className
FROM 
    tb_student s
RIGHT JOIN 
    tb_class c 
ON 
    s.class_id = c.id;
--########## End ##########

第3关:IN、ANY、ALL嵌套子查询

任务描述

本关任务:根据要求使用关键字进行查询。

--#请在此处添加实现代码
--########## Begin ##########

--#1.使用 ALL 关键字进行查询
SELECT position, salary
FROM tb_salary
WHERE salary > (SELECT MAX(salary) FROM tb_salary WHERE position = 'Java');

--#2.使用 ANY 关键字进行查询
SELECT position, salary
FROM tb_salary
WHERE salary > (SELECT MIN(salary) FROM tb_salary WHERE position = 'Java');

--#3.使用 IN 关键字进行查询
SELECT position, salary
FROM tb_salary
WHERE position = 'Java';

--########## End ##########

第4关:分页子查询

任务描述

本关任务:能分页读取表中数据,针对大数据量进行简单优化。

--#请在此处添加实现代码
--########## Begin ##########

--#1.分页查询
SELECT prod_id
FROM products
ORDER BY prod_id ASC
LIMIT 5 OFFSET 5;


--#2.用子查询优化分页查询语句
SELECT prod_id
FROM products
WHERE prod_id >= (
    SELECT prod_id
    FROM products
    ORDER BY prod_id ASC
    LIMIT 1 OFFSET 10  -- OFFSET 10 表示获取第11行的prod_id(索引从0开始)
)
ORDER BY prod_id ASC
LIMIT 5; -- 取5行,即第11-15行

--########## End ##########

你可能感兴趣的:(数据库)