Blog Navicat

La búsqueda de una sintaxis SQL universal Sep 12, 2024 by Robert Gravelle

A mediados de los noventa, Sun Microsystems presentó un lenguaje que se podía "escribir una vez y ejecutar en todas partes". Ese lenguaje era, por supuesto, Java. Y, aunque llegó a ser uno de los lenguajes de programación más populares hasta el día de hoy, su eslogan resultó ser un poco optimista. El curso del lenguaje Java tiene algunas similitudes importantes con el de SQL. También se puede trasladar de una base de datos a otra, o incluso a través de sistemas operativos, con poca o ninguna modificación. Al menos, ese es el sueño. En el mundo real, el código de nivel de producción tiende a requerir algunos ajustes para funcionar en un nuevo entorno. Este blog describirá algunas de las razones por las que la sintaxis SQL puede diferir entre los distintos proveedores de bases de datos.

La especificación ANSI SQL

ANSI, que significa American National Standards Institute, define el conjunto básico de reglas y comandos de sintaxis que se deben utilizar para interactuar con bases de datos relacionales. Sin embargo, al igual que las implementaciones de HTML, CSS y ECMAScript en los navegadores, la mayoría de las implementaciones de SQL en bases de datos son imperfectas o incompletas. ANSI SQL permite cierta flexibilidad en el nivel de conformidad, por lo que no existe un requisito estricto por parte de los proveedores para implementar la especificación completa. Pero incluso en el nivel más básico, el más bajo, todos los proveedores difieren al menos un poco.

Más allá de eso, existen extensiones no estándar, que todos los proveedores admiten de una forma u otra. Incluso algo tan simple como los índices no son estándar. La especificación ANSI SQL no dice nada sobre los índices, por lo que la implementación de indexación de cada proveedor es un complemento del estándar. Eso abre la puerta para que los proveedores creen la sintaxis que consideren adecuada o más ventajosa para su marca. El resultado: una variedad de dialectos SQL, que son en gran medida los mismos, pero con algunas diferencias.

Cómo escribir SQL versátil

Si desea un código SQL que funcione en todos los tipos de bases de datos, debe ceñirse a las instrucciones SQL estándar como SELECT, WHERE, GROUP BY, ORDER BY, etc. Las funciones de agregación como SUM(), AVG(), MIN() y MAX() también serán entendidas por todos los tipos de bases de datos populares, incluidos SQL Server, MySQL, PostgreSQL, SQLite y Oracle. A continuación, se muestra una consulta que debería funcionar con cualquier base de datos:

Select    
    c.customer_id,
    c.customer_name,
    SUM(p.amount) AS total_sales
FROM customers AS c
    LEFT JOIN purchases AS p
    ON c.customers_id = p.customer_id
WHERE
    c.customer_location = 'Canada'
GROUP BY
    c.customer_name ASC;

Aprender SQL

Si recién está comenzando en la administración y/o desarrollo de bases de datos, debe concentrarse en SQL que se aplique a la mayor cantidad posible de tipos de bases de datos. También debe trabajar con una base de datos que sea muy compatible con ANSI SQL y popular, como MySQL. Ha sido la base de datos más popular durante las últimas décadas. También es muy compatible, lo que la convierte en una excelente herramienta de aprendizaje. Hay muchos artículos al respecto y la mayoría de los ejemplos de SQL se desarrollaron y ejecutaron en MySQL. Microsoft SQL Server se ubica en un cercano segundo lugar. Sin embargo, utiliza el dialecto de SQL de Microsoft, llamado T-SQL. Tener el SQL más diferente a otras plataformas hace que SQL Server sea una base de datos de inicio poco ideal. Probablemente sea mejor que elija PostgreSQL o SQLite, que también son bastante populares y compatibles con ANSI. SQLite es particularmente atractivo para los principiantes debido a su pequeño tamaño y portabilidad.

Estas son solo algunas de las diferencias que probablemente encontrará entre las bases de datos:

Distinción entre mayúsculas y minúsculas

Considere la cláusula WHERE name = 'Rob' Or WHERE name = 'rob':

MySQL PostgreSQL SQLite SQL Server
Equivalente No equivalente No equivalente No equivalente

Uso de comillas

Algunas bases de datos solo admiten comillas simples, mientras que otras permiten tanto comillas simples como dobles:

MySQL PostgreSQL SQLite SQL Server
Ambas Solo simples Ambas Solo simples

Alias de columnas y tablas

MySQL, PostgreSQL y SQLite utilizan la palabra clave "AS" para indicar alias, es decir, SELECT SUM(score) AS avg_score, while SQL Server employs the equals sign, i.e., SELECT SUM(score) = avg_score.

Funciones de fecha y hora

Cada base de datos implementa sus propias funciones de fecha y hora:

MySQL PostgreSQL SQLite SQL Server
CURDATE() CURTIME() EXTRACT() CURRENT_DATE() CURRENT_TIME() EXTRACT() DATE('now') strftime() GETDATE() DATEPART()

Navicat Premium: la herramienta universal

Navicat Premium es la herramienta ideal para trabajar con una variedad de tipos de bases de datos. No solo puede conectarse a varias bases de datos simultáneamente, sino que su función de fragmentos de código hace que escribir consultas contra su tipo de base de datos preferido sea más fácil que nunca. La función de fragmentar código le permite insertar código reutilizable en sus sentencias SQL cuando trabaja en el Editor SQL. Además de obtener acceso a una colección de fragmentos integrados para funciones y sentencias de flujo de control comunes, también puede definir sus propios fragmentos.

code_snippets (119K)

Puede descargar Navicat 17 para una prueba GRATUITA de 14 días con todas sus funciones FREE trial. Está disponible para los sistemas operativos Windows, macOS y Linux.

Compartir
Archivos del Blog