Tengo una tabla llamada ‘mundo’, y solo tiene una columna llamada ‘nombre’. ¿Cómo puedo escribir una consulta SQL para generar el nombre que incluyó ‘united’?

La ingenua respuesta es:
select name from world where name like '%united%'

Sin embargo, esto tiene varios problemas:
a) distingue entre mayúsculas y minúsculas, por lo que no obtendrá las respuestas que espera
b) está realizando un escaneo completo de la tabla (leyendo cada fila de la tabla), lo que será un problema importante en una aplicación no trivial.

Una solución un poco mejor es:
select name from world where lower(name) like '%united%'
o equivalente
select name from world where upper(name) like '%UNITED%'

Esto resuelve el problema de mayúsculas y minúsculas, pero todavía está haciendo un escaneo de tabla. Sin embargo, esto introduce un nuevo problema, es decir, usar una función en el lado izquierdo de una expresión de comparación (lval), lo que significa que no podríamos usar un índice incluso si tuviéramos uno.

Si su base de datos admite expresiones regulares (por ejemplo, Postgres), puede hacer:
select name from world where name ~* 'united'

En Postgres, el operador ~ * le dice que haga una coincidencia de expresión regular sin distinción entre mayúsculas y minúsculas. Las expresiones regulares no le dan una mejora significativa en la velocidad sobre los comodines ANSI, pero sí le permiten construir patrones mucho más complejos. En este caso, obtenemos un beneficio porque no estamos aplicando una función al lval en la comparación, por lo que podríamos aprovechar un índice si tuviéramos uno.

MySQL también tiene un operador REGEXP, consulte la documentación. Debido a que las expresiones regulares no son parte del estándar ANSI SQL, se implementan de manera diferente en cada plataforma de base de datos.

Si la longitud de las cadenas se busca más de un par de cientos de caracteres, probablemente desee utilizar un motor de búsqueda de texto completo. Algunas bases de datos tienen esto como una característica incorporada: Búsqueda de texto completo de Postgres, Funciones de búsqueda de texto de MysSQL. Nuevamente, como las expresiones regulares, esto no es parte del estándar SQL, por lo que la implementación es diferente en cada base de datos.

En una aplicación del mundo real en la que debe realizar búsquedas de texto completo en millones de filas de texto, desearía mover la función de búsqueda fuera de la base de datos a un motor de búsqueda dedicado como Apache Solr.

Seleccione your_col de su_tabla donde your_col como ‘% united%’

Pero esta es una idea terrible. En su lugar, use un motor de búsqueda para indexar sus datos.

Si el nombre es algo así como Newcastle United, puede escribir la siguiente consulta: “seleccione * del mundo donde el nombre como”% United “o si united está en el medio, puede usar”% United% “o si está comenzando, use” United% ”

Para evitar la distinción entre mayúsculas y minúsculas, prefiero usar la función SUPERIOR (tenga cuidado de que su dialecto SQL incluya esta función, o consulte la equivalente):
seleccione * del mundo donde SUPERIOR (nombre) como ‘% UNITED%’