Empezar a aprender SQL es relativamente fácil hoy en día. Muchos recursos son fáciles de encontrar con una búsqueda en la web si quieres aprender SQL. La mayoría de los proveedores de RDBMS comparten documentación sobre su dialecto SQL, que a menudo incluye tutoriales. SQL está muy estandarizado, pero la mayoría de los proveedores tienen extensiones propietarias que debes conocer. El uso de estas extensiones hace que las migraciones sean complejas. Las áreas en las que se encuentran más diferencias son el lenguaje procedimental y las funciones avanzadas. Las extensiones propias de los proveedores no suelen estar bien documentadas porque les gusta conservar a los clientes el mayor tiempo posible.
¿Por qué aprender SQL?
SQL lleva utilizándose desde la década de 1980, y no hay ningún sucesor probable en un futuro previsible, por lo que no es un conjunto de habilidades que vaya a quedar obsoleto durante tu carrera. Las bases de datos relacionales son los SGBD más comunes del mercado. El RDBMS ha evolucionado durante décadas para adaptarse a nuevos tipos de datos, formatos de datos, plataformas y métodos de acceso, lo que hace que los conocimientos de SQL sean muy relevantes. SQL es una habilidad que se valora en muchas disciplinas, como el desarrollo de software, la administración de TI, la automatización del marketing y la informatique décisionnelle funciones. Esta versatilidad hace de SQL una habilidad transferible y muy solicitada. A medida que la informatique décisionnelle se democratiza y se utiliza más allá de las TI, SQL puede considerarse una competencia empresarial e informática.
¿Quién necesita aprender SQL?
Muchas funciones empresariales requieren conocimientos de SQL. Las funciones técnicas como el desarrollo de software y los administradores de bases de datos (DBA) deben tener conocimientos de SQL para ser eficaces. Funciones como las operaciones de ventas, que utilizan ampliamente la generación de informes en herramientas como Salesforce, descubren que conocer SQL facilita mucho la generación de informes porque, de forma encubierta, Salesforce utiliza muchas consultas SQL. Los analistas empresariales que trabajan para ejecutivos o dentro de líneas de negocio hacen un uso extensivo de outils bi como Qlik Sense, Tableau y Power BI para visualizar datos que muestren el rendimiento empresarial. Los administradores de TI que utilizan productos como System Center deben conocer SQL, ya que SQL Server es la base de datos de gestión Embarqué .
¿Qué se necesita para aprender SQL?
SQL se utiliza para gestionar datos almacenados en un conjunto de tablas relacionadas. El álgebra relacional es la base de la interacción a bajo nivel dentro de la base de datos. Como usuario de SQL, resulta muy útil visualizar la base de datos como un conjunto de tablas relacionadas que constan de filas y columnas. La visualización de las relaciones mediante un diagrama de Venn puede resultar útil. Entender el modelado de datos es un excelente prerrequisito para aprender SQL. Esto ayuda a entender por qué los datos están estructurados de la forma en que lo están. SQL no es tan difícil de aprender como un lenguaje de programación tradicional porque es declarativo. Simplemente le dices a la base de datos qué datos quieres, y ella se encarga de cómo obtenerlos.
Si quieres saber cómo funciona un RDBMS, muchos ofrecen la opción de ver planes de ejecución de consultas o perfiles de consultas. Estos planes de consulta muestran, por ejemplo, cuándo se realiza un escaneo completo de la tabla porque ésta carece de un índice adecuado o es demasiado pequeña para indexarla, o cómo se combinan y ordenan los conjuntos de resultados intermedios cuando se realiza un escaneo de rangos. La mayoría de la gente sólo se preocupa por estas cosas si sus consultas se ejecutan lentamente o si el departamento de TI se queja de un uso ineficiente de los recursos, lo que puede resultar caro si se utiliza un servicio externo en la nube que cobra por los ciclos processeur .
¿Cuánto se tarda en aprender SQL?
Los conocimientos básicos de SQL pueden aprenderse en días. Las uniones complejas y las consultas anidadas pueden tardar semanas en aprenderse. El ajuste de bases de datos puede llevar años. Muchos sistemas modernos de bases de datos empresariales ofrecen herramientas que facilitan enormemente el ajuste. Muchos servicios modernos de bases de datos en la nube ofrecen escalado elástico para automatizar la paralelización de las operaciones SQL con el fin de mantener tiempos de respuesta cortos, incluso si tiene que tocar terabytes de datos.
¿Dónde puedo aprenderlo?
Un punto de partida popular para aprender SQL es Code Academy.
Codecademy es muy intuitivo, te enseña la sintaxis SQL y la posibilidad de probarla por ti mismo. También es un recurso excelente para relacionar las trayectorias profesionales con las clases necesarias para cada una de ellas.
Existen opciones adicionales para especificar acciones referenciales, secuencias y particiones, que se describen en el sitio web de Documentación de Actian.
Si quieres una herramienta fácil de usar para aprender los diferentes sabores de SQL por proveedor, entonces W3 School es un gran recurso.
Qué SQL aprender
Los aspectos de SQL que necesitas aprender dependen de tu función laboral. Si su función implica el análisis de datos, entonces aprender todas las variaciones de la sentencia SELECT es el mejor punto de partida. A continuación, pasa a comprender las vistas y los índices. Si dispone de los permisos necesarios para crear objetos, puede resultarle muy útil experimentar con su propio esquema.
Si su función es el desarrollo de software, tendrá que aprender a diseñar bases de datos antes de sumergirse en SQL. Es posible que necesites conocimientos especializados en la escritura de funciones definidas por el usuario y procedimientos SQL para poder almacenar y ejecutar código de aplicación cerca de los datos con los que opera.
Como DBA, necesitarás empezar con una clase de Administración de Bases de Datos. Esta clase te enseña a crear una base de datos, añadir usuarios, cargar datos y recuperar una copia de seguridad.
La descripción de la sentencia SELECT que figura a continuación pretende mostrar la potencia y el alcance de esta sentencia de consulta.
Si, por ejemplo, desea saber quién es el cliente 10 en la tabla CLIENTES. Puede utilizar la siguiente sentencia:
SELECT NOMBRE-CLIENTE FROM CLIENTES WHERE ID-CLIENTE =10;
Si la tabla contiene una columna ESTADO, la siguiente sentencia SQL recuperará sólo los clientes de Colorado:
SELECT * FROM CLIENTES WHERE ESTADO = 'CO';
Varias tablas pueden relacionarse entre sí compartiendo columnas comunes. Estas columnas pueden indexarse opcionalmente para permitir un acceso más rápido.
Las tablas pueden unirse lógicamente en tiempo de ejecución, y la naturaleza de la unión puede expresarse en SQL.
A continuación se indican los tipos de uniones en los que izquierda y derecha son el orden de las tablas nombradas en la sentencia SELECT:
- INNER JOIN: Esta unión devuelve los registros que tienen valores coincidentes en ambas tablas.
- FULL JOIN: Esta unión devuelve todos los registros que coinciden en la tabla izquierda o derecha.
- LEFT JOIN: Este tipo de unión devuelve los registros de la tabla izquierda, junto con aquellos registros que satisfacen la condición de la tabla derecha.
- RIGHT JOIN: Este tipo de unión devuelve los registros de la tabla derecha, junto con aquellos registros que satisfacen la condición de la tabla izquierda.
Las tablas pueden relacionarse mediante relaciones de columnas de clave primaria y externa. Por ejemplo, una tabla de clientes puede tener como clave primaria Customer-ID. Una tabla Pedidos que contenga una columna Cliente-ID se conocerá como clave ajena en esa tabla.
Las claves primarias suelen estar indexadas y contener valores únicos.
Las aplicaciones utilizan SQL para recuperar e insertar datos de las bases de datos, incluidas las bases de datos distribuidas.
La sentencia SELECT puede contener funciones de agregación, como:
- COUNT() - devuelve el número total de filas que satisfacen los criterios de la sentencia
- MIN() - devuelve el valor más pequeño del conjunto de resultados
- MAX() - devuelve el mayor valor del conjunto de resultados
- AVG() - devuelve la media de los valores del conjunto de resultados
- GROUP BY - agrupará los resultados por el valor de una columna determinada
- ORDENAR POR - ordenará los resultados por la columna especificada
Los comentarios en SQL ayudan a comprender y mantener las aplicaciones. A continuación se muestran ejemplos de comentarios de una y varias líneas:
- Este es mi comentario
/* Esto es
línea múltiple
comentario */
Es útil visualizar el esquema de una base de datos mediante un diagrama de Venn, especialmente cuando se utilizan operadores de conjunto como UNION, INTERSECT y EXCEPT en sentencias SELECT.
- UNION - Este operador se utiliza para combinar el conjunto de resultados de dos o más sentencias SELECT.
Ejemplo:
SELECT Columnas FROM Tabla1 UNION SELECT Columns FROM Tabla2;
- INTERSECT - Esta cláusula se utiliza para combinar dos sentencias SELECT y devolver la intersección de los conjuntos de datos de ambas sentencias SELECT.
Ejemplo:
SELECT Columna1 , Columna2 .... FROM NombreTabla WHERE Condición INTERSECT SELECT Columna1, Columna2 .... FROM NombreTabla WHERE Condición
- EXCEPT - Este operador devuelve aquellas filas que son devueltas por la primera operación SELECT y no son devueltas por la segunda operación SELECT.
Ejemplo:
SELECT NombreColumna FROM NombreTabla EXCEPT SELECT NombreColumna FROM NombreTabla;
Las expresiones de caso ofrecen una capacidad de descodificación que permite transformar una expresión en otra. Las expresiones de mayúsculas y minúsculas pueden aparecer en cualquier lugar donde se puedan utilizar otras formas de expresión.
Existen dos formas de expresiones de caso:
- Simple
- Buscó en
La sintaxis de una expresión case simple es la siguiente:
CASE expr WHEN expr1 THEN expr2 WHEN expr3 THEN expr4... [ELSE exprn] END
La expresión case inicial se compara sucesivamente con las expresiones de cada cláusula WHEN. El resultado del caso es la expresión de la cláusula THEN correspondiente a la primera cláusula WHEN, cuya expresión es igual a la expresión del caso. Si ninguna de las expresiones WHEN coincide con la expresión del caso, el resultado es el valor de la expresión de la cláusula ELSE. Si no hay cláusula ELSE, el resultado es el valor nulo.
La sintaxis de la expresión del caso buscado es la siguiente:
CASE WHEN search_conditon1 THEN expr1 WHEN search_expression2 THEN expr2...[ELSE exprn] END
Las condiciones de búsqueda de cada cláusula WHEN se evalúan sucesivamente. El resultado del caso es la expresión de la cláusula THEN correspondiente a la primera cláusula WHEN cuya condición de búsqueda se evalúe como verdadera. Si ninguna de las condiciones de búsqueda de la cláusula WHEN se evalúa como verdadera, el resultado es el valor de la expresión de la cláusula ELSE. Si no hay cláusula ELSE, el resultado es el valor nulo.
Más allá de la sentencia SELECT
Una vez que domine la sentencia SELECT, las sentencias SQL siguientes le permitirán crear y modificar objetos contenidos en la base de datos:
A continuación se muestran algunos ejemplos de sentencias SQL:
- CREATE TABLE - se utiliza para crear un objeto de tabla
- INSERT - se utiliza para insertar nuevas filas en una tabla
- UPDATE - se utiliza para realizar cambios en los datos contenidos en una tabla de base de datos
- DELETE - se utiliza para eliminar filas de datos
- GRANT - se utiliza para dar a los usuarios permiso para ver o modificar objetos de la base de datos como tablas.
- REVOKE - se utiliza para eliminar permisos de usuarios o grupos de usuarios.
- ALTER - permite al usuario añadir o eliminar columnas de un objeto para actualizar los permisos.
- DROP TABLE - elimina una tabla
- CREATE INDEX - creará un INDEX para permitir un acceso eficiente a los datos utilizando una clave-valor.
- TRUNCATE TABLE - permite al usuario vaciar rápidamente el contenido de una tabla
La más compleja de las sentencias anteriores es CREATE TABLE. A continuación se explica con más detalle:
Creación de una tabla
La sintaxis de la sentencia CREATE TABLE puede ser tan sencilla como la del ejemplo siguiente:
CREATE TABLE DEPT (Dept-ID int, Dept-Name varchar(255), Dept-Cost-Center int );
Puede crear tablas utilizando otra tabla como plantilla. Por ejemplo, la tabla siguiente sólo contiene filas relacionadas con el Departamento-ID 10:
CREATE TABLE DEPARTMENT-10 AS SELECT * FROM DEPARTMENTS WHERE Department-ID = 10;
La siguiente sintaxis CREATE TABLE es para una base de datos Actian, que tiene el siguiente formato:
CREATE TABLE [esquema.]nombre_tabla (especificación_columna {, especificación_columna }) [restricción_tabla {, restricción_tabla}] [con_cláusula]
- nombre_tabla - Define el nombre de la nueva tabla.
- especificación_columna - Define las características de la columna.
- table_constraint - Especifica la restricción a nivel de tabla tal y como se describe en Restricciones a nivel de tabla y de columna.
- with_clause - Especifica las opciones de la cláusula WITH separadas por una coma. Para obtener más información, consulte Cláusula WITH.
Especificación de columna
La especificación de columna en una sentencia CREATE TABLE define las características de una columna de la tabla.
La especificación_columna tiene el siguiente formato: nombre_columna tipo_dato
[[WITH] DEFAULT default_spec | WITH DEFAULT | NOT DEFAULT] [WITH NULL | NOT NULL] [MASKED [AS {BASIC | NULL | 0 | ' ' }] [GENERATED ALWAYS AS [seq_name] IDENTITY [(seq_options)] | GENERATED BY DEFAULT AS [seq_name] IDENTITY [(seq_options)]] [CONSTRAINT restricción_nombre] restricción_columna [[CONSTRAINT constraint_name] column_constraint {[CONSTRAINT constraint_name] column_constraint}]
- nombre_columna - Asigna un nombre válido (ver Reglas de denominación de objetos) a la columna.
- datatype - Asigna un tipo de datos válido a la columna.
- Cláusula DEFAULT - Especifica si la columna es obligatoria.
- CON NULL | NO NULL - Especifica si la columna acepta nulos:
- WITH NULL - (Por defecto) Indica que la columna acepta valores nulos. Si el usuario no proporciona ningún valor, se inserta null.
- NOT NULL - Indica que la columna no acepta nulos.
- [MASKED [AS {BASIC | NULL | 0 | ‘ ‘ }] – Displays the column with the specified mask characteristic. The mask characteristic defines how to display the masked data:
- BASIC - Rellena el ancho de la columna con asteriscos
- NULL - NULL
- 0 - 0
- ' ' - en blanco
GENERATED ALWAYS AS [seq_name] IDENTITY [(seq_options)] | GENERATED BY DEFAULT AS [seq_name] IDENTITY [(seq_options)]
Indica que la columna es una columna IDENTITY. La columna debe definirse como integer o bigint.
[CONSTRAINT nombre_restricción] restricción_columna
Especifica las comprobaciones que deben realizarse en el contenido de la columna para garantizar que los valores de los datos son adecuados.
Cláusula DEFAULT - La cláusula WITH|NOT DEFAULT en la especificación de columna especifica si una columna requiere una entrada.
Esta cláusula tiene el siguiente formato:
[WITH] DEFAULT default_spec | WITH DEFAULT | NOT DEFAULT
[WITH] DEFAULT default_spec - Indica que si no se proporciona ningún valor (porque no se requiere ninguno), Actian inserta el valor por defecto. El valor por defecto debe ser compatible con el tipo de datos de la columna.
Para las columnas de caracteres, los valores por defecto válidos incluyen las constantes USER, CURRENT_USER y SYSTEM_USER.
Para las columnas booleanas, los valores por defecto válidos incluyen FALSE o TRUE.
WITH DEFAULT - Indica que si no se proporciona ningún valor, Actian inserta 0 para las columnas numéricas y monetarias, una cadena vacía para las columnas de caracteres, la fecha actual para las columnas de fecha ANSI, y la marca de tiempo actual para las columnas de marca de tiempo.
NOT DEFAULT - Indica que la columna es obligatoria (requiere una entrada).
A continuación se muestra un ejemplo de utilización de la cláusula DEFAULT:
CREAR TABLA DEPT(dnombre CHAR(10), ubicación CHAR(10) DEFAULT 'CO', creación DATE DEFAULT '01/01/22', presupuesto MONEY DEFAULT 10000);
Restricciones
Para garantizar que el contenido de las columnas cumple los requisitos de la base de datos, especifique restricciones.
Las restricciones pueden especificarse para columnas individuales o para toda la tabla. Para obtener más información, consulte Restricciones a nivel de tabla y a nivel de columna.
Los tipos de restricciones son:
- Restricción única - Garantiza que un valor sólo aparezca una vez en una columna. Las restricciones únicas se especifican con la opción UNIQUE.
- Restricción referencial - Garantiza que un valor asignado a una columna aparezca en una columna correspondiente de otra tabla. Las restricciones referenciales se especifican mediante la opción REFERENCIAS.
- Restricción de clave primaria - Declara una o más columnas para su uso en restricciones referenciales en otras tablas. Las claves primarias deben ser únicas.
Restricciones a nivel de tabla y de columna
Las restricciones pueden especificarse para grupos de columnas como parte de la definición de la tabla (restricciones a nivel de tabla) o para columnas individuales como parte de la especificación de la columna (restricciones a nivel de columna).
La restricción tiene la siguiente sintaxis:
[CONSTRAINT nombre_restricción] restricción
- constraint_name - Define un nombre para la restricción. Si se omite el nombre, Actian Data Platform asigna uno. El nombre de la restricción se utiliza cuando se elimina la restricción mediante la sentencia ALTER TABLE.
- restricción - Es una restricción a nivel de tabla (restricción_tabla) o una restricción a nivel de columna (restricción_columna).
table_constraint es una o más de las siguientes:
UNIQUE (nombre_columna {, nombre_columna}) PRIMARY KEY (nombre_columna {, nombre_columna}) REFERENCES [esquema.]nombre_tabla [(nombre_columna {, nombre_columna})] [enforce_option] [acciones_referenciales]
restricción_columna es una o más de las siguientes:
- ÚNICO
- PRIMARY KEY
- FOREIGN KEY (nombre_columna {, nombre_columna})
- REFERENCIAS [esquema.]nombre_tabla[(nombre_columna)] [enforce_option] [acciones_referenciales]
donde:
- aplicar_opción - Especifica si se aplican las restricciones. Los valores válidos son:
- NO APLICADA - No aplica la restricción cuando se define o cuando se actualiza la tabla. No se crean índices para las restricciones NO APLICADAS.
- ENFORCED - (Predeterminado) Aplica la restricción.
Existen opciones adicionales para especificar acciones referenciales, secuencias y particiones, que se describen en el sitio web de Documentación de Actian.