Oracle子查询和多表查询
多表查询需要用到表的连接
连接可以分为:(自行百度)
交叉连接(数字逻辑的笛卡尔积,不做解释)
等值连接
例如:select * from t_a, t_b where t_a.xx = t_b.xx
不等值连接
例如:select * from t_a, t_b where t_a.sal >= t_b.sal
内连接
例如:select * from t_a inner join t_b on t_a.xx = t_b.xx
内连接写法和等值连接不同,但是效果是一样的,所以随意使用一种即可。
左外连接(左连接)
内连接是把非空的行给连接在一起,形成一个新表。而左连接是以第一张表为基础,把符合条件的字段补充到第一张表上。
语句:
标准写法:select * from t_a inner left join t_b on t_a.xx = t_b.xx;
Oracle自创:select * from t_a, t_b where t_a.xx = t_b.xx(+);
右外连接(右连接)
与右连接一样,方向反过来。
select * from t_a, t_b where t_a.xx(+) = t_b.xx;
自连接
自身与自身相连接
例如:select * from t_a, t_a t_a2 where t_a.xx = t_a2.yy;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
子查询(当查询条件为不确定值时必须使用子查询)
可以分为:
常规子查询:
先执行子查询,然后执行主查询,子查询参数与主查询无关。
例如:select * from users where salary > (select avg(salary) from users)
相关子查询:
主查询的某些条件当作参数传入子查询,然后执行查询。
例如:select * from users u where salary > (select avg(salary) from users where u.部门 = users.部门 order by 部门)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步