表现每种岗位的雇员总数,平均工资
说明:以 job 聚合
下令:select job,count(*), format(avg(sal),2) from emp group by job;
4. 多表查询
4.1 多表查询的界说
多表查询是指在数据库中从两个或多个表中检索数据的SQL查询。这种查询允许用户基于某些条件将差别表中的数据毗连起来,从而获得更复杂和全面的信息。多表查询是关系型数据库管理系统的强大功能之一,它可以或许资助用户分析和处理分布在多个表中的数据。
在进行多表查询时,通常会使用到JOIN操纵,JOIN可以分为几种范例,包罗: INNER JOIN(内毗连):返回两个表中匹配的所有行。只有当两个表中存在匹配的数据时,才会产生结果记载。 LEFT JOIN(左毗连):返回左表中的所有记载,以及右表中与之匹配的记载;假如右表没有匹配,则结果中右表的字段为NULL。 RIGHT JOIN(右毗连):返回右表中的所有记载,以及左表中与之匹配的记载;假如左表没有匹配,则结果中左表的字段为NULL。 FULL OUTER JOIN(全外毗连):返回左表和右表中的所有记载,当某一边没有匹配时,另一边的字段将填充为NULL。 CROSS JOIN(交织毗连):返回左表和右表的笛卡尔积,即左表的每一行与右表的每一行组合。
4.2 笛卡尔积
笛卡尔积(Cartesian Product)是指两个表中所有行的组合。具体来说,假如表 A 有 m 行,表 B 有 n 行,那么它们的笛卡尔积将包罗 m×n行,每行是表 A 中的一行与表 B 中的一行的组合。 界说
在数据库中,笛卡尔积是通过 CROSS JOIN 操纵实现的。假如没有指定任何毗连条件,结果集将包罗所有可能的行组合()。CROSS JOIN 可以显式地使用 CROSS JOIN 关键字,也可以通过逗号, 分隔表名并在 WHERE 子句中不指定任何毗连条件来实现。
示例:
创建表t1:
create table t1(name char(10));
insert into t1 values('李明'), ('李华'), ('李刚');
复制代码
创建表t2:
create table t2(name char(10));
insert into t2 values('高渐离'), ('王昭君'), ('嫦娥');
复制代码
查询两个表:
下令:select * from t1 cross join t1;
或 下令:select * from t1, t2;
图解:
4.3 内毗连 inner join
界说:返回两个表中匹配的所有行。只有当两个表中存在匹配的数据时,才会产生结果记载。
语法:
SELECT *
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
复制代码
ON 子句的重要作用:
指定毗连条件:
ON 子句用于指定两个表之间的毗连条件,这些条件决定了哪些行应该被组合在一起。
过滤结果集:
通过 ON 子句,可以有用地过滤掉不符合条件的行,从而淘汰结果集的大小,进步查询性能。
进步查询的可读性和维护性:
使用 ON 子句可以使查询更加清晰和易于明白,特殊是对于复杂的多表查询。
将毗连条件放在 ON 子句中,而不是放在 WHERE 子句中,可以使查询结构更加明确,便于维护和调试。