Cómo escribir consultas SQL de Microsoft Access desde cero

Cómo escribir consultas SQL de Microsoft Access desde cero

Microsoft Access es posiblemente la herramienta más poderosa de todo el paquete de Microsoft Office, pero desconcierta (y a veces asusta) a los usuarios avanzados de Office. Con una curva de aprendizaje más pronunciada que Word o Excel, ¿cómo se supone que alguien debe entender el uso de esta herramienta? Esta semana, Bruce Epper analizará algunos de los problemas provocados por esta pregunta de uno de nuestros lectores.





Un lector pregunta:

Tengo problemas para escribir una consulta en Microsoft Access. Tengo una base de datos con dos tablas de productos que contienen una columna común con un código de producto numérico y un nombre de producto asociado. Quiero saber qué productos de la Tabla A se pueden encontrar. en la Tabla B. Quiero agregar una columna llamada Resultados que contiene el nombre del producto de la Tabla A si existe, y el nombre del producto de la Tabla B cuando no existe en la Tabla A. ¿Tiene algún consejo?





Respuesta de Bruce:

Microsoft Access es un sistema de administración de bases de datos (DBMS) diseñado para su uso en máquinas Windows y Mac. Utiliza el motor de base de datos Jet de Microsoft para el procesamiento y almacenamiento de datos. También proporciona una interfaz gráfica para los usuarios que prácticamente elimina la necesidad de comprender el lenguaje de consulta estructurado (SQL).





SQL es el lenguaje de comandos que se utiliza para agregar, eliminar, actualizar y devolver información almacenada en la base de datos, así como también para modificar componentes centrales de la base de datos, como agregar, eliminar o modificar tablas o índices.

Punto de partida

Si aún no está familiarizado con Access u otro RDBMS, le sugiero que comience con estos recursos antes de continuar:



  • Entonces, ¿qué es una base de datos? donde Ryan Dube usa Excel para mostrar los conceptos básicos de las bases de datos relacionales.
  • Una guía rápida para comenzar con Microsoft Access 2007 que es una descripción general de alto nivel de Access y los componentes que componen una base de datos de Access.
  • Un tutorial rápido sobre tablas en Microsoft Access 2007 analiza la creación de su primera base de datos y tablas para almacenar sus datos estructurados.
  • Un tutorial rápido sobre consultas en Microsoft Access 2007 analiza los medios para devolver porciones específicas de los datos almacenados en las tablas de la base de datos.

Tener una comprensión básica de los conceptos proporcionados en estos artículos hará que lo siguiente sea un poco más fácil de digerir.

Relaciones y normalización de bases de datos

Imagine que dirige una empresa que vende 50 tipos diferentes de widgets en todo el mundo. Tiene una base de clientes de 1250 y en un mes promedio vende 10,000 widgets a estos clientes. Actualmente está utilizando una sola hoja de cálculo para realizar un seguimiento de todas estas ventas, de hecho, una sola tabla de base de datos. Y cada año agrega miles de filas a su hoja de cálculo.





Las imágenes anteriores son parte de la hoja de cálculo de seguimiento de pedidos que está utilizando. Ahora digamos que estos dos clientes le compran widgets varias veces al año para que tenga muchas más filas para ambos.





Si Joan Smith se casa con Ted Baines y toma su apellido, ahora es necesario cambiar cada fila que contiene su nombre. El problema se agrava si tiene dos clientes diferentes con el nombre 'Joan Smith'. Se ha vuelto mucho más difícil mantener la coherencia de sus datos de ventas debido a un evento bastante común.

Al utilizar una base de datos y normalizar los datos, podemos separar los elementos en varias tablas, como inventario, clientes y pedidos.

Con solo mirar la parte del cliente de nuestro ejemplo, eliminaríamos las columnas para Nombre del cliente y Dirección del cliente y las pondríamos en una nueva tabla. En la imagen de arriba, también he desglosado mejor las cosas para un acceso más granular a los datos. La nueva tabla también contiene una columna para una clave principal (ClientID), un número que se utilizará para acceder a cada fila de esta tabla.

En la tabla original donde eliminamos estos datos, agregaríamos una columna para una clave externa (ClientID) que es lo que enlaza con la fila adecuada que contiene la información de este cliente en particular.

Ahora, cuando Joan Smith cambia su nombre a Joan Baines, el cambio solo debe realizarse una vez en la tabla Cliente. Todas las demás referencias de las tablas unidas extraerán el nombre correcto del cliente y un informe que analiza lo que Joan ha comprado durante los últimos 5 años obtendrá todos los pedidos con sus nombres de soltera y casada sin tener que cambiar la forma en que se genera el informe. .

Como beneficio adicional, esto también reduce la cantidad total de almacenamiento consumido.

Tipos de unión

SQL define cinco tipos diferentes de uniones: INTERIOR, IZQUIERDA EXTERIOR, DERECHA EXTERIOR, COMPLETA EXTERIOR y CRUZADA. La palabra clave OUTER es opcional en la sentencia SQL.

Microsoft Access permite el uso de INTERIOR (predeterminado), IZQUIERDA EXTERIOR, DERECHA EXTERIOR y CRUZ. FULL OUTER no se admite como tal, pero al usar LEFT OUTER, UNION ALL y RIGHT OUTER, se puede falsificar a costa de más ciclos de CPU y operaciones de E / S.

La salida de una combinación CROSS contiene cada fila de la tabla de la izquierda emparejada con cada fila de la tabla de la derecha. La única vez que he visto una combinación CROSS utilizada es durante la prueba de carga de los servidores de bases de datos.

Echemos un vistazo a cómo funcionan las uniones básicas, luego las modificaremos para adaptarlas a nuestras necesidades.

Comencemos creando dos tablas, ProdA y ProdB, con las siguientes propiedades de diseño.

El Autonumérico es un entero largo que se incrementa automáticamente y que se asigna a las entradas a medida que se agregan a la tabla. La opción Texto no se modificó, por lo que aceptará una cadena de texto de hasta 255 caracteres.

Ahora, complételos con algunos datos.

Para mostrar las diferencias en cómo funcionan los 3 tipos de unión, eliminé las entradas 1, 5 y 8 de ProdA.

Próximo, crear una nueva consulta yendo a Crear> Diseño de consulta . Seleccione ambas tablas del cuadro de diálogo Mostrar tabla y haga clic en Agregar , luego Cerrar .

Haga clic en ProductID en la tabla ProdA, arrástrelo a ProductID en la tabla ProdB y suelte el botón del mouse para crear la relación entre las tablas.

Haga clic con el botón derecho en la línea entre las tablas que representan la relación entre los elementos y seleccione Propiedades de unión .

De forma predeterminada, se selecciona el tipo de combinación 1 (INTERIOR). La opción 2 es una combinación IZQUIERDA EXTERIOR y la 3 es una combinación DERECHA EXTERIOR.

Primero veremos la combinación INNER, así que haga clic en Aceptar para cerrar el cuadro de diálogo.

En el diseñador de consultas, seleccione los campos que queremos ver de las listas desplegables.

Cuando ejecutamos la consulta (el signo de exclamación rojo en la cinta), mostrará el campo ProductName de ambas tablas con el valor de la tabla ProdA en la primera columna y ProdB en la segunda.

Observe que los resultados solo muestran valores donde ProductID es igual en ambas tablas. Aunque hay una entrada para ProductID = 1 en la tabla ProdB, no aparece en los resultados ya que ProductID = 1 no existe en la tabla ProdA. Lo mismo se aplica a ProductID = 11. Existe en la tabla ProdA pero no en la tabla ProdB.

Al usar el botón Ver en la cinta y cambiar a Vista SQL, puede ver la consulta SQL generada por el diseñador que se utilizó para obtener estos resultados.

|_+_|

Volviendo a la vista Diseño, cambie el tipo de unión a 2 (IZQUIERDA EXTERIOR). Ejecute la consulta para ver los resultados.

Como puede ver, todas las entradas de la tabla ProdA se representan en los resultados, mientras que solo las de ProdB que tienen una entrada ProductID coincidente en la tabla ProdB aparecen en los resultados.

El espacio en blanco en la columna ProdB.ProductName es un valor especial (NULL) ya que no hay un valor coincidente en la tabla ProdB. Esto resultará importante más adelante.

|_+_|

Intente lo mismo con el tercer tipo de combinación (DERECHA EXTERIOR).

Los resultados muestran todo desde la tabla ProdB mientras muestra valores en blanco (conocidos como NULL) donde la tabla ProdA no tiene un valor coincidente. Hasta ahora, esto nos acerca más a los resultados deseados en la pregunta de nuestro lector.

|_+_|

Usar funciones en una consulta

Los resultados de una función también se pueden devolver como parte de una consulta. Queremos que aparezca una nueva columna llamada 'Resultados' en nuestro conjunto de resultados. Su valor será el contenido de la columna ProductName de la tabla ProdA si ProdA tiene un valor (no es NULL), de lo contrario debe tomarse de la tabla ProdB.

La función IF inmediata (IIF) se puede utilizar para generar este resultado. La función toma tres parámetros. La primera es una condición que debe evaluarse con un valor de Verdadero o Falso. El segundo parámetro es el valor que se devolverá si la condición es Verdadera y el tercer parámetro es el valor que se devolverá si la condición es Falsa.

La construcción de función completa para nuestra situación se ve así:

|_+_|

Observe que el parámetro de condición no comprueba la igualdad. Un valor nulo en una base de datos no tiene un valor que pueda compararse con cualquier otro valor, incluido otro nulo. En otras palabras, Null no es igual a Null. Siempre. Para superar esto, en su lugar, verificamos el valor usando la palabra clave 'Es'.

También podríamos haber usado 'No es nulo' y cambiar el orden de los parámetros Verdadero y Falso para obtener el mismo resultado.

Al poner esto en el Diseñador de consultas, debe escribir la función completa en la entrada Campo :. Para que cree la columna 'Resultados', debe usar un alias. Para hacer esto, preceda la función con 'Resultados:' como se ve en la siguiente captura de pantalla.

El código SQL equivalente para hacer esto sería:

|_+_|

Ahora, cuando ejecutemos esta consulta, producirá estos resultados.

transformar una imagen en otra en línea

Aquí vemos para cada entrada donde la tabla ProdA tiene un valor, ese valor se refleja en la columna Resultados. Si no hay una entrada en la tabla ProdA, la entrada de ProdB aparece en Resultados, que es exactamente lo que preguntó nuestro lector.

Para obtener más recursos para aprender Microsoft Access, consulte Cómo aprender Microsoft Access de Joel Lee: 5 recursos gratuitos en línea.

Cuota Cuota Pío Correo electrónico ¿Vale la pena actualizar a Windows 11?

Windows ha sido rediseñado. Pero, ¿es eso suficiente para convencerte de cambiar de Windows 10 a Windows 11?

Leer siguiente
Temas relacionados
  • Productividad
  • Pregunte a los expertos
Sobre el Autor Bruce Epper(13 Artículos publicados)

Bruce ha estado jugando con la electrónica desde los años 70, las computadoras desde principios de los 80 y respondiendo con precisión preguntas sobre tecnología que no ha usado ni visto en todo el tiempo. También se molesta al intentar tocar la guitarra.

Más de Bruce Epper

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse