En el uso de Transact SQL es la base para el manejo de bases de datos, ingresar, modificar y buscar data en las diferentes tablas son las operaciones básicas de toda estructura de datos.
Las consultas en transact se realizan a través de la instrucción select, la cual nos permite combinada con otras permite realizar complejas consultas de información; donde la instrucción base son algo así; select * from tabla
, donde el *
representa traerse todas las columnas de una tabla y from
tabla nos indica la tabla sobre la cual se realizará la consulta.
La instrucción se puede complementar utilizando la instrucción where
, esta instrucción precederá la utilización de condiciones, usadas para poder filtrar la información que traemos. Select * from tabla where condición
es la forma de uso base de dicha instrucción.
Por otro lado no siempre es necesario utilizar todas las columnas de una tabla, cuando deseamos traer información de una tabla con gran tamaño, formada por muchas columnas y gran cantidad de registros, es conveniente identificar las columnas a utilizar, select columna1, columna3, columna7 from tabla where condición
.
Realizar consultas con el mayor detalle de información a consultar, ayuda a optimizar los tiempos de respuesta de nuestras consultas. Traer todas las columnas de una consulta puede parecer conveniente, pensar que tener todas las columnas disponibles para hacer uso de ellas lejos de ser práctico, puede causar problemas en nuestro sistema. Traer tablas de gran tamaño sin filtrar ocasiona que tengamos que subir a memoria una cantidad de información innecesaria que debes ser manejada cada vez que realicemos la consulta.
La información que necesitamos puede encontrarse en diferentes tablas, traer diferentes columnas de varias tablas y generar una consulta completa, es algo muy común. Para esto la instrucción Join
, esta nos permite realizar diferentes tipos de uniones, según la existencia o no de coincidencias en las tablas.
Join
Se puede usar join
o inner join
esta instrucción permite unir dos tablas que comparten una sección de información. De esta forma se puede extraer información según las coincidencias entre dos tablas como se muestra en la siguiente gráfica:
Sintaxis, select columnas from tabla1 inner join tabla2 on tabla1.columna común=tabla2.columna común
, esta es la sintaxis básica. Al usarla se obtendrán todos los registros de ambas tablas donde coincidan las columnas de las tablas, dejando todos los demás por fuera.
Outer Join
Las uniones externas pueden trabajarse mediante left join_ y _right join
, mientras que el inner join
trae solo las coincidencias entre las dos tablas, estas instrucciones pueden traer incluso otra parte de la información no incluida en la unión.
En el vídeo podemos ver de forma práctica el uso de estos comando, donde usamos la base instalada de laboratorio en el post anterior.
Las estructuras utilizadas para los ejercicios de pruebas son las siguientes:
Script de creación de la tablas donde se almacenan los recibos formada por tblrecibobase y tblrecibodetalle, en conjunto guardan un recibo de cobro formado por un encabezado único y múltiples líneas. La información general se almacena en la base y las líneas en los detalles, esto con el objetivo de evitar repetir la información estática en cada línea. unidos por un campo de nombre refbase. Se usarán en la primera parte del laboratorio como muestra de unión de la data en dos tablas donde siempre hay una relación uno a muchos. Usan el campo refbase como columna de relación.
DROP TABLE IF EXISTS tblrecibobase
;
CREATE TABLE tblrecibobase
(
identificador
int(10) unsigned NOT NULL auto_increment,
cedula
varchar(13) NOT NULL default '',
apto
varchar(7) NOT NULL default '',
alicuotaactual
decimal(12,4) NOT NULL default '0.0000',
montomes
decimal(12,2) NOT NULL default '0.00',
mes
int(10) unsigned NOT NULL default '0',
etapa
varchar(15) NOT NULL default '',
torre
varchar(5) NOT NULL default '',
ano
int(10) unsigned NOT NULL default '0',
refbase
int(10) unsigned NOT NULL default '0',
cancelado
tinyint(1) NOT NULL default '0',
montosindeuda
decimal(12,2) NOT NULL default '0.00',
nota
varchar(40) NOT NULL default '',
formapago
varchar(20) NOT NULL default '',
nodocumento
varchar(25) NOT NULL default '',
fecha
date NOT NULL default '0000-00-00',
PRIMARY KEY (identificador
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS
tblrecibodetalle
;
CREATE TABLE tblrecibodetalle
(
identificador
int(10) unsigned NOT NULL auto_increment,
cedula
varchar(13) NOT NULL default '',
monto
decimal(13,2) NOT NULL default '0.00',
comun
char(8) NOT NULL default '',
tipoinmueble
varchar(13) NOT NULL default '',
inmueble
varchar(17) NOT NULL default '',
tipogasto
char(4) NOT NULL default '',
descripcion
varchar(60) NOT NULL default '',
refbase
int(10) unsigned NOT NULL default '0',
PRIMARY KEY (identificador
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Los scripts para crear los comprobantes contables comparten la misma filosofía de funcionamiento de los recibos, un encabezado y múltiples líneas, difieren al momento de crear la unión porque el campo de unión no coincide en nombre para tblbasecomprobante será identificador y para tbldetallecomprobante refbase. Esta particularidad permite estudiar la influencia de selección de nombres de campos claves y campos de referencia en el diseño de las tablas y su uso posterior para la sintaxis de las consulta mediante transact.
DROP TABLE IF EXISTS
tblbasecomprobante
;
CREATE TABLE tblbasecomprobante
(
identificador
bigint(20) unsigned NOT NULL auto_increment,
fecha
date NOT NULL default '0000-00-00',
comentario
varchar(120) NOT NULL default '',
tipocomprobante
varchar(20) NOT NULL default '',
fecharegistro
date NOT NULL default '0000-00-00',
procesado
tinyint(1) NOT NULL default '0',
fechaprocesado
date NOT NULL default '0000-00-00',
impreso
tinyint(1) NOT NULL default '0',
anulado
tinyint(1) NOT NULL default '0',
PRIMARY KEY (identificador
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS
tbldetallecomprobante
;
CREATE TABLE tbldetallecomprobante
(
identificador
bigint(20) unsigned NOT NULL auto_increment,
linea
int(10) unsigned NOT NULL default '0',
cuenta
varchar(10) NOT NULL default '',
descripcion
varchar(70) NOT NULL default '',
comentario
varchar(60) NOT NULL default '',
debe
decimal(12,2) NOT NULL default '0.00',
haber
decimal(12,2) NOT NULL default '0.00',
refbase
bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (identificador
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Script de creación de la tabla de asientos contables, esta tabla es afectada por información proveniente de varias, no mantiene relación de uno a muchos con una sola, esto produce que exista al momento de la unión múltiples posibilidades de resultados, es el vídeo se realizarán pruebas con la tabla de comprobantes para estudiar la diversas forma de unión.
DROP TABLE IF EXISTS
tblasientocontable
;
CREATE TABLE tblasientocontable
(
identificador
int(10) unsigned NOT NULL auto_increment,
cuentacontable
varchar(10) NOT NULL default '',
detalle
varchar(60) NOT NULL default '',
debe
decimal(12,2) NOT NULL default '0.00',
haber
decimal(12,2) NOT NULL default '0.00',
fechaasiento
date NOT NULL default '0000-00-00',
fechaproceso
date NOT NULL default '0000-00-00',
nocomprobante
int(10) unsigned NOT NULL default '0',
modulo
int(10) unsigned NOT NULL default '0',
user
varchar(10) NOT NULL default '',
refbase
bigint(20) unsigned NOT NULL default '0',
linea
bigint(20) unsigned NOT NULL default '0',
nogasto
bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (identificador
),
KEY FK_tblasientocontable_1
(cuentacontable
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Estos scripts pueden ejecutarse para crear las tablas de la práctica si alguien desea realizar ejercicios de pruebas. La data deberá ser generada por quien los desee utilizar. No coloco acceso a la data utilizada en los ejercicios, debido a que esta contiene información privada. Para la práctica se eligieron campos donde no se revelara información de este tipo en los ejercicios.
Por otro lado existen tablas accesorias donde se guarda información que se utiliza para complementar la carga de estas. Por ejemplo las cuentas contables se encuentran en una tabla donde se almacenan los números y su funcionamiento contable. El sistema trae la información de allí para la carga de la interface, puedes sin embargo cargar algunos códigos de prueba para esto de forma manual al momento de generar tu data.
Referencias
Toda la sintaxis de Transact SQL del manejador de bases de Datos MySql , puede ser consultada aquí. Documentación original del proyecto.
Imágenes
Gráfica realizada en Inkscape
▶️ DTube
▶️ IPFS
Recibe nuestro voto por parte del equipo de curación data-usb
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
This post has been voted on by the steemstem curation team and voting trail.
There is more to SteemSTEM than just writing posts, check here for some more tips on being a community member. You can also join our discord here to get to know the rest of the community!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Gracias por el voto
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Votado por el trail Team-México @team-mexico
Canal Discord ¡Te esperamos!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hola @UbaldoNet. Me ha gustado el contenido de tu post. Hay detalles de forma que te sugeriría que mejores para que tu artículo se vea estupendo. Éxito.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Gracias, me alegra te gustara. Es una serie de material del lenguaje, este es el segundo; en el primero video se monto la plataforma de pruebas en LAMP. Aun estoy viendo como terminar de ajustar el formato completo, para que el conjunto de post sean más útiles. El primero lo monte en Dlive pero no ayuda para montar el texto, por eso el segundo probé en Dtube. Creo que el resto serán allí.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hi @ubaldonet!
Your post was upvoted by utopian.io in cooperation with steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.
Contribute to Open Source with utopian.io
Learn how to contribute on our website and join the new open source economy.
Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit