Adding @k1sul1's suggestion from the comments as it's more concise than what I had before:
I just wanted them all gone, so I ran this in the MySQL shell.
UPDATE wp_posts SET post_content = REGEXP_REPLACE(post_content, "\\[\/?vc(.*?)\]", "");
Note the double backslash. If you forget it, you'll replace all v's and c's with nothing, and the shortcodes will still be there. This works for other shortcode as well, just replace vc.
Take a backup beforehand.
Thanks for sharing this tutorial, I developed a free plugin named ( Shortcode Cleaner Lite ), to solve this exact problem.
https://wordpress.org/plugins/shortcode-cleaner-lite
Video demo: https://www.youtube.com/watch?v=dXVZ5bSUduc
It will Clean your WordPress content from any unused broken shortcodes, which it clean up unused, broken shortcodes from WordPress content automatically, so you can switch between themes and plugins without worrying and keep your content cleanly and fresh all the time, it is dealing with any theme (Divi, Avada..etc) shortcodes that are left when changing themes or plugins or page builders (Visual Composer, Elementor, Beaver…etc).
I hope it will be useful.