Lacking any delimiter between the statements I think I would just split the string on UPDATE or DELETE and just ask for those lacking a WHERE
str.ToLower().Split(new[]{"update","delete","select"}).Where(s => !s.Contains("where"));
and then fine tune for edge cases from there. Presumably you're using in this to detect problematic statements that affect an entire table so it doesn't matter that we have lowercased the whole thing, but Regex.Split will offer you an ignore case option.
Regex could also give you the entire statement with something like
(?<sql>(select|update|delete).*?)(?=(select|update|delete|$))
(and IgnoreCase|SingleLine|ExplicitCapture flags, then inspect all the captured matches in the MatchCollection for those containing a "where") - let me know if you need this expanding on.
Note that these cover the cases presented but if you have other things like "delete" being present inside a string, you're probably heading well into parsing territory and you might be better off looking for something that can properly parse the SQL and rummage through the result