PEP 622 provides an in-depth explanation for how the new match-case statements work, what the rationale is behind them, and provides examples where they're better than if statements.
In my opinion the biggest improvement over if statements is that they allow for structural pattern matching, as the PEP is named. Where if statements must be provided a truthy or falsey value, match-case statements can match against the shape/structure of an object in a concise way. Consider the following example from the PEP:
def make_point_3d(pt): match pt: case (x, y): return Point3d(x, y, 0) case (x, y, z): return Point3d(x, y, z) case Point2d(x, y): return Point3d(x, y, 0) case Point3d(_, _, _): return pt case _: raise TypeError("not a point we support")