67% encontró este documento útil (3 votos)
2K vistas

SQL - Guía Completa para Principiantes de La Programación SQL Con Ejercicios

Cargado por

Leandro Verea
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
67% encontró este documento útil (3 votos)
2K vistas

SQL - Guía Completa para Principiantes de La Programación SQL Con Ejercicios

Cargado por

Leandro Verea
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 153

SQL

_______________________________
Guía completa para principiantes
de la programación SQL con
ejercicios y estudios de casos

2
© Copyright 2018 - Todos los derechos reservados.
El contenido en este libro no puede ser reproducido, duplicado o
transmitido sin el permiso directo por escrito del autor o del editor.

Bajo ninguna circunstancia se culpará o se responsabilizará legalmente al


editor o al autor por daños, reparaciones o pérdidas monetarias debidas a la
información contenida en este libro. Ya sea directa o indirectamente.

Aviso legal
Este libro está protegido por derechos de autor. Este libro es solo para uso
personal. No puede enmendar, distribuir, vender, usar, citar o parafrasear
ninguna parte o el contenido de este libro, sin el consentimiento del autor o
editor.

Aviso de extensión de responsabilidad


Tenga en cuenta que la información contenida en este documento es solo
para fines educativos y de entretenimiento. Se han realizado todos los
esfuerzos para presentar información precisa, actualizada y confiable.
Ninguna garantía de ningún tipo está declarada o implícita. Los lectores
reconocen que el autor no participa en la prestación de asesoramiento
legal, financiero, médico o profesional. El contenido de este libro ha sido
derivado de varias fuentes. Consulte a un profesional con licencia antes de
intentar cualquier técnica descrita en este libro.

Al leer este documento, el lector acepta que bajo ninguna circunstancia el


autor es responsable de cualquier pérdida, directa o indirecta, en que se
incurra como resultado del uso de la información contenida en este
documento, incluidos, entre otros, los errores, omisiones, o inexactitudes.

3
Tabla de contenido

Introducción
Capítulo uno: Los fundamentos de comenzar con SQL
¿Qué es SQL?
¿Cómo funciona con bases de datos?
Bases de datos relacionales
Tecnología de servidor y cliente
Trabajar con sistemas de bases de datos basados en Internet.
Beneficios de trabajar con SQL
Alta velocidad
Normas que están bien definidas.
Usted no necesita codificar
DBMS orientado a objetos
Puedes ganar mucho dinero
Todos los tipos de tecnología utilizan SQL
Los empleadores buscan habilidades SQL

Siempre obtienes una respuesta


El tamaño de un archivo nunca te limita
Los informes son fáciles de crear
Capítulo Dos: Comandos SQL Básicos
Lenguaje de definición de datos
Lenguaje de manipulación de datos
Lenguaje de consulta de datos
Lenguaje de control de datos
Comandos de administración de datos
Comandos de control transaccional
Cometer
Punto de guardado
Retroceder
Establecer transacción

Capítulo tres: Tipos de datos que puede usar dentro de SQL

4
Caracteres fijos en longitud
Personaje (n)

Personajes variables
CARACTER VARIANDO (n)
Valores numéricos
Cuerdas literales
Valores booleanos
Capítulo cuatro: Introducción a los tipos de datos numéricos
Números absolutos
Tipo de datos entero
Tipo de datos Pequeño (Smallint)
Tipo de datos Grande (Bigint)
Tipo de datos numéricos
Tipo de datos decimales
Números aproximados
Tipo de datos reales
Tipo de datos de doble precisión
Tipo de datos flotante

Operadores en SQL
Capítulo cinco: Una introducción a las cadenas de caracteres
Tipo de datos del personaje
Tipo de datos que varían de carácter
Tipo de datos de objetos grandes de caracteres
Tipo de datos de carácter nacional, variación nacional y carácter grande
Objeto grande
Booleanos
Capítulo seis: Una introducción a los tiempos de datos
Fecha Tipo de datos
Hora sin tipo de datos de zona horaria
Marca de tiempo sin tipo de datos de zona horaria
Hora con tipo de datos de zona horaria
Marca de tiempo con tipo de datos de zona horaria
Capítulo Siete: Una Introducción a los Intervalos
Tipo de fila

5
Tipos de colección
Tipo de matriz

Tipos de referencia
Tipos definidos por el usuario
Tipos distintos
Tipos estructurados
Constructores
Mutador y observador
Subtipos y supertipos

Capítulo Ocho: Administre los objetos en su base de datos


El esquema

Creando una tabla nueva


Creando una nueva tabla con una que ya existe
Ejercicio
Capítulo Nueve: Recuperando Datos
Recuperando datos
Ejercicio

Creando Vistas
Añadiendo datos
Añadiendo una fila a la vez
Soluciones
Capítulo Diez: Seguridad de la base de datos
Integridad referencial
Responsabilidad delegante
Capítulo Once: Cómo trabajar con resultados de búsqueda a través de
SQL
Creando tu nueva consulta
Usando el comando SELECT
SELECCIONAR
DESDE
DÓNDE
ORDEN POR

Ejemplos

6
Ejemplo 1

Entender cómo funciona la sensibilidad a los casos


Capítulo Doce: Una Introducción a las Uniones
Clientes
Pedidos
Cómo usar una unión
Tipos básicos de unirse
Unir internamente
Unirse a la izquierda
Unirse a la derecha
Unirse completo

Ejemplos de tipos de unión SQL


Unir internamente
Unirse a la izquierda
Unirse a la derecha
Unirse completo

¿Qué vas a hacer después?


Capítulo trece: una introducción a las subconsultas
¿Por qué debería utilizar una subconsulta?
¿Qué hacen las subconsultas?
Capítulo Catorce: Introducción a los Operadores de Set.
UNION y UNION TODOS
Sintaxis de UNION
Sintaxis para UNION ALL
Base de datos de muestra
Ejemplos

INTERSECARSE
La consulta
Sintaxis
Ejemplos

MENOS
La consulta
Sintaxis
Ejemplos

7
Capítulo Quince: Estudio de Caso
Usando INNER JOIN (unión interna) para identificar el StatusName
(nombre del estado)
Combinando las filas de la tabla de razones usando UNION
Uso de una subconsulta para producir el resultado final que incluye la tabla
derivada
Consulta final
Capítulo Dieciséis: Diez errores de novato
Asumiendo que sus clientes saben lo que necesitan
Ignorando el alcance del proyecto
Teniendo en cuenta los factores técnicos solos
Nunca tomando retroalimentación
Usando un solo entorno de desarrollo
Usando un tipo de arquitectura del sistema
Aislar diseños de tablas de bases de datos
Descuidar comentarios
Prueba de salto
Sin documentación
Capítulo Diecisiete: Diez consejos para una fácil recuperación
Verificar la estructura de la base de datos.
Prueba la base de datos
Revisar consultas con JOIN
Siempre revisa las consultas con sub selecciones
Resumir datos utilizando GROUP BY
Cuidado con las restricciones de la cláusula
Utilice siempre paréntesis para operadores lógicos
Controlar los privilegios de recuperación
Crear una copia de seguridad regular
Manejar las condiciones de error con gracia
Consejos adicionales para manejar los errores
Siempre use paréntesis
Nunca uses comas al final de las secuencias
Utilice la evaluación de consultas parciales para depurar consultas largas
Preste atención a los nombres de columnas y tablas

8
Capítulo Dieciocho: Ejercicio
Capítulo Diecinueve: Usando SQL Con Aplicaciones
SQL en una aplicación
Capítulo Veinte: Programa Java Embedded (sistema de incrustación)
SQL
Configuración de un proyecto en Eclipse
Hacer la conexión
Agregar entrada de usuario a las consultas
Inyecciones de SQL
Capítulo Veintiuno: Programa de SQL Embedded (incrustado) C
Capítulo Veintidós: Programa de FORTRAN Embedded (incrustado) en
SQL
Ejemplos de Declaración
Capítulo Veintitrés: Programa COBOL Embedded (incrustado) de SQL
Capítulo Veinticuatro: Soluciones a las Preguntas del Capítulo Dieciséis
Conclusión
Fuentes
Bibliografía

9
Introducción

Gracias por elegir este libro, 'SQL - Guía completa para principiantes de la
programación SQL con ejercicios y estudios de casos'.
En las últimas décadas, se han desarrollado muchos lenguajes de
programación, y solo algunos se han mantenido. Algunos ejemplos son C,
que es un sistema operativo y de desarrollo de servidores popular para
sistemas integrados. Cuando se trata de bases de datos, el lenguaje de
consulta estructurado (SQL) ha existido desde la década de 1970.
Puede usar SQL para crear, generar, administrar y manipular desde bases
de datos relacionales. La mayoría de las empresas prefieren utilizar una
base de datos relacional, ya que puede almacenar cientos y miles de filas
de datos. Esto es solo cuando la base de datos está bien diseñada. SQL es
el único lenguaje de base de datos que se puede usar para administrar
grandes bases de datos. Los nuevos lenguajes no pueden competir con
SQL por esta razón. Por lo tanto, es importante que aprendas a trabajar con
SQL y también aprendas cómo administrar los datos en SQL.
En este libro, recopilará información sobre qué es SQL y por qué es
importante aprender SQL. Este libro también cubre algunos de los
comandos básicos que se usan en SQL y explica cómo puede usar esos
comandos para manipular información en tablas y conjuntos de datos. Este
libro cubre información sobre diferentes tipos de datos, operadores y
funciones que puede utilizar para trabajar con datos y analizarlos. A lo
largo del libro, se ofrecen muchos ejemplos que lo ayudarán a comprender
mejor qué es SQL. También se incluyen algunos ejercicios en el libro, que
le ayudarán a practicar algunos de los conceptos que ha aprendido en el
libro.
Debes continuar practicando si quieres dominar SQL. Está bien no saber
qué código usar cuando empiezas a aprender a codificar en un idioma.
Solo cuando practique, sabrá dónde debe aplicar un operador o función
específica.
Gracias por comprar el libro.

10
Capítulo uno: Los fundamentos de comenzar
con SQL

Hay una variedad de opciones para elegir cuando quiere aprender un


nuevo idioma. Algunos de estos idiomas le permitirán crear su propio sitio
web y también lo ayudarán a identificar diferentes formas en que puede
comunicarse con sus clientes. Estos idiomas también lo ayudan a convertir
clientes potenciales en clientes confirmados. Otros idiomas le permiten
desarrollar aplicaciones y juegos para su teléfono. Algunos de estos
lenguajes son avanzados, lo que dificulta que un aficionado comience a
programar de inmediato. Hay otros lenguajes como SQL que le permiten al
propietario de un negocio realizar un seguimiento de la información que
tienen sin ningún desafío.
Las empresas a menudo utilizaban el Sistema de gestión de bases de datos
o DBMS para almacenar la información diferente sobre su empresa. Esta
información incluye datos de clientes y datos de ventas. DBMS es la
primera opción que se introdujo en el mercado, lo que facilitó el trabajo
con los datos. A lo largo de los años, se desarrollaron métodos más nuevos
que ayudaron a una empresa a conservar su información sin ninguna
dificultad. Los sistemas DBMS más simples diseñados ahora son más
seguros que los que se desarrollaron hace unos años.
Las empresas deben tener mucha información y parte de ella será personal,
como la dirección del cliente, la información de la tarjeta de crédito, la
fecha de nacimiento, etc. Para mantener la seguridad de esta información,
las bases de datos deben estar seguras. También debe haber una forma para
que las personas conecten la información para analizar los datos. Esto fue
cuando se desarrolló el sistema de gestión de base de datos relacional. Este
tipo de base de datos es como el sistema de base de datos tradicional pero

11
es más seguro. También utiliza más tecnología para garantizar que la
información sea segura.
Como propietario de un negocio, seguramente querrá ver diferentes
opciones y también elegir qué tipo de herramienta desea utilizar para
administrar la base de datos. SQL es la herramienta perfecta para este
propósito ya que está bien diseñado y es fácil de usar. Este lenguaje fue
diseñado para administrar negocios y brinda múltiples herramientas que le
permitirán mantener la información segura. En este libro, veremos qué es
SQL y por qué es uno de los mejores sistemas para analizar y proteger sus
datos.

¿Qué es SQL?

El lenguaje de consulta estructurado (SQL) es un lenguaje de


programación que facilita la interacción de un usuario con diferentes
conjuntos de datos o tablas en la base de datos. Estas tablas están siempre
en el mismo sistema. La herramienta se desarrolló en la década de 1970,
pero solo ganó popularidad cuando IBM construyó un prototipo similar y
lo lanzó al mercado. Las empresas comenzaron a utilizar esta herramienta
para analizar sus negocios y también hacer algunos juicios sobre su
negocio. Oracle fue el lenguaje que IBM desarrolló, y esta herramienta
todavía está siendo utilizada por muchas empresas en todo el mundo.
Oracle y SQL son herramientas que ayudan a las empresas a mantener la
seguridad de los datos y garantizar que los datos estén siempre disponibles
para que los utilice el propietario. Estos idiomas hacen que sea más fácil
para uno realizar el análisis debido a las muchas herramientas que le
proporcionan al usuario.

¿Cómo funciona con bases de datos?

Cuando trabaje con SQL, aprenderá a mirar la base de datos. Significa que
verás grupos de información. Las organizaciones creen que deben
almacenar información de manera que sea accesible para sus clientes. Esta
información también debería ayudar al negocio a analizar el
funcionamiento del negocio. Cuando la empresa analiza la información,

12
puede utilizar los resultados para tomar decisiones informadas.
Independientemente de la empresa para la que trabaje, utilizará bases de
datos similares a SQL. Por ejemplo, la guía telefónica es un ejemplo
clásico de una base de datos. Una guía telefónica contiene mucha
información sobre empresas y personas. Recopilará la siguiente
información sobre empresas y personas: nombres, números y direcciones.
Toda esta información se puede encontrar en un solo lugar. La base de
datos también está organizada en orden alfabético, para garantizar que
pueda encontrar la información fácilmente. A diferencia de la guía
telefónica, la base de datos SQL no está estructurada de la misma manera,
pero puede usarla para extraer toda la información que necesita.

Bases de datos relacionales

La herramienta SQL se utiliza a menudo en bases de datos relacionales.


Una base de datos relacional puede segregar los datos en tablas y otros
tipos de unidades lógicas. Estas tablas están interconectadas en la base de
datos que le permite comprender los datos según el tipo de información
que está buscando. Esta es una buena herramienta para usar dependiendo
de lo que quiera hacer o de la información que esté buscando. Debe usar la
base de datos para tomar la información compleja y dividirla en partes más
pequeñas de información. Es más fácil para usted controlar y optimizar los
datos dependiendo de cómo lo necesite.
Siempre es bueno usar estos tipos de bases de datos, ya que puede tomar
todos los datos e información que tenga sobre el negocio. Estas bases de
datos le facilitan el uso de los datos, ya que puede dividir información
compleja en un lenguaje que sea fácil de entender para cualquiera. El
servidor examinará las diferentes partes e identificará una manera de hacer
que encajen. También puede localizar rápidamente la información que está
buscando, ya que no tiene que revisar toda la base de datos. También
puede agregar algo de seguridad a sus datos si desea mantenerlos a salvo
de otros.

Tecnología de servidor y cliente

13
En el pasado, las compañías utilizaban computadoras centrales, lo que
significa que estas máquinas soportaban un gran sistema, y este sistema
sería un gran lugar para almacenar y procesar información. El usuario
puede acceder a la computadora e interactuar con el mainframe. Si necesita
la información para activar la función correcta, los terminales de la
computadora central se basarán en la información como el
almacenamiento, la memoria y el procesador que se encuentran en el
sistema.
Estos sistemas funcionan bien, y si posee un sistema que usa este método,
no hay nada de malo en el sistema. Sin embargo, hay algunas opciones
mejores que puede usar, ya que son más eficientes y harán el trabajo más
rápido. Esto solo se puede encontrar en un servidor y sistema cliente. Estos
sistemas utilizarán diferentes procesos para ayudarlo a identificar los
resultados que necesitará. La computadora principal, también llamada
servidor, es la que el usuario puede acceder. Significa que cualquier
usuario en su red puede acceder a estos sistemas. También deben
asegurarse de tener las credenciales correctas para acceder a esta
información. Solo cuando los usuarios tienen la información correcta y
están en la red, pueden acceder a la información necesaria. Estos usuarios
pueden acceder a este servidor desde otros servidores o mediante una
computadora de escritorio. En este caso, el usuario se llama cliente y es
extremadamente fácil para el cliente y el servidor interactuar con la base
de datos.

Trabajar con sistemas de bases de datos basados en


Internet.

La tecnología de servidor y cliente es popular para muchas empresas


diferentes en el mundo. Esto funciona bien para algunas compañías, pero
algunas otras cosas deben ser atendidas debido a los cambios en la
tecnología. Muchas empresas permiten a un usuario acceder a una base de
datos en línea desde su sistema. Los clientes que tienen una cuenta en el
sitio web de la compañía pueden usar este sistema de base de datos para
actualizar o cambiar la información. Estos clientes pueden incluso pagar
en línea, Consulta sus pedidos, realiza sus compras y mucho más.
Dado que cada vez más compañías están configurando sus sitios web, debe

14
asegurarse de desarrollar un buen sitio web que le brinde al cliente la
oportunidad de verificar la información. Puede haber ocasiones en las que
desee incluir cierta información de seguridad como contraseñas cuando un
cliente ingrese su información personal. Muchas compañías requerirán que
un cliente haga esto, pero estas compañías siempre dan la información de
forma gratuita.
Este sistema es fácil de manejar, pero hay algunas cosas diferentes que
sucederán entre bastidores para garantizar que las consultas funcionen
correctamente. El cliente puede usar el sistema y verificar esta
información, pero hay una gran cantidad de información que el servidor
deberá juntar para garantizar que la información se muestre correctamente
en la pantalla. Esto también ayudará a mejorar la experiencia del usuario.
Por ejemplo, puede observar que el navegador web que utiliza actualmente
utilizará un código SQL o un programa similar. Este programa es para
averiguar qué tipo de datos espera ver el usuario. El navegador utilizará la
interfaz SQL para llegar a la base de datos una vez que el cliente haya
ingresado la información que está buscando. El sistema SQL examinará la
consulta y luego devolverá la información al sitio web. Esta información
aparecerá en el navegador web, y solo la información correcta aparecerá en
la pantalla si el sistema funciona correctamente.

Beneficios de trabajar con SQL

Ahora que conoce los diferentes sistemas de base de datos con los que
puede trabajar, aprendamos las ventajas de usar el lenguaje de consulta
estructurado. Además de una variedad de lenguajes de codificación,
también tiene algunos lenguajes de base de datos, y cada uno de estos
idiomas es diferente en comparación con el otro. También puede
preguntarse por qué debería usar SQL sobre otros lenguajes. Por lo tanto,
es importante que conozca los beneficios de SQL.

Alta velocidad

Debería usar el sistema SQL si desea revisar volúmenes de información


rápidamente. El sistema SQL puede encontrar mucha información en unos

15
pocos segundos. También encontrará la información que necesita. Si
trabaja con volúmenes de datos, debe usar SQL, ya que es una de las
opciones más eficientes.

Normas que están bien definidas.

Si desea asegurarse de que su base de datos es segura y sólida, debe usar


SQL ya que se actualiza constantemente. Estas actualizaciones ayudan a
mantener el sistema SQL fuerte. Otras herramientas de base de datos no
tendrán los mismos estándares como SQL, lo que afectará sus análisis. Las
características de otras bases de datos también dificultarán el
almacenamiento de toda la información necesaria.

Usted no necesita codificar

No necesita codificar para usar la herramienta SQL. Todo lo que necesita


hacer es recordar algunas sintaxis, que veremos en los últimos capítulos
del libro. Sin embargo, no tiene que dominar la codificación en SQL si
desea utilizarla para realizar cualquier análisis en algunos datos.

DBMS orientado a objetos

Dado que utilizará un sistema de gestión de bases de datos cuando trabaje


con SQL, le permitirá encontrar más fácilmente la información que
necesita, almacenar esa información y realizar el análisis necesario para
tomar decisiones informadas.

Puedes ganar mucho dinero

Siempre quieres ganar más cuando trabajas para una organización.


Ciertamente puede obtener un mejor salario si sabe cómo usar SQL. Puede
hacer esto desarrollando sus habilidades de programación en SQL o
aprendiendo cómo mantener un sistema y mantenerlo funcionando de

16
manera efectiva y eficiente. También puede trabajar como analista de SQL
y proporcionar información y perspectivas para una empresa; Ayudará a
los mayores a tomar mejores decisiones. Esto ayudará a maximizar los
beneficios para cualquier negocio.

Todos los tipos de tecnología utilizan SQL

La mayoría de las empresas utilizan herramientas y tecnologías de base de


datos como MySQL, Microsoft SQL Server y PostgreSQL. También debes
recordar que la mayoría de las personas usan SQL en algún momento de
sus vidas. Si no lo sabe, también usa SQL en su teléfono inteligente.
Los empleadores buscan habilidades SQL
La mayoría de los empleadores buscan activamente personas que saben
cómo usar SQL. Sí, un empleador está dispuesto a pagarle más, pero
también es consciente de los beneficios de contratar a una persona que
tenga experiencia en el uso de SQL. Si desea mover trabajos o cambiar su
área de trabajo, debe aprender cómo codificar en SQL. Serás uno de los
candidatos más buscados para el puesto.

17
Idiomas clasificados por número de trabajos de
programación

18
Siempre obtienes una respuesta
Debe pensar en las diferentes preguntas que tiene sobre los datos. Es
posible que desee saber más sobre las ventas del año pasado. ¿Estaban sus
clientes satisfechos con su producto? ¿Han reducido sus gastos desde el
año pasado? Puedes responder a todas estas preguntas utilizando SQL.
Cuando identifica la base de datos que proporciona esta información,
puede usar SQL para explorar esos datos y responder sus preguntas. SQL
le permite analizar los datos de diferentes maneras. No tiene que confiar
solo en informes simples o incluso ponerse en contacto con sus
empleadores para obtener datos. Puedes convertirte en un empleado
independiente cuando usas SQL.

El tamaño de un archivo nunca te limita

¿Alguna vez ha tenido un problema donde una hoja de cálculo se ha


bloqueado porque tiene cientos o miles de filas llenas de datos? Puede
optar por una base de datos relacional para guardar los datos, ya que estas
bases de datos pueden guardar millones de filas y columnas de datos con
facilidad. SQL le permitirá realizar diferentes operaciones en los datos y
utilizar esa información para tomar decisiones. Es cierto que MS Excel es
una gran herramienta para usar, pero esta herramienta no está equipada
para realizar múltiples operaciones en millones de filas de datos. Debe
intentar usar una base de datos relacional para almacenar la información y
usar SQL para realizar cualquier análisis de los datos.

Los informes son fáciles de crear

Puede guardar consultas SQL fácilmente y reutilizarlas cuando sea


necesario. También puede realizar cambios en la consulta cuando lo desee.

19
También puede usar comentarios en el código SQL que lo hace más fácil
para usted y para cualquier otra persona que entienda la consulta. Si
trabaja solo en hojas de cálculo, deberá incluir procesos largos de varios
pasos. Primero deberá importar los datos a Excel desde un informe,
tabularlo, ordenarlo y luego filtrar o usar algunos valores según su
necesidad.
Si usa SQL, solo necesita escribir el código una vez, guardar ese código y
volver a abrirlo cada vez que necesite generar un informe. Ahorrarás
muchas horas y días. Estos son algunos de los beneficios que puede
disfrutar cuando trabaja con SQL. Algunas personas afirman que la
interfaz SQL es un poco difícil de usar, y hay algunas características que
puede necesitar comprar a un tercero. En palabras simples, SQL tiene
muchas características que facilitan el uso del lenguaje. Dado que este
lenguaje tiene múltiples beneficios, es uno de los mejores idiomas para
realizar análisis en diferentes conjuntos de datos que recopila para su
negocio.
Puedes decir que es una exageración cuando te pido que aprendas SQL,
pero debes recordar que los números nunca mienten. SQL es una
herramienta invaluable que muchos empleadores desean. Como la mayoría
de la información ahora es digital, tiene más datos disponibles para usted.
Toda esta información se almacena en una base de datos o en un almacén
de datos. Si desea administrar estas bases de datos o almacenes, necesita
aprender SQL. Si lees un diario de negocios, verás que la mayoría de los
negocios están buscando analistas de inteligencia de negocios. Si una
organización quiere hacer más con los datos que tiene, debe tener personas
que saben cómo acceder y analizar los datos. Puedes hacerlo a través de
SQL.

20
Capítulo Dos: Comandos SQL Básicos

Ahora que sabemos un poco más sobre SQL y algunos de los comandos
que uno puede usar cuando usan SQL, es hora de aprender algunos de los
comandos que necesitaría usar para que este sistema funcione. Por suerte,
SQL es fácil de aprender y no tendrá muchos comandos diferentes para
mostrar la información que desea. En este capítulo, dedicaremos algo de
tiempo a aprender algunos de estos comandos, así como a separar los
comandos en las seis categorías diferentes que sean mejores para ellos.
Estas seis categorías incluyen:

Lenguaje de definición de datos

Este también se conoce como DDL, y es uno de los aspectos que está
dentro de su programa SQL que se encarga de permitirle generar objetos
en la base de datos antes de organizarlos de la manera que más los disfrute.
Por ejemplo, este es el aspecto del sistema que utilizará cuando desee
realizar cambios, como agregar o eliminar objetos, fuera de la tabla. Hay
algunos comandos diferentes que podría usar para esto, incluyendo:
• Índice de caída

21
• vista de la gota
• Crear índice
• Alterar índice
• Alterar mesa
• Mesa plegable
• Crear mesa

Lenguaje de manipulación de datos

Este es el que a menudo se llama DML dentro de su programa SQL. Este


es también el que usará cuando quiera hacer algunas modificaciones a los
objetos dentro de la base de datos. Este es un buen método para usar si
desea actualizar un objeto, eliminar algunos de los objetos o asegurarse de
que la información correcta se inserta en la base de datos. Esto le dará más
libertad al usuario cuando quiera revisar toda su información y agregar
algo nuevo que ayude a la base de datos.

Lenguaje de consulta de datos

Cuando está trabajando en DQL, está trabajando con lo que muchos


consideran un aspecto realmente poderoso de lo que son capaces de hacer
con SQL, especialmente cuando está trabajando en un sistema de base de
datos que se considera más moderno. Solo se necesita un comando para
trabajar con la parte DQL, y este comando es el comando "Seleccionar".
Puede usar este comando de varias maneras, incluso usarlo para ejecutar
consultas cuando se encuentra dentro de una base de datos relacional. Si
estaba interesado en obtener resultados más detallados, tendría que usar el
comando Seleccionar a través de DQL para que esto suceda.

Lenguaje de control de datos

El DCL es otro componente de SQL que debe aprender a usar, y son los

22
comandos con los que trabaja el usuario cada vez que desean controlar
quién tiene permiso para ingresar a la base de datos. Si está tratando con
información personal como información de tarjeta de crédito, es una buena
idea tener algunas limitaciones sobre quién puede ingresar al sistema y
obtener la información. Este comando DCL se usa para ayudar a generar
los objetos que están relacionados con quién puede acceder a la
información en la base de datos, incluido quién podrá distribuir la
información. Hay algunos comandos que son útiles cuando está trabajando
en DCL, incluyendo:
• Crear sinónimo
• Grandioso
• Modificar contraseña
• Revocar

Comandos de administración de datos

Cuando se trata de algunos de los comandos que puede usar dentro de


SQL, también puede usarlos para auditar o analizar la operación que está
dentro de la base de datos. Hay algunos casos en los que podrá acceder al
rendimiento de la base de datos en general con la ayuda de algunos de
estos comandos. Si desea solucionar algo que está causando problemas en
el sistema o si desea deshacerse de algunos de los errores en el sistema,
estos son los comandos con los que tendrá que trabajar. Si bien hay
algunas opciones que puede elegir con estos comandos, las dos opciones
más populares incluyen:
• Detener la auditoría
• Iniciar auditoría
Una de las cosas que debe recordar al trabajar con SQL es que la
administración de datos y la administración de bases de datos serán dos
ideas diferentes dentro del sistema. Por ejemplo, la administración de la
base de datos será la parte que administrará toda su base de datos,
incluidos los diferentes comandos que está configurando en SQL y
también serán más específicos a la implementación que se realiza en SQL.

23
Comandos de control transaccional

Si está tratando de administrar y hacer un seguimiento de algunas de las


transacciones que se llevan a cabo con su base de datos con usted y el
cliente, los comandos de control transaccional son los correctos para usar.
Si usted es una empresa que utiliza su sitio web para vender productos en
línea, los comandos de control transaccional lo ayudarán a asegurarse de
que pueda mantener todo esto en línea. Hay varias cosas para las que podrá
usar estos comandos de control transaccional, que incluyen:

Cometer (perpetrar)

Este es el comando que deberá usar para guardar información relacionada


con las diferentes transacciones que se encuentran dentro de su base de
datos.

Punto de guardado

Este es el comando que podrá utilizar para generar diferentes puntos


dentro del grupo de transacciones. Este es también el que puede usar al
mismo tiempo que el comando Rollback.
Retroceder

Este comando es el que utilizará cada vez que busque en la base de datos,
y le gustaría deshacer al menos una de las transacciones internas.

Establecer transacción

Este comando es el que puede usar en cualquier momento que intente


tomar las transacciones en su base de datos y darles nombres. A menudo,
utilizará este cuando intente etiquetar las cosas para un poco más de
organización.

24
Los seis de estos tipos serán importantes según los resultados que desea
obtener de su búsqueda. Cada uno de estos se explorará un poco más a
medida que avancemos en esta guía para que pueda comprender mejor
cómo usarlos, cuándo usarlos y cómo dividir la información de la manera
adecuada para evitar problemas y mantener su base de datos agradable. Y
organizado con la ayuda del lenguaje SQL.

Capítulo tres: Tipos de datos que puede usar


dentro de SQL

Lo siguiente que veremos son los diferentes tipos de datos que puede
utilizar cuando trabaja con SQL y crea su nuevo código. Estos van a variar
según lo que intenta hacer dentro de la base de datos, así como los
diferentes elementos que intenta ofrecer o vender al cliente. Los tipos de
datos que se encuentran más comúnmente dentro de SQL serán los
atributos que irán con la información que está dentro y luego estas
características específicas se colocarán en una tabla para que pueda

25
recuperarlas y leerlas fácilmente. .
Un buen ejemplo de esto es cuando necesita que un campo solo pueda
mantener valores numéricos. Podrías usar SQL para configurarlo de modo
que el usuario no pueda colocar nada fuera de un número dentro de la base
de datos, o al menos en esa celda particular de la tabla. Si desea que la
persona solo ingrese su número de tarjeta de crédito o su número de
teléfono, esta sería una herramienta útil para asegurarse de que no están
colocando accidentalmente algo más allí. Al asignar el tipo correcto de
datos a los diferentes campos dentro de la base de datos, se asegura de que
haya menos errores en la entrada de datos en el lado del cliente.
Una cosa que debe recordar cuando trabaja con SQL es que cada versión
será un poco diferente y tendrá que usar algunas opciones diferentes
cuando se trata de los tipos de datos que está usando. Tendrá que revisar
las reglas de su versión de SQL para asegurarse de que todo se mantenga
en orden. Para la mayoría de los casos, deberá usar los puntos de datos que
son específicos de su versión para que la base de datos esté mejor
configurada.
Los diferentes tipos de datos que admite SQL dependen del historial de la
herramienta que está utilizando. La especificación SQL: 2003 reconoce
solo cinco tipos generales predefinidos:
• Numéricos
• Booleano
• Fechas límite
• Cuerdas
• Intervalos
Habrá más de un subtipo dentro de cada uno de estos tipos y los
cubriremos en detalle en los próximos capítulos. Además de los tipos
predefinidos incorporados, SQL: 2003 admite tipos de colección, tipos
construidos y tipos definidos por el usuario.
Si usa una implementación de SQL que admite uno o más tipos de datos
que la especificación de SQL: 2003 no describe, puede mantener su base
de datos más portátil al evitar estos tipos de datos no descritos. Antes de
decidir crear y utilizar un tipo de datos definido por el usuario, asegúrese
de que cualquier DBMS que desee trasladar a un puerto en el futuro
también admita tipos definidos por el usuario.

26
Caracteres fijos en longitud

Así que ahora vamos a pasar un tiempo mirando los diferentes tipos de
datos. El primero que veremos es los caracteres de longitud fija. Si está
trabajando con caracteres constantes o incluso cadenas que pueden
permanecer iguales todo el tiempo, debe asegurarse de que se guardan
correctamente, lo que significa que debe guardarlos como un tipo de datos
de longitud fija. El tipo de datos típico que usará cuando estemos
trabajando con estas opciones es:

Personaje (n)

En esta situación, la "n" que está dentro del paréntesis será la longitud
máxima, o la longitud asignada, que permitiría que fuera el campo. Por
ejemplo, este podría ser el número de teléfono del cliente. No querrá que
ingresen un número que tenga más de diez caracteres, por lo que
establecería su "n" en 10. Ahora, hay algunas variaciones sobre cómo
hacer esto. Digamos que para el nombre, establecerá la longitud solo para
ser 20. Si alguien tiene un nombre pequeño, como Sam, puede usarlo aquí,
pero no podría superar el límite de 20 caracteres; Aunque siempre puede
ser más pequeño.
También hay algunas implementaciones del lenguaje SQL que utilizarán el
tipo de datos "CHAR" solo para que pueda guardar información que tendrá
una longitud fija. Es una buena idea trabajar con este tipo de tipo de datos
cuando le gustaría trabajar con información que sea alfanumérica. Por
ejemplo, le gustaría configurar una parte que tenga el lugar del usuario en
el nombre de su estado, pero desea que utilicen la abreviatura en lugar del
nombre completo del estado. Entonces, podrá establecer el límite de
caracteres en solo dos partes para que todos sepan cómo poner las cosas.
Cuando trabaje dentro de este tipo de datos en particular, su usuario no
agregará información que sea más larga que lo que haya establecido.
Digamos que viven en Dakota del Sur, pero si lo configuras para que solo
puedan ingresar dos caracteres para el nombre del estado, tendrían que
colocar SD en lugar de Dakota del Sur.

27
Hay muchos lugares donde puede limitar la cantidad de caracteres que le
gustaría usar, pero cuando se trata del nombre de usuario y la contraseña
que el usuario elige, no debe usar los tipos de datos de longitud fija. El
usuario deberá inventar las credenciales de nombre de usuario y contraseña
que funcionen para él y algunas personas elegirán una más larga para
hacerlo seguro.

Personajes variables

Otra opción con la que puedes trabajar son los caracteres variables. En
lugar de limitar al usuario a cuántos caracteres pueden usar dentro de esto,
podrán elegir la longitud. Este funciona bien para cosas como nombres
(que pueden tener diferentes longitudes), así como contraseñas y nombres
de usuario para hacerlos más únicos. Si desea usar esta opción, la siguiente
notación puede ayudarlo:

CARACTER VARIANDO (n)

En esta opción, va a utilizar la "n" para ser el número que identifica el


campo asignado o la longitud máxima asignada. Podrá elegir entre varios
tipos diferentes para usar cuando quiera trabajar con estos caracteres
variables, incluidos VARCHAR, ANSI y VARCHAR2.
Para este tipo de datos, no habrá un requisito que deba cumplirse a la hora
de completar los espacios con los que su usuario puede trabajar. Si la
longitud que asignó aquí es de 15 caracteres, el usuario puede agregar
menos si lo desea y no habría problemas con lo que están haciendo.
Cada vez que desee trabajar con cadenas de caracteres que se consideran
variables, querrá asegurarse de que está utilizando el tipo de datos que
varía tanto como sea posible. Esto le ayudará a maximizar la cantidad de
espacio que se encuentra dentro de su base de datos, y podrá asegurarse de
que el usuario pueda ingresar la información correcta sin muchos
problemas en el proceso.

Valores numéricos

28
También es posible que trabaje con valores numéricos que estén en SQL.
Estos valores son los que están almacenados dentro de su campo como un
número en lugar de una letra. Estos valores irán por un nombre diferente,
básicamente dependiendo del tipo con el que esté trabajando. Hay varios
tipos de estos valores numéricos con los que puede trabajar, incluidos:
• DECIMAL (p, s)
• REAL (s)
• BIT (n)
• FLOTACIÓN (p)
• INTEGER
• DOBLE PRECISIÓN (P)
• BIT VARYING (n)

Cuerdas literales

La siguiente parte de los datos con los que puede trabajar se conoce como
cadenas literales. Estas son las series de caracteres, incluidos los números
de teléfono y los nombres, que serán especificados por el usuario del
programa o la base de datos. En su mayor parte, encontrará que estas
cadenas van a tener una gran cantidad de datos que son similares en las
características.
Cuando trabaje con estas cadenas literales, tendrá algunos problemas para
especificar el tipo de datos que se van a utilizar. Más bien, usted está a
cargo de especificar el tipo de cadena que desea utilizar para que esto
funcione. Es bueno tener en cuenta que cuando trabaje en este tipo de
cadenas, especialmente las alfanuméricas, deberá asegurarse de que está
agregando algunas comillas alrededor de las palabras. Puede elegir entre
las comillas dobles o simples aquí, solo asegúrese de que está usando la
misma en ambas partes.

Valores booleanos

29
Los valores booleanos son importantes porque te ayudarán bastante
cuando trabajes dentro del programa SQL. Cuando esté trabajando en este
tipo de valores, habrá tres valores diferentes con los que podrá trabajar con
nulo, falso o verdadero. También encontrará cuando utilice los valores
booleanos que está buscando para comparar las distintas unidades de
datos. Tomará la información en la que está trabajando y la comparará;
Obtendrá las respuestas que están arriba. Por ejemplo, si está trabajando en
SQL, puede especificar los parámetros de una búsqueda, y todas las
condiciones que regresen serán nulas, falsas o verdaderas, dependiendo de
lo que esté tratando de comparar.
Cuando estés trabajando en los valores booleanos, solo te dará los
resultados cuando la respuesta sea verdadera. Si esta respuesta es falsa o
nula, los datos no se recuperarán para el cliente o para usted. Si obtiene un
valor que es verdadero, podrá ver toda la información que es verdadera.
Un buen ejemplo de esto es cuando el usuario realiza una búsqueda a
través de su base de datos. Si las palabras clave de los productos coinciden
con lo que el usuario está buscando, estas respuestas verdaderas
aparecerán.
Como tienda en línea, usar los valores booleanos será uno de sus mejores
activos. Se asegurará de que pueda obtener los resultados que usted o el
usuario necesitan al realizar una búsqueda. Se asegurará de que aparezcan
los productos correctos en función de las palabras clave que utiliza su
cliente y de que todos los elementos que no coinciden se mantengan
alejados. Podrá usar estas expresiones booleanas para configurar su
sistema y recuperar la información que su cliente realmente está buscando.
No te preocupes si esto suena complejo; El sistema SQL podrá ayudarlo a
hacer esto de una manera sencilla para que sus clientes encuentren las
cosas que desean sin tener que preocuparse o pelearse con el sitio web.
Existen muchas aplicaciones diferentes en las que podrás usar algunas de
las expresiones booleanas en SQL, pero como principiante, este es
probablemente el método que usarás con mayor frecuencia. También
puede usarlo cuando quiera revisar su base de datos y encontrar respuestas
específicas a sus preguntas, o cuando busque en la tienda o programa y
desee encontrar información específica. Cuando agrega parte de esta
información a las tablas en SQL, puede acelerar este proceso más que
nunca.
Como puede ver a través de este capítulo, hay muchos tipos de datos con

30
los que podrá trabajar dentro de SQL para que sus búsquedas y programas
sean más fáciles de usar. Cada tipo de datos funcionará de manera
diferente para que pueda obtener los resultados correctos y más que
necesita.
Además de los comandos, varias otras palabras tienen un significado
especial dentro de SQL. Estas palabras, junto con los comandos, están
reservadas para usos específicos, por lo que no puede usarlas como
nombres de variables ni de ninguna otra forma que difiera de su uso
previsto. Puede ver fácilmente por qué las tablas, columnas y variables no
deben recibir nombres que aparezcan en la lista de palabras reservadas.
Imagine la confusión que causaría una declaración como la siguiente:
SELECCIONE SELECCIONE DE SELECCIONE DONDE
SELECCIONE = DONDE;

Capítulo cuatro: Introducción a los tipos de


datos numéricos

Números absolutos

El tipo de datos numérico le permitirá expresar cada valor que ingrese


como un número. Los siguientes tipos de datos caen en esta categoría:
• Entero
• Bigint (grande)
• Smallint (pequeño)
• Numérico
• Decimal

Tipo de datos entero

El tipo de datos enteros no tiene una parte fraccionaria, y la precisión del

31
número depende únicamente de la implementación de SQL. Debe recordar
que el desarrollador de la base de datos no especifica la precisión. La
precisión de un número se define como el número máximo de dígitos que
puede ingresar para un número.

Tipo de datos Smallint (pequeño)

Smallint es un tipo de entero, y la precisión de este tipo de datos en una


implementación específica no puede ser mayor que la precisión del entero
en la misma implementación. La implementación de los 370 equipos /
sistema IBM representa los tipos de datos INTEGER y SMALLINT
utilizando números binarios de 32 bits y 16 bits. En la mayoría de las
herramientas de base de datos, los tipos de datos INTEGER y SMALLINT
son del mismo tipo.
Si desea que una columna de la base de datos solo contenga datos enteros,
el rango de valores en su columna nunca excederá la longitud del tipo de
datos SMALLINT. Es una buena idea optar por el tipo de datos
SMALLINT, ya que ayuda al sistema de administración de la base de
datos a ahorrar espacio.

Tipo de datos Bigint (grande)

El tipo de datos BIGINT se agregó por primera vez en la versión 2003 de


SQL. Este también es un tipo de datos enteros, y este tipo de datos se
define como un tipo con una precisión mayor que el tipo INTEGER. Dado
que el tipo de datos BIGINT no depende de la implementación, la interfaz
SQL no definirá una precisión exacta.

Tipo de datos numéricos

Puede incluir un componente fraccional para el tipo de datos numérico


aparte del componente entero. También puede especificar la escala y la
precisión del tipo de datos NUMÉRICO. La escala del número en este tipo

32
de datos es el número de dígitos que se pueden incluir después del punto
decimal. La escala nunca puede ser negativa o más grande que la
precisión.
Si declara que una variable tomará un tipo de datos numérico, la
implementación de SQL le dará la escala y precisión exactas. Puede
especificar el tipo de datos numéricos y dejar que SQL use la escala y la
precisión predeterminadas. Alternativamente, puede usar NUMERIC (p) y
solo especificar la precisión y usar NUMERIC (p, s) si desea especificar la
precisión y la escala. Los parámetros p y s serán reemplazados por los
valores.
Por ejemplo, si la precisión para el tipo de datos numéricos es 12 y la
escala es 6, una columna en la base de datos con el tipo de datos numéricos
solo puede contener números hasta 999999.999999. Si especifica el tipo de
datos NUMERIC (10) para cualquier columna, la columna solo puede
contener un máximo de 9999.999999. El parámetro (10) especificará el
número de dígitos que puede incluir en un número. Si especifica el tipo de
datos NUMÉRICO (10,2), la columna seguirá teniendo números con diez
dígitos; sin embargo, dos dígitos estarán al lado derecho del punto
decimal.
El tipo de datos numérico se utiliza para valores como 595.72. Este valor
tiene un límite de 5, que también se denomina precisión, y una escala de 2.
La escala indica el número de dígitos que puede ingresar en el lado
derecho del punto decimal. Puede declarar el tipo de datos como
NUMÉRICO (5,2).

Tipo de datos decimales

El tipo de datos DECIMAL es similar al tipo de datos numéricos. También


puede tener un componente fraccional, y puede especificar la escala y la
precisión. La diferencia es que la precisión de la consulta es siempre
mayor que cuando utiliza el tipo de datos decimal en lugar del tipo de
datos numérico. La herramienta SQL usará un valor predeterminado como
lo hace con un tipo de datos numérico si no especifica la precisión o la
escala.
Si especifica un elemento como NUMÉRICO (5,2), este número nunca
puede ser superior a 999.99. Si especifica el tipo de datos como

33
DECIMAL (5,2), puede ingresar valores hasta el número 999.99. Si el
sistema le permite usar valores más grandes, el DBMS no rechazará esos
valores.
Puede optar por el tipo de datos DECIMAL o NUMÉRICO si tiene
algunos números fraccionarios en sus datos. Solo debe usar INTEGER,
SMALLINT y BIGINT si los datos que utiliza solo consisten en números
enteros. Debe utilizar el tipo de datos numéricos si desea mejorar la
portabilidad. Si define un tipo de datos numérico como NUMÉRICO (5,2),
la interfaz SQL tendrá el mismo rango de valores en cada sistema.

Números aproximados

Algunas cantidades tienen un amplio rango de valores. Esto significa que


una computadora no puede representar todos los valores en los números en
el mismo orden exacto. Los ejemplos de tamaños de registro son 32 bits,
64 bits o 128 bits. En la mayoría de los casos, no es necesario tener un
valor exacto, ya que una aproximación cercana siempre es aceptable. Hay
tres tipos de aproximación que pueden manejar este tipo de datos.

Tipo de datos reales

El tipo de datos REAL le dará un número de punto flotante de precisión


simple, y este número de precisión depende de la implementación. El
hardware que utilice determinará la precisión de este valor. Si utiliza una
máquina de 64 bits, el sistema le dará más precisión en comparación con
una máquina de 32 bits.
Un número de punto flotante es uno que incluye un punto decimal. El
punto decimal aparecerá en diferentes partes en el número dependiendo de
cuál sea el valor del número. Algunos ejemplos son 3.14. 3.4566 y 3.55.

Tipo de datos de doble precisión

La precisión del tipo de datos de doble precisión depende de la


implementación. Este tipo de datos devolverá un número de coma flotante

34
de doble precisión. El significado del mundo DOBLE depende únicamente
de la implementación. Sólo los usuarios científicos utilizan el tipo de datos
de doble precisión. Las diferentes disciplinas científicas requieren
diferentes niveles de precisión, y hay algunas implementaciones de SQL
que se ajustarán a sus necesidades.
En algunos sistemas, el tipo de precisión DOBLE tiene el doble de
capacidad que el tipo de datos REAL tanto para el exponente como para la
mantisa. Nunca obtiene ningún beneficio al representar un número que sea
bastante cercano a un número con un tipo de datos numérico aproximado.
También puede utilizar tipos de datos numéricos exactos, ya que son
números exactos.
Si usa la versión SQL 2003, no tiene que establecer o arbitrar el
significado de DOBLE PRECISIÓN. La única regla aquí es que el número
de DOBLE PRECISIÓN siempre debe ser mayor que el de un número
REAL. Esta restricción es débil pero posiblemente sea una de las
diferencias más comunes que encontrará en el hardware.

Tipo de datos flotante

Debería usar el tipo de datos FLOAT si cree que la base de datos se


moverá a una plataforma de hardware diferente. Debe especificar la
precisión del tipo de datos incluyendo el tamaño del tipo de datos entre
paréntesis. Por ejemplo, puede especificar este tipo de datos de la siguiente
manera: FLOAT (5). Su sistema utilizará operaciones aritméticas de
precisión simple si el hardware que utiliza admite circuitos de precisión
simple. Si especifica una precisión que necesita usar aritmética de doble
precisión, el sistema siempre usará un método aritmético de doble
precisión.
Debe usar el tipo de datos FLOAT en lugar del tipo de DOBLE
PRECISIÓN o REAL, ya que le facilita el transporte de sus bases de datos
a otro hardware. Esto se debe a que el tipo de datos FLOAT le permitirá
especificar la precisión exacta. Tanto para DOBLE como para REAL, la
precisión depende del hardware.
Si no está seguro de si debe usar el tipo de datos numérico exacto o el tipo
de datos numérico aproximado, siempre debe usar el tipo de datos
numéricos exactos. Se debe a que el tipo de datos exacto no utiliza

35
demasiados recursos y siempre le da los resultados exactos en lugar de los
resultados aproximados. Puede utilizar el tipo de datos aproximado si está
seguro de que sus datos son lo suficientemente grandes.

Operadores en SQL

Hay diferentes operadores que puede utilizar en SQL para realizar


diferentes tipos de operaciones en los operandos. Estos operadores son
suma (+), resta (-), multiplicación (*) y división (/). También puede
realizar algunas operaciones en fechas utilizando los operadores de suma y
resta.
Sintaxis
La sintaxis es la siguiente:
SELECCIONAR <expresión> [operador aritmético] <expresión> ...
FROM [table_name]
DONDE [expresión];
En la sintaxis anterior, la expresión se compone de una única constante,
función escalar variable o nombre de columna. Esto también se puede usar
para comparar los valores de una variable con otra variable.

Capítulo cinco: Una introducción a las cadenas


36
de caracteres

Puede almacenar una variedad de información en una base de datos que


incluye sonidos, animaciones e imágenes gráficas. Este capítulo cubre
cierta información sobre los diferentes tipos de datos de caracteres que
puede usar en SQL, y estos se utilizan tan a menudo como los tipos de
datos numéricos.
Hay tres tipos de datos de caracteres principales: datos de caracteres fijos
(CHAR o CHARACTER), tipos de datos de caracteres variables
(VARCHAR o CHARACTER VARYING) y datos de objetos grandes de
caracteres (CLOB o CHARACTER LARGE OBJECT). Hay tres variantes
de estos tipos de caracteres: CARACTER NACIONAL, CARACTERES
NACIONALES QUE VANAN Y OBJETO GRANDE DEL CARÁCTER
NACIONAL.

Tipo de datos del personaje

Si define el tipo de datos para cualquier columna como CHAR o Carácter,


también puede especificar el número de caracteres que la columna puede
contener utilizando la función CHARACTER (x). En esta función, la
variable x define el número de caracteres que puede agregar en la
columna. Si especifica el tipo de datos como CHARACTER (16), solo
puede ingresar un máximo de 16 caracteres en la columna. Si no especifica
ningún argumento, SQL asumirá que solo puede ingresar un carácter con
una longitud de campo de uno. Si ingresa cualquier dato en el campo
CHARACTER con menos caracteres en comparación con el número
especificado, SQL llenará el espacio restante usando espacios en blanco.

Tipo de datos que varían de carácter

El tipo de datos CHARACTER VARYING le permitirá ingresar datos en


una columna con diferentes longitudes, pero debe asegurarse de que SQL
no llene los espacios de caracteres vacíos usando espacios en blanco. Este
tipo de datos también le permitirá almacenar solo la cantidad de caracteres

37
que ingresa. No hay ningún valor predeterminado que exista en SQL para
este tipo de datos. Puede usar el formulario VARCHAR (x) y
CHARACTER VARYING (x) si desea especificar este tipo de datos. La x
en los paréntesis es el número máximo de caracteres que puede ingresar.
Tipo de datos de objetos grandes de caracteres

Solo en la versión SQL 1999 se introdujo el OBJETO GRANDE DE


CARÁCTER (CLOB). Este tipo de datos es una gran cadena de caracteres
que es muy grande para el tipo de datos de caracteres. Los CLOB tienen
los mismos atributos que las cadenas de caracteres normales, pero hay
muchas restricciones sobre cómo puede usar este tipo de datos. Puede
utilizar un CLOB en una CLAVE EXTRAÑA, un predicado ÚNICO y una
CLAVE PRIMARIA. No puede utilizarlo para ninguna operación de
comparación o funciones. Debido a su gran tamaño, la mayoría de las
aplicaciones no transfieren los CLOBS de una base de datos a otra. Puede
utilizar el localizador CLOB para manipular cualquier información CLOB.
Este es un parámetro cuyo valor se identificará con un objeto de caracteres
grandes.

Tipo de datos de carácter nacional, variación nacional


y carácter grande Objeto grande

Cada idioma tiene caracteres diferentes. Por ejemplo, los idiomas inglés y
alemán difieren en el sentido de que algunos caracteres en inglés no
estarán presentes en alemán, y viceversa. Por ejemplo, si usa un juego de
caracteres en inglés como su configuración predeterminada en su sistema,
puede usar los juegos de caracteres alternativos porque los tipos de datos
NATIONAL CHARACTER VARYING, NATIONAL CHARACTER
LARGE OBJECT y NATIONAL CHARACTER funcionan de la misma
manera que CARACTER VARYING. Tipos de datos de CHARACTER
LARGE OBJECT y CHARACTER. Debe recordar que el conjunto de
caracteres que especifique es muy diferente de un conjunto de caracteres
predeterminado. Sin embargo, puedes usar diferentes juegos de caracteres
si lo deseas. Veamos los siguientes ejemplos de uso de conjuntos de
caracteres múltiples:

38
CREAR TABLA XLATE
(
LENGUAJE _1 CARÁCTER (40),
LENGUAJE _2 CHARACTER VARYING (40) CHARACTER SET
GRIEGO,
IDIOMA_3 CARÁCTER NACIONAL (40),
LENGUAJE_4 CHARACTER (40)
JUEGO DE PERSONAJES KANJI
);
La columna Idioma_1 contendrá los caracteres que se incluyen en el
conjunto de caracteres predeterminado. El Idioma_3 solo contendrá los
caracteres en el conjunto de caracteres nacional, la columna Idioma_4 solo
tendrá caracteres kanji, y la columna Idioma_2 solo contendrá caracteres
griegos.

Booleanos

El tipo de datos booleano solo devuelve valores verdaderos o falsos. Si


utiliza un operador booleano y compara ese tipo de datos con un valor
desconocido o un valor nulo, el resultado siempre será el valor
desconocido o nulo.

39
Capítulo seis: Una introducción a los tiempos
de datos

Hay cinco tipos de datos estándar en la versión 2003 de SQL, que tratan
con la hora y las fechas. Todos estos tipos se llaman tiempos de datos o
tipos de datos de fecha y hora. También debe considerar la superposición
que existe entre estos tipos de datos, por lo que es importante que aprenda
cómo implementar estos tipos de datos.
Una implementación que no sea totalmente compatible con estos tipos de
datos para todas las fechas y horas experimentará problemas si desea
cambiar de una implementación a otra. Si no está seguro de cómo migrar
entre los tipos de datos, debe verificar el origen y la implementación de
destino que representarán las fechas y horas.

Fecha Tipo de datos

Este tipo de datos almacenará los valores de año, día y mes de una fecha.
La longitud de este tipo de datos es cuatro, dos y dos para el año, mes y
día, respectivamente. Puede usar este tipo de datos para representar una
fecha entre 0001 y 9999. El tipo de datos tiene diez posiciones, y los datos
se pueden ingresar en el siguiente formato: 1957-06-10. Como SQL

40
representa los cuatro dígitos del año, no enfrentó los problemas que
enfrentaron otros lenguajes de base de datos cuando se incluyó el año
2000.

Hora sin tipo de datos de zona horaria

La hora sin tipo de datos de zona horaria almacenará cada valor de hora,
incluida la hora, los minutos y los segundos. Las horas y los minutos se
representarán con números enteros, pero el valor del segundo puede ser un
valor simple, doble o fraccional. Por lo tanto, este tipo de datos
representará un tiempo de 20 minutos y 45.366 segundos pasadas las 8
a.m. en el siguiente formato: 08: 20: 45.366.
La precisión de cada tipo de datos fraccionados solo depende de la
implementación, pero puede contener seis dígitos. El tiempo sin valor de
zona horaria puede ocupar solo ocho posiciones, incluidos los dos puntos.
Esto solo puede suceder si no incluye una parte fraccionaria. El tipo de
datos tendrá nueve posiciones si incluye un dígito fraccionario. Puede usar
el tipo de datos HORA SIN ZONA HORARIA como HORA en la que no
incluye dígitos fraccionarios o usar la ZONA HORA SIN TIEMPO (p)
donde puede definir la cantidad de dígitos que desea tener a la derecha del
punto decimal. El ejemplo del párrafo anterior representará el tipo de datos
TIEMPO SIN ZONA HORARIA (3).

Marca de tiempo sin tipo de datos de zona horaria

El tipo de datos TIMESTAMP WITHOUT TIME ZONE (SELLO DE


TIEMPO SIN ZONA HORARIA) incluirá la información de fecha y hora.
Este tipo de datos tiene las mismas longitudes y restricciones que los tipos
de datos TIME WITHOUT TIME ZONE y DATE. Sin embargo, hay una
diferencia: la parte fraccionaria del componente TIMESTAMP WITHOUT
TIME ZONE solo puede contener seis dígitos. No puede incluir un cero. Si
no hay dígitos fraccionarios en la fecha, la longitud de la ZONA DE
TIEMPO SIN TIEMPO DE TIMESTAMP (SELLO DE TIEMPO) tiene
diecinueve posiciones donde diez posiciones son para la fecha; Se utiliza
un espacio como separador y las ocho posiciones para el tiempo. Si hay

41
algún dígito fraccionario en el valor, la longitud del tipo de datos será de
veinte dígitos, incluidos los dígitos fraccionarios. La vigésima posición del
tipo es solo para el punto decimal. Puede especificar el campo como
TIMESTAMP SIN ZONA HORARIA utilizando TIMESTAMP SIN
ZONA HORARIA (p) y TIMESTAMP SIN ZONA HORARIA. Aquí el
valor de p determina el número de posiciones fraccionarias, y este valor no
puede ser negativo. La implementación del tipo de datos determinará el
valor máximo que puede tomar cualquier valor.

Hora con tipo de datos de zona horaria

Este tipo de datos es como el tipo de datos de hora sin huso horario, con la
excepción de que el tipo de datos anterior agregará información sobre el
desplazamiento desde la hora media de Greenwich o GMT. El valor de
este desplazamiento puede variar desde cualquier lugar entre -12: 59 o
+13: 00. La información adicional tomará seis posiciones más después del
tiempo. La información adicional siempre va seguida de un guión que se
utiliza como separador. Este separador va seguido por un signo más o
menos y el desplazamiento en horas y minutos que toman dos dígitos cada
uno. Habrá dos puntos entre horas y minutos. Si no hay una parte
fraccionaria en el tiempo con el valor de zona horaria, el tipo de datos
tiene una longitud de catorce posiciones. Si especifica la parte fraccionaria,
entonces la longitud del campo es de quince posiciones de longitud y un
número adicional de dígitos para la parte fraccionaria del tipo de datos.

Sello de tiempo con tipo de datos de zona horaria

La marca de tiempo con el tipo de datos Zona horaria es la misma que la


marca de tiempo sin el tipo de datos de zona horaria. La única excepción
es que este tipo de datos incluye la información de desplazamiento de la
hora universal. Esta información adicional ocupará posiciones de más de
seis dígitos después de la marca de tiempo. Si incluye los datos de zona
horaria sin parte fraccionaria, incluirá veinticinco posiciones. Si incluye
los datos de zona horaria con una sección fraccionaria, puede usar
veintiséis posiciones y el número de dígitos fraccionarios para las partes

42
del tipo de datos que incluyen una parte fraccionaria.

Capítulo Siete: Una Introducción a los


Intervalos

El tipo de datos de intervalo es similar al tipo de datos de fecha y hora en


SQL. El intervalo se calcula como la diferencia entre dos números o
valores de fecha y hora. En la mayoría de las aplicaciones, siempre debe
poder calcular el intervalo entre dos horas o fechas. Puede usar dos tipos
de tipos de datos de intervalo en SQL, a saber, el intervalo diurno y el
intervalo de año a mes. La cantidad de años y meses entre dos fechas se
denomina intervalo año-mes, y la cantidad de días, minutos, horas y
segundos entre dos eventos o instancias en un período específico se
denomina intervalo diurno. No puede combinar los cálculos que implican

43
un intervalo diurno con un intervalo de mes a año, ya que los meses varían
en duración (28, 29, 30 y 31 días).

Tipo de fila

El tipo de datos ROW se introdujo en la versión 1999 de SQL y es un tipo


de datos un poco difícil de entender. Probablemente no lo uses si eres un
principiante. La gente pudo trabajar con SQL muy bien antes de que se
introdujera este tipo de datos.
Una cosa notable acerca de este tipo de datos es que no sigue las reglas de
normalización. E.F. Codd definió la teoría de la normalización cuando se
construyeron por primera vez las bases de datos relacionales. Una tabla en
la forma normal nunca puede tener múltiples valores en una fila de tabla.
Cada campo solo puede contener un valor. El tipo de datos ROW le
permite almacenar mucha información en un campo o en una sola fila en
una tabla. Esto significa que puede anidar información dentro de una fila
usando este tipo de datos.
La siguiente declaración SQL muestra cómo puede usar el tipo de datos
ROW para almacenar la información personal de una persona:
CREAR TIPO DE FILA addr_typ
(
Calle CARACTER VARIANDO (25)
Ciudad que varía el carácter (20)
CARÁCTER ESTATAL (2)
Código postal CARACTER VARYING (9)
);
Una vez definido, el nuevo tipo ROW se puede utilizar en una definición
de tabla:
CREAR TABLA CLIENTE (
CLAVE INTEGER CLAVE PRIMARIA,
Apellido CARACTER VARYING (25),
Nombre del personaje que varía (20),

44
Dirección addr_typ Teléfono
CARACTER VARIANDO (15)
);
La ventaja aquí es que si mantiene la información de la dirección de varias
entidades, como clientes, proveedores, empleados y accionistas, solo tiene
que definir los detalles de la especificación de la dirección una vez, en la
definición de tipo ROW.

Tipos de colección

Fue solo en el año 1999 que las personas podrían violar la forma normal en
SQL ya que podían ingresar una colección de objetos en un campo en
lugar de solo uno. El tipo de datos ARRAY se introdujo en 1999 y el tipo
de datos MULTISET se introdujo en 2003.
Puede comparar estas colecciones entre sí si son del mismo tipo de datos.
Esto se debe a que las variables en una matriz siguen un orden de
elementos, y puede comparar los elementos correspondientes en otra
matriz. Un conjunto múltiple no sigue un orden de elementos definido,
pero puede comparar los valores si existe una enumeración para cada
conjunto múltiple que está comparando. En este caso, puede emparejar las
enumeraciones para compararlas.
Tipo de matriz
A diferencia del tipo de datos de fila, el tipo de datos de matriz viola la
primera forma normal. El tipo ARRAY no es un tipo de datos como
CHARACTER o NUMERIC, pero es un tipo de datos de recopilación. El
tipo de Array permite que un campo tenga múltiples valores del mismo
tipo de datos. Supongamos que su organización desea ponerse en contacto
con los clientes independientemente de si están en la carretera, en casa o
en el trabajo. Puede mantener varios números de teléfono para sus clientes
declarando una matriz. La siguiente sintaxis le muestra cómo puede hacer
lo mismo.
CREAR TABLA CLIENTE
(
CLAVE INTEGER CLAVE PRIMARIA,

45
Apellido CARACTER VARYING (25),
Nombre del personaje que varía (20),
Dirección addr_typ
Teléfono CARACTER VARYING (15) ARRAY [3]
);
En el ejemplo anterior, la notación de matriz [3] indica que puede ingresar
tres números de teléfono en la tabla de CLIENTES en cada fila. Estos
números de teléfono representan un ejemplo del grupo que se repite. En la
teoría clásica de bases de datos relacionales, no se pueden repetir grupos.
Las matrices están ordenadas de manera que el elemento en la matriz está
asociado con una posición ordinal en esta matriz. Tipo Multiset
Un conjunto múltiple no es una colección ordenada de datos, y los
elementos de un conjunto múltiple no siempre pueden ser referenciados.
Esto es porque no se les da una posición ordinal en el conjunto.

Tipos de REFERENCIA

Los tipos REF no forman parte de la herramienta SQL real. Esto significa
que el DBMS puede cumplir con las últimas versiones de SQL sin el uso
del tipo REF de esa manera. El tipo REF no es como el tipo de datos
CHARACTER y NUMERIC, lo que significa que no es un tipo de datos
distinto. Se utiliza como puntero a un tipo de fila, tipo de datos abstractos
o un elemento de datos que está en una fila en la tabla. Cuando elimine la
referencia de un puntero, puede recuperar el valor almacenado en la
ubicación de destino. Si desea utilizar el tipo REF, debe estar bien versado
en programación orientada a objetos (OOP).

Tipos definidos por el usuario

Los tipos definidos por el usuario fueron otra característica introducida en


1999, y estos provienen del mundo de la programación orientada a objetos.
Si solo programa con SQL, nunca estará restringido a los tipos de datos
que se definen en las versiones posteriores de SQL. Ahora puede definir

46
sus propios tipos utilizando el principio de los tipos de datos abstractos que
se encuentran en los lenguajes de programación orientados a objetos.
Un beneficio importante del UDT es que puede usarlos para eliminar la
falta de coincidencia de impedancia entre el lenguaje principal que usa
SQL y SQL. Un problema importante con SQL es que los tipos de datos
predefinidos nunca coinciden con los tipos de datos utilizados en los
idiomas de host. Cuando utiliza UDT, puede crear un tipo de datos en SQL
que coincidirá con el tipo de datos que se encuentra en el idioma del host.
El UDT tiene algunos métodos y atributos. El usuario puede ver el método
y los atributos en un UDT, pero la implementación de estos métodos y
atributos no se mostrará al usuario. Puede restringir el acceso a los
métodos y atributos especificando si son privados, protegidos o públicos.
Los atributos y métodos privados solo están disponibles para el UDT, los
métodos protegidos y los atributos están disponibles para el UDT y su
subtipo y los métodos y atributos públicos están disponibles para todos los
usuarios. Hay dos tipos de UDT: tipos distintos y tipos estructurados.

Tipos distintos

Un tipo distinto es una de las formas más simples del tipo de datos
definidos por el usuario. La característica definitoria de este tipo es que
puede expresarlo como un solo tipo de datos. Este tipo se construye a
partir de un tipo de datos predefinido que se llama el tipo de origen.
Incluso si hay muchos tipos distintos que provienen del mismo tipo de
fuente, no se pueden comparar. Por ejemplo, puede usar un tipo distinto
para diferenciar entre numerosas monedas. Consideremos el siguiente
ejemplo:
CREAR TIPO DISTINTO USdollar COMO DECIMAL (9,2);
En el ejemplo anterior, estamos creando un nuevo tipo de datos para la
variable USdollar utilizando el tipo de datos decimal predefinido. Puede
crear otro tipo distinto de una manera similar.
CREAR UN TIPO DISTINTO Euro COMO DECIMAL (9,2);
Ahora creamos una tabla que usará estos tipos:
CREAR TABLA USInvoice (
CLAVE INTEGER PRIMARIO,

47
INTEGER DE CUSTID,
EmpID INTEGER,
TotalSale USdollar,
Impuesto USdollar,
Envio USdollar,
GrandTotal USdollar
);
CREAR TABLA EuroInvoice
(
CLAVE INTEGER PRIMARIO,
INTEGER DE CUSTID,
EmpID INTEGER,
TotalSale Euro,
Impuesto euro
Euro de envío,
GrandTotal Euro
);
Los tipos de dólar estadounidense y euro se basan en el tipo de datos
decimales predefinidos, pero no puede comparar las instancias de una con
otra. Solo puedes comparar los tipos una vez que conviertas los datos a la
misma moneda.

Tipos estructurados

El tipo estructurado es otro tipo de tipo de datos definido por el usuario, y


esto se expresa como una lista de métodos y definiciones de atributos que
se basan en un tipo de datos de origen predefinido.

Constructores

48
El DBME siempre crea una función de constructor cuando crea un tipo de
datos estructurado definido por el usuario. Esta función constructora tendrá
el mismo nombre que el tipo definido por el usuario. La función del
constructor es inicializar todos los atributos en el UDT estructurado y
declarar los valores como los valores predeterminados.

Mutador y observador

Si crea un UDT estructurado, SQL creará una función de observador y una


función de mutador. El último cambiará los valores de cada atributo en el
UDT estructurado, mientras que el primero solo recuperará los valores de
los atributos en el UDT estructurado. También puede utilizar las funciones
de observador en una instrucción SELECT si desea recuperar valores.

Subtipos y supertipos

Puede haber una relación jerárquica entre dos atributos en un UDT


estructurado. Por ejemplo, el UDT MusicCDudt estructurado tiene dos
subtipos: RockCDudt y ClassicalCDudt. En este caso, el tipo MusicCDudt
es un supertipo.

49
Capítulo ocho: Administrar los objetos en su
base de datos

Hasta ahora, en esta guía, nos hemos tomado un tiempo para revisar los
tipos de datos con los que puede trabajar dentro de su base de datos dentro
de SQL e incluso nos tomamos un tiempo para mirar los comandos con los
que puede trabajar para asegúrese de que sus consultas y más van a
funcionar dentro de la base de datos. Ahora estamos listos para comenzar a
aprender algunos de los pasos con los que necesita trabajar cuando intenta
administrar los objetos en su base de datos. Algunos de los diferentes
objetos de los que vamos a hablar y que son buenos para usar en la base de
datos incluyen sinónimos, secuencias, grupos, tablas, vistas y tablas.
Veamos algunos de estos ejemplos y aprendamos cómo puede administrar
algunos de los diferentes objetos que se encuentran en su base de datos.

El esquema

Cuando esté trabajando en el esquema con su SQL, debe pensar que utiliza
un conjunto de objetos que están dentro de la base de datos, pero que están
vinculados a uno solo, en lugar de a todos, de los usuarios de la base de
datos. Este usuario en particular será el propietario del esquema, y
establecerán los objetos, que se vincularán al nombre de usuario del
propietario. Por ejemplo, cualquier persona, especialmente el usuario,
podrá generar el objeto y, cuando lo haga, podrá generar sus propios
esquemas. Esto le dará más control sobre los objetos que están en la base
de datos, como los que puede cambiar, eliminar, generar o manipular.
Esto será agradable y útil para las personas que intentan usarlo para
realizar algunos cambios en la cuenta. Por ejemplo, veremos cuándo un
nuevo cliente está intentando configurar una cuenta para su tienda. Esto es
algo para lo que se inscribirán, y pueden elegir su propia contraseña y
nombre de usuario aprobados por usted, el administrador, del sistema. Una
vez que la cuenta esté configurada, podrán realizar algunos cambios según
sea necesario, incluido el cambio de su dirección, la elección de una nueva

50
opción de pago e incluso realizar cambios en los artículos que están
ordenando. Cada vez que quieran ingresar a la cuenta, solo necesitarán
usar el nombre de usuario y la contraseña que configuraron, y pueden
meterse en la cuenta todo lo que quieran.
Veamos un poco mejor cómo funcionará esto al poner un ejemplo.
Digamos que usted es la persona que tiene las credenciales necesarias para
iniciar sesión; Para este ejemplo, vamos a utilizar el nombre de usuario
PERSON1. Podrás decidir qué quieres colocar dentro de esta base de datos
e incluso puedes crear una tabla nueva, para esta la llamaremos
EMPLEADOS_TBL. Cuando luego ingrese a los registros, notará que para
esta nueva tabla, se llamará PERSONA1 EMPLEADOS_TBL; así es como
otros también verán el nombre de la tabla, para que sepan quién creó la
tabla. El esquema será el mismo para cada persona que creó esta tabla y la
posee.
Cuando desee acceder a un esquema que ya posee, no es necesario que use
el nombre del esquema; simplemente tendrá que levantarlo por su nombre.
Entonces, para el ejemplo que hicimos antes, solo necesitarías llamar a
EMPLEADOS_TBL, pero si deseas obtener un esquema de otro lugar,
también deberás incluir el nombre de usuario.

Creando una tabla nueva

Cuando está creando algo en una base de datos, debe asegurarse de que
está trabajando en tablas que podrán almacenar parte de la información
que desee. Crear algunas de estas tablas es fácil, y podrá agregar la
información cuando lo necesite. Cuando esté listo para comenzar con una
tabla nueva, solo necesita usar el comando "CREAR TABLA". Luego
puede abrir la tabla, pero hay algunos otros pasos que se necesitan para
crear esta tabla y hacer que se vea bien y tenga la información correcta que
necesita.
Antes de crear esta nueva tabla, debe considerar qué le gustaría hacer con
esta tabla, por ejemplo, qué tan grande le gustaría que fuera la tabla, qué le
gustaría poner dentro y en qué estará la organización. Casi todos los tipos
de SQL que va a utilizar tendrán caracteres que puede usar si desea
terminar o enviar una declaración al servidor. Un punto y coma es bueno
para usar cuando se trabaja en ORALE, pero la versión Transact-SQL

51
usará el comando GO. Básicamente, cuando esté listo para comenzar en
una tabla, simplemente escriba CREAR TABLA y luego complete todo y
estará listo para comenzar.

Creando una nueva tabla con una que ya existe

Hay ocasiones en las que desea tomar la información de una tabla y crear
una nueva. Esto es posible cuando está utilizando la programación SQL;
solo necesitas usar los comandos correctos para que esto suceda. Los
comandos que se necesitan incluyen SELECCIONAR y CREAR TABLA.
Una vez que tenga tiempo de usar uno de estos dos comandos, verá que la
tabla completamente nueva tiene el mismo tipo de definiciones y
parámetros que la tabla anterior. Esta es una característica a la que puede
hacer algunas personalizaciones para poder elegir qué información irá de
una tabla a otra.
Si desea tomar una de sus tablas y usarla para crear una tabla nueva,
deberá usar la siguiente sintaxis:
CREAR TABLA NEW_TABLE_NOMBRE COMO
SELECCIONAR [“| COLUMNA1, COLUMNA2]
Ejemplo 1
Vamos a construir una tabla para almacenar la información sobre el clima.
Debe asegurarse de no tener repetición en los datos. Antes de ver las
respuestas a continuación, intente escribir el código.
Crear la estación de mesa
(ID ENTERO CLAVE PRIMARIA,
CIUDAD CHAR (20),
ESTADO CHAR (2),
LAT_N REAL,
LARGO_W REAL);
Ejemplo 2
Supongamos que ya se ha creado una tabla llamada "Estación". Ahora,
agregue tres filas en esta tabla. Esta información debe ser sobre las
estaciones de tren en diferentes partes de los Estados Unidos.

52
INSERTE VALORES DE ESTACIÓN (13, 'Phoenix', 'AZ', 33, 112);
INSERTE VALORES DE ESTACIÓN (44, 'Denver', 'CO', 40, 105);
INSERTE VALORES DE ESTACIÓN (66, 'Caribou', 'ME', 47, 68);

Ejercicio

Cree una base de datos que contenga la información para una empresa de
computadoras. El esquema de la base de datos debe tener las siguientes
tablas:
1. PC (Código, modelo, velocidad, RAM, HD, CD, Precio)
2. Producto (Fabricante, Modelo, Tipo)
3. Impresora (Código, Modelo, Color, Tipo, Precio)
4. Laptop (Código, Modelo, Velocidad, RAM, HD, Pantalla, Precio)
La tabla de productos proporciona información sobre el fabricante, el
número de modelo y el tipo de producto que está disponible. Los números
de modelo en la tabla de productos son únicos para todos los tipos de
productos y fabricantes. Cada computadora está identificada por un código
único y se caracteriza por el modelo, la velocidad del procesador, la
capacidad de RAM, la capacidad del disco duro, la velocidad del CD Rom
y su precio. La mesa del portátil es similar a la mesa de la PC, excepto que
usamos el tamaño de la pantalla en lugar de la velocidad del CD ROM.
Para cada modelo en la tabla de la impresora, se especifican su tipo de
salida, color y tecnología de impresión (láser, chorro o matriz).

53
Capítulo Nueve: Recuperando Datos

En lo que debería estar realmente interesado es en los datos que se le


proporcionan y no en la estructura de la base de datos. Desea hacer cuatro
cosas con datos: agregarlo a las tablas, recuperarlo y mostrarlo, cambiarlo
y eliminarlo de las tablas.
En principio, la manipulación de la base de datos es bastante simple.
Siempre puede agregar datos a la base de datos o las tablas dentro de la
base de datos, ya sea en un lote o fila tras fila. Eliminar, modificar o
recuperar tablas son tareas que son fáciles de realizar. El principal desafío
para la manipulación de la base de datos es seleccionar las filas que desea
cambiar, eliminar o recuperar. A veces, recuperar datos es como tratar de
armar un rompecabezas con piezas que se mezclan con piezas de otros cien
rompecabezas. Los datos que desea pueden residir en una base de datos
que contiene un gran volumen de datos que no desea. Afortunadamente, si
puede especificar lo que desea mediante una instrucción SELECT de SQL,
la computadora hace toda la búsqueda por usted.

Recuperando datos

54
La tarea de manipulación de datos que los usuarios realizan con mayor
frecuencia es recuperar la información seleccionada de una base de datos.
Es posible que desee recuperar el contenido de una fila de miles en una
tabla. Es posible que desee recuperar todas las filas que satisfacen una
condición o una combinación de condiciones. Es posible que incluso desee
recuperar todas las filas de la tabla. Una instrucción SQL en particular, la
instrucción SELECT, realiza todas estas tareas por usted.
El uso más simple de la instrucción SELECT es recuperar todos los datos
en todas las filas de una tabla especificada. Para hacerlo, usa la siguiente
sintaxis:
SELECCIONAR * DEL CLIENTE;
El asterisco (*) es un carácter comodín que significa todo. En este
contexto, el asterisco es un sustituto abreviado de una lista de todos los
nombres de columna de la tabla CLIENTE. Como resultado de esta
declaración, todos los datos en todas las filas y columnas de la tabla
CLIENTE aparecen en pantalla.
Las sentencias SELECT pueden ser mucho más complicadas que las
sentencias de este ejemplo. De hecho, algunas declaraciones SELECT
pueden ser tan complicadas que son virtualmente indescifrables. Se pueden
incluir varias cláusulas de modificación en una declaración básica que da
lugar a la complejidad potencial mencionada anteriormente. En este
capítulo, analizo brevemente la cláusula WHERE, que es el método más
utilizado para restringir las filas que devuelve una instrucción SELECT.
Una instrucción SELECT con una cláusula DONDE tiene la siguiente
forma general:
SELECCIONAR column list FROM table_name
DONDE condición;
La lista de columnas especifica qué columnas desea mostrar. La
declaración muestra solo las columnas que usted lista. La cláusula FROM
especifica de qué tabla desea mostrar las columnas. La cláusula WHERE
excluye las filas que no satisfacen una condición específica. La condición
puede ser simple (por ejemplo, DONDE CLIENTE_ESTADO = ‘NH’), o
puede ser compuesta (por ejemplo, DONDE CLIENTE_ESTADO = ’NH’
Y STATUS = ‘Active’).

55
El siguiente ejemplo muestra una condición compuesta dentro de una
instrucción SELECT:
SELECCIONE Nombre, Apellido, Teléfono DEL CLIENTE
DONDE Estado = ‘NH’
Y Estado = 'Activo';
Esta declaración devuelve los nombres y números de teléfono de todos los
clientes activos que viven en New Hampshire. La palabra clave AND
significa que para que una fila reúna los requisitos para la recuperación,
esa fila debe cumplir con ambas condiciones: Estado = "NH" y Estado =
"Activo".
Ejemplo 1
Vamos a recuperar la información en las estaciones de tabla.
SELECCIONAR * DE ESTACIÓN;
La salida será
ID CIUDAD ESTADO LAT_N LONG_W
13 Phoenix AZ 33 112
44 Denver CO 40 105
66 Caribou ME 47 68

Ejemplo 2
En este ejemplo recuperaremos la información de las estaciones que están
en el Norte.
SELECCIONAR * DE ESTACIÓN
DONDE LAT_N> 39.7;
La salida será
ID CIUDAD ESTADO LAT_N LONG_W
44 Denver CO 40 105
66 Caribou ME 47 68

Ejemplo 3
En este ejemplo, solo recuperaremos la ID, Ciudad y Estado.

56
SELECCIONAR ID, CIUDAD, ESTADO DE LA ESTACIÓN;
La salida será
ID CIUDAD ESTADO
13 Phoenix AZ
44 Denver CO
66 Caribou ME

Ejemplo 4
En este ejemplo, recuperaremos la ID, ciudad y estado de las estaciones en
el norte de los Estados Unidos.
SELECCIONAR ID, CIUDAD, ESTADO DE LA ESTACIÓN
DONDE LAT_N> 39.7;
La salida será
ID CIUDAD ESTADO
44 Denver CO
66 Caribou ME

Ejercicio

Cree una tabla que almacene la temperatura normalizada e información


sobre la precipitación. Usa la siguiente información para crear tu tabla:
1. El campo ID debe coincidir con el ID en Table Station
2. Necesita aplicar el rango para los otros valores en la tabla
3. No duplique las combinaciones de mes e ID.
4. La temperatura debe estar en grados Fahrenheit
5. La lluvia debe medirse en pulgadas.
Una vez que haya creado la tabla, realice las siguientes operaciones:
1. Completar información para los meses de enero y julio.
2. Recuperar toda la información de la tabla.
3. Unir las dos mesas.

57
4. Recupere información sobre las estaciones que ordenan la
información por mes y las mayores precipitaciones
5. Recuperar información sobre la temperatura en julio.
6. Consulta para mostrar las temperaturas máximas y mínimas.
7. Consulta para convertir Fahrenheit a Celsius usando una nueva
vista
8. Consulta para mostrar estaciones con una temperatura promedio
mayor a 50 grados.
9. Recuperar los datos de la nueva vista.
Las soluciones para este ejercicio se dan al final de este capítulo. Antes de
ver las soluciones, trate de responder las preguntas.

Creando Vistas

La estructura de la base de datos ayuda a maximizar la integridad de los


datos. Esto es solo si usted construye la base de datos basándose en
algunos principios sólidos. La estructura no es la mejor manera de mirar o
ver los datos, ya que diferentes aplicaciones usarán los mismos datos pero
para un propósito diferente. Es posible que deseen ver solo algunos
aspectos de los datos cuando desean realizar algún análisis. Una
característica importante de SQL es que puede mostrar diferentes vistas de
los datos en la base de datos, independientemente de cómo se almacenan
los datos en la base de datos. Las tablas que utiliza para generar las filas y
columnas en una vista forman la tabla base. Esta sección analizará cómo
puede usar las vistas para recuperar y manipular datos en la base de datos.
Siempre recibirá una tabla virtual cuando use la instrucción SELECT. Una
vista es un tipo de tabla virtual, y cada vista es diferente de otras vistas, ya
que los metadatos en la base de datos contienen toda la información sobre
una vista. Esta distinción le permite manipular una vista sin tener que
preocuparse por ninguna otra vista o la base de datos principal. El único
problema con el uso de una vista es que no es una entidad independiente,
ya que deriva su información de la tabla o tablas de las que obtiene la
información. Cada aplicación puede tener una vista única de los mismos
datos.

58
Veamos el siguiente ejemplo: una base de datos de VetLab contiene la
siguiente información: CLIENTE, PRUEBAS, EMPLEADOS, PEDIDOS
y RESULTADOS. Si el gerente de marketing o el director ejecutivo
deseaban comprender de dónde provienen los pedidos, deberá extraer
información de diferentes tablas, especialmente las tablas de CLIENTES y
PEDIDOS. Si el oficial de control de calidad quería verificar cuál era el
tiempo de respuesta de una solicitud, deberá obtener la información de las
tablas CLIENTE, ORDEN y RESULTADOS. Solo deberán crear una vista
que les permita analizar la información necesaria.

Añadiendo datos

Una tabla de base de datos está siempre vacía. Una vez que haya creado
una tabla utilizando el DDL de SQL o una herramienta RAD, esa tabla no
contiene más que la celda estructurada. Si desea poner la tabla en uso,
tendrá que agregarle datos. Los datos que tiene pueden no estar
almacenados en formato digital.
• Si sus datos aún no están en formato digital, es probable que
alguien tenga que ingresar los datos manualmente, un registro a la
vez. También puede ingresar datos utilizando escáneres ópticos y
sistemas de reconocimiento de voz, pero el uso de tales dispositivos
para el ingreso de datos es relativamente raro.
• Si sus datos ya están en formato digital pero quizás no en el
formato de las tablas de base de datos que utiliza, debe traducir los
datos al formato apropiado y luego insertar los datos en la base de
datos.
• Si sus datos ya están en formato digital y en el formato correcto,
están listos para transferirlos a una nueva base de datos.
Dependiendo de la forma actual de los datos, es posible que pueda
transferirlos a su base de datos en una sola operación, o que deba ingresar
los datos un registro a la vez. Cada registro de datos que ingresa
corresponde a una sola fila en una tabla de base de datos.

Añadiendo una fila a la vez

59
La mayoría de los sistemas de gestión de bases de datos permiten al
usuario ingresar datos cuando sea necesario. Esta característica le permitirá
crear un formulario que tiene un nombre de campo. Las etiquetas de
campo en el formulario le darán la oportunidad de determinar qué tipo de
datos pueden ingresar al campo. El operador de ingreso de datos luego
ingresará la información en una sola fila en el formulario. Una vez que el
DBMS acepte los datos ingresados por el usuario, se borrará el
formulario, lo que permitirá al usuario hacer otra entrada. Esto permitirá al
usuario ingresar una fila en el sistema a la vez.
Una entrada basada en formulario es menos susceptible de errores y es
fácil cuando se compara con el uso de una lista que tiene valores
delimitados por comas. El único problema con una entrada basada en
formulario es que los valores no tienen que seguir un estándar específico.
Esto se debe a que cada DBMS tiene diferentes propiedades que un
usuario puede usar cuando está creando el formulario. La diversidad no
causa un problema con la entrada de datos. El desarrollador de la
aplicación siempre debe tratar de comprender cualquier cambio que se
realice en el formulario. Hay ocasiones en que algunas herramientas de
DBMS no le permiten realizar algunas verificaciones de validez en los
datos que ingresa un usuario.
La mejor manera de mantener un alto nivel de integridad de datos en una
base de datos es mantener los datos erróneos fuera de la base de datos.
Cuando ingresa algunas restricciones para diferentes campos, puede evitar
la entrada de datos incorrectos o incorrectos. Este enfoque le permite
asegurarse de que la base de datos solo acepte valores de datos del tipo
correcto y que se encuentren dentro de un rango predefinido. La aplicación
de tales restricciones no puede evitar todos los errores posibles, pero sí
captura algunos de ellos.
Si la herramienta DBMS que está utilizando no le permite realizar algunas
verificaciones de validez en los datos, debe crear otra pantalla e ingresar
las variables necesarias en la pantalla. A continuación, debe comprobar las
entradas utilizando cualquier código de programa. Cuando esté seguro de
que los valores ingresados son correctos y válidos para todos los campos
de la tabla, puede agregar más filas mediante el comando SQL INSERT.
Cuando desee ingresar una sola fila en la base de datos o en la tabla, puede
usar la siguiente sintaxis:

60
INSERTE EN LA tabla_1 [(column_1, column_2, ..., column_n)]
VALUES (value_1, value_2, ..., value_n);
Puede elegir enumerar los nombres de columna entre los corchetes ([]).
Debe recordar que la lista que proporciona en la sintaxis anterior es el
orden de las columnas que estarán en su tabla. Debe colocar los valores en
la tabla en el mismo orden, para asegurarse de que los valores de escritura
van a las columnas. Si desea que solo algunos valores ingresen a la tabla,
debe enumerar el nombre de la columna donde desea ingresar el valor.
Esto le dirá a la herramienta que un valor específico solo debe estar
presente en esa columna. Si desea ingresar un registro en una tabla de
CLIENTES, debe usar la siguiente sintaxis: INSERTAR EN EL CLIENTE
(
CustomerID, Nombre, Apellido, Calle, Ciudad, Estado, Código postal,
Teléfono
)
VALORES
(: vcustid, 'David', 'Taylor', '235 Nutley Ave.', 'Nutley', 'NJ', '07110', ''
(201) 555-1963 ''
);
El primer valor en la tabla es vcustid, que es la clave principal. Esta clave
asegurará que no haya duplicación de datos en la tabla. El valor vcustid se
ingresa en la columna CustomerID. Dado que la columna CustomerID es
la clave principal de la tabla completa, los valores de esta columna siempre
deben ser únicos. Las columnas restantes pueden contener otros datos
según las instrucciones que se proporcionan a la herramienta. También
puede usar variables o tipos de datos para definir estas columnas si lo
necesita. La declaración INSERT funciona bien con ambas variables o
copias explícitas de los datos como argumentos. Borrando datos
Cada segundo de cada día se generan nuevos datos, y los datos anteriores
almacenados en la base de datos ya no pueden ser de ninguna utilidad.
Puede eliminar estos datos de la base de datos si desea ahorrar espacio.
Los datos antiguos o información inútil reducirán la eficiencia de un
sistema. Puede transferir información o datos antiguos a un archivo y
colocar el archivo fuera de línea. De esta manera, si alguna vez necesita
acceder a estos datos en el futuro, siempre puede volver a cargar los datos
desde el archivo. Si no desea guardar los datos, puede utilizar la palabra

61
clave DELETE para eliminar los datos del sistema.
Si usa una declaración no calificada, puede eliminar todas las filas de la
tabla. Si desea eliminar filas específicas de la tabla, puede usar las palabras
clave DELETE y WHERE. La sintaxis de la sentencia DELETE es similar
a la de la sentencia SELECT, excepto que no especifica las columnas en la
base de datos. Si elimina una fila, eliminará todos los datos de la fila.
Supongamos que un cliente llamado David Taylor se mudó a Tahití y ya
no le comprará ningún producto. Por lo tanto, puede eliminar toda la
información que tenga sobre él de la base de datos.
BORRAR DEL CLIENTE
DÓNDE Nombre = "David" y Apellido = "Taylor";
Si solo tiene un cliente con el nombre de David Taylor, esta declaración
eliminará solo esa entrada. Si hay más de un David Taylor en el sistema,
deberá agregar la palabra clave WHERE e incluir las condiciones
necesarias. Estas condiciones garantizarán que solo elimine el registro de
cliente que desea eliminar del sistema.

Soluciones

1. Crear estadísticas de la tabla


(ID INTEGER ESTACIÓN DE REFERENCIAS (ID),
VERIFICACIÓN INTEGERAL DE LA MADRE (MES ENTRE 1
Y 12),
TEMP_F REAL CHECK (TEMP_F ENTRE -80 Y 150),
RAIN_I REAL CHECK (RAIN_I ENTRE 0 Y 100),
LLAVE PRIMARIA (ID, MES);
2. INSERTE LOS VALORES DE ESTADO (13, 1, 57.4, 0.31);
INTRODUCIR LOS VALORES DE ESTADO (13, 7, 91.7, 5.15);
INTRODUCIR LOS VALORES DE ESTADO (44, 1, 27.3, 0.18);
INTRODUCIR LOS VALORES DE ESTADO (44, 7, 74.8, 2.11);
INTRODUCIR LOS VALORES DE ESTADO (66, 1, 6.7, 2.10);
INTRODUCIR LOS VALORES DE ESTADO (66, 7, 65.8, 4.52);

62
3. SELECCIONAR * DE ESTADISTICAS;
La salida será
ID MES TEMP_F LLUVIA_I
13 1 57.4 .31
13 7 91.7 5.15
44 1 27.3 .18
44 7 74.8 2.11
66 1 6.7 2.1
66 7 65.8 4.52
4. SELECCIONAR * DE ESTACIÓN,
ESTADÍSTICAS
DONDE STATION.ID = STATS.ID;

La salida será
ID CIUDAD ST LAT_N LONG_W ID MES TEMP_F LLUVIA_I
13 Phoenix AZ 33 112 13 1 57.4 .31
13 Phoenix AZ 33 112 13 7 91.7 5.15
44 Denver CO 40 105 44 1 27.3 .18
44 Denver CO 40 105 44 7 74.8 2.11
66 Caribou ME 47 68 66 1 6.7 2.1
66 Caribou ME 47 68 66 7 65.8 4.52
5. SELECCIONAR MES, ID, LLUVIA_I, TEMP_F
DE ESTADÍSTICAS
ORDEN POR MES, LLUVIA_I DESC;
La salida será
MES ID LLUVIA_I TEMP_F
1 66 2.1 6.7
1 13 .31 57.4
1 44 .18 27.3
7 13 5.15 91.7
7 66 4.52 65.8
7 44 2.11 74.8

63
6. SELECCIONA LAT_N, CIUDAD, TEMP_F
DE ESTADISTICAS, ESTACION
Donde mes = 7
Y STATS.ID = ESTACION.ID
ORDEN BY TEMP_F;
La salida será
LAT_N CIUDAD TEMP_F
47 Caribou 65.8
40 Denver 74.8
33 Phoenix 91.7
7. SELECCIONAR * DE ESTACIÓN
DONDE 50 <(SELECCIONAR AVG (TEMP_F) DESDE
ESTADÍSTICAS
DONDE STATION.ID = STATS.ID);
La salida será
ID CITY ST LAT_N LONG_W
13 Phoenix AZ 33 112
44 Denver CO 40 105

8. CREAR VER METRIC_STATS (ID, MES, TEMP_C, LLUVIA_C)


AS
SELECCIONAR ID,
MES,
(TEMP_F - 32) * 5 /9,
LLUVIA_I * 0.3937
DE LAS ESTADÍSTICAS;

9. SELECCIONAR * DE METRIC_STATS;
La salida será
ID MES TEMP_C LLUVIA_C
13 1 14.1111111 .122047

64
13 7 33.1666667 2.027555
44 1 -2.6111111 .070866
44 7 23.7777778 .830707
66 1 -14.055556 .82677
66 7 18.7777778 1.779524

Capítulo Diez: Seguridad de la base de datos

Los propios usuarios son una gran amenaza para la integridad de los datos.
Hay algunos usuarios que nunca deberían tener acceso a los datos y otros
que solo deberían tener acceso restringido a los datos. Debe identificar una

65
forma de clasificar a los usuarios en diferentes categorías para garantizar
que no todos los usuarios tengan acceso a información clasificada o
privilegiada.
Si crea el esquema, puede especificar quién es el propietario. Si es el
propietario del esquema, puede decidir a quién desea otorgarle acceso. Si
no otorga algunos privilegios, estos son retenidos por SQL. Como
propietario del esquema, también puede decidir si desea revocar el acceso
que alguien tiene a su base de datos. Cada usuario debe pasar un proceso
de autenticación antes de poder acceder a los datos que necesita. Este
proceso debería ayudarte a identificar al usuario. Ese procedimiento es
dependiente de la implementación.
Puede proteger los siguientes objetos de base de datos utilizando SQL:
• Puntos de vista
• Columnas
• Mesas
• Conjuntos de caracteres
• Dominios
• Traducciones
• Colaciones
Hay diferentes tipos de protección que puede usar en SQL, y estos
incluyen agregar, ver, eliminar, modificar, usar y hacer referencia a bases
de datos. También puede utilizar diferentes herramientas asociadas con la
protección de las consultas.
Puede dar acceso a las personas mediante la instrucción PERMITIR y
eliminar el acceso mediante la instrucción REVOCAR. Cuando controla el
uso de la instrucción SELECCIONAR, la herramienta de base de datos
controlará quién puede ver un objeto de base de datos específico como una
columna, vista o tabla. Cuando controla el uso del comando INSERTAR,
puede determinar quién puede ingresar filas en una tabla. Cuando restringe
el uso del comando ACTUALIZAR, solo permite que algunas personas
modifiquen los datos de la tabla. Lo mismo se puede decir sobre la
declaración BORRAR (DELETE).
Si tiene una tabla en la base de datos que tiene una clave externa que es
una clave principal en otra tabla, puede agregar restricciones a la primera
tabla que se refieren a los datos en la segunda tabla. En tal situación, el

66
propietario de la primera tabla puede extraer o analizar la información en
la segunda tabla. Si usted, como propietario de la segunda tabla, desea
evitar el uso de sus datos, puede utilizar la declaración GRANT
REFERENCE para proteger sus datos. En las siguientes secciones,
discutiremos la declaración de REFERENCIA DE GRANT. También
aprenderá cómo puede usarlo para evitar el problema de la referencia
renegada.

Integridad referencial

La gente cree que su información está protegida si puede controlar quién


puede ver, crear, modificar o eliminar datos. Es cierto que su base de datos
está protegida de la mayoría de las amenazas, pero un pirata informático
aún puede acceder a información confidencial utilizando algunos métodos
indirectos.
Una base de datos tiene integridad referencial si está diseñada
correctamente. Esto significa que los datos en una tabla siempre serán
consistentes con los datos en otra tabla. Los desarrolladores y diseñadores
de bases de datos siempre aplican restricciones a las tablas que restringen
los datos que se pueden ingresar en la base de datos. Si usa bases de datos
con integridad referencial, los usuarios pueden crear nuevas tablas que
usan la clave externa en una tabla confidencial. Esto les permitirá obtener
información de esa tabla. Esta columna servirá como el enlace a través del
cual cualquiera puede acceder a la información confidencial.
Supongamos que usted es un analista de acciones de Wall Street, y muchas
personas confían en su evaluación sobre qué acciones les dará los mejores
rendimientos. Cuando recomiendas una acción, la gente siempre la
comprará y esto aumenta el valor de la acción. Usted mantiene una base de
datos llamada FOUR_STAR que contiene la información y todos sus
análisis. Las recomendaciones principales se encuentran en su boletín y
restringirá el acceso de los usuarios a esta tabla. Identificará una forma de
garantizar que solo sus suscriptores puedan acceder a esta información.
Usted es vulnerable cuando alguien que no sea usted crea una tabla que
usará el mismo nombre para el campo de valores que la clave externa.
Veamos el siguiente ejemplo.
CREAR TABLA HOT_STOCKS

67
(
Stock PERSONAJE (30) REFERENCIAS FOUR_STAR
);
El pirata informático puede insertar el nombre de las acciones en la Bolsa
de Nueva York, NASDAQ y la Bolsa de Valores de Estados Unidos en esa
tabla. Estas inserciones le indicarán al pirata informático qué acciones
ingresó y que coinciden con las acciones que están en contra de su nombre.
Nunca le tomará al hacker demasiado tiempo extraer la lista de acciones
que posee.
Puede proteger la base de datos de tales hacks usando la siguiente
declaración:
OTORGAR REFERENCIAS (acciones) EN FOUR_STAR A
SECRET_HACKER;
Nunca debe otorgar privilegios a las personas si sabe que las utilizarán
indebidamente. La gente nunca viene con un certificado de confianza, pero
nunca le prestaría su auto a alguien en quien no confía. Lo mismo se puede
decir acerca de dar privilegios de REFERENCIA a alguien en una base de
datos importante.
El ejemplo anterior explica por qué es importante que mantenga el control
del privilegio REFERENCES. Las siguientes razones explican por qué es
importante usar REFERENCIAS con cuidado:
• Si otro usuario especificara una restricción en los HOT STOCKS
utilizando la opción RESTRICT, el DBMS no le permitirá eliminar
una fila de esa tabla. Esto se debe a que se está violando la
restricción referencial.
• La primera persona deberá eliminar o eliminar las restricciones en
una tabla si desea utilizar el comando DROP para eliminar su tabla.
En pocas palabras, nunca es una buena idea dejar que alguien más defina
las restricciones para su base de datos, ya que esto introducirá una
violación de seguridad. Esto también significa que el usuario a veces
puede interponerse en tu camino.

Responsabilidad delegante

68
Si desea mantener un sistema seguro, debe restringir el privilegio de
acceso que otorga a diferentes usuarios. También debe decidir qué
usuarios pueden acceder a los datos. Algunas personas necesitarán acceder
a los datos en la base de datos para continuar con su trabajo. Si no les da el
acceso necesario, lo acosarán constantemente y le pedirán que les brinde
alguna información. Por lo tanto, debe decidir cómo desea mantener la
seguridad de la base de datos. Puede utilizar la cláusula WITH GRANT
OPTION para administrar la seguridad de la base de datos. Consideremos
los siguientes ejemplos:
Actualización de la subvención
EN RETAIL_PRICE_LIST
A SALES_MANAGER CON OPCIÓN DE SUBVENCIÓN
La declaración es similar a la instrucción GRANT UPDATE que le
permite al gerente de ventas actualizar la lista de precios minoristas. Esta
declaración también le otorga al administrador el derecho de otorgar
cualquier privilegio de actualización a las personas en las que ella confía.
Si usa esta versión de la declaración GRANT, debe confiar en el hecho de
que el concesionario usará el privilegio sabiamente. También debe confiar
en el hecho de que el concesionario otorgará el privilegio solo a las
personas necesarias.
OTORGAR TODOS LOS PRIVILEGIOS
EN FOUR_STAR
A BENEDICT_ARNOLD CON OPCIÓN DE SUBVENCIÓN;
Debes tener cuidado al usar sentencias como la de arriba. Si escribe mal el
nombre o le da acceso a la persona equivocada, no puede garantizar la
seguridad de su base de datos.

69
Capítulo Once: Cómo trabajar con resultados
de búsqueda a través de SQL

Una vez que haya tomado un tiempo para crear una nueva base de datos
para su negocio, habrá muchas ocasiones en las que necesite hacer una
búsqueda para encontrar la información que desea utilizar. Podrá usar el
lenguaje SQL para encontrar cualquiera de los resultados que desea, pero
debe asegurarse de que la base de datos esté configurada de la manera
correcta para que sus búsquedas encuentren su información. Piénsalo de
esta manera; hay momentos en que las personas acceden a un sitio web
que usted creó y están buscando un producto que usted está vendiendo.
¿Está más interesado en configurar una base de datos que devuelva los
resultados incorrectos y sea lenta, o desea crear una base de datos con la
que sea fácil trabajar y que traiga los mejores resultados? En este capítulo,
vamos a tomarnos el tiempo para hablar sobre cómo configurar
correctamente las consultas para que su base de datos obtenga los mejores
resultados.

Creando tu nueva consulta

Cuando está listo para iniciar una nueva consulta, básicamente está
enviando información a la base de datos que está configurada. Deberá

70
mostrar el comando correcto, el comando SELECCIONAR, de modo que
pueda enviar la consulta que desea utilizar. Un buen ejemplo de esto es
mirar una tabla que contiene todos sus productos dentro de la base de
datos; simplemente traerá el comando SELECCIONAR para encontrar
todos los productos que están en la tabla. El usuario o usted mismo podrán
escribir los que deseen encontrar, como los artículos más vendidos, los que
son de una determinada marca, etc. Puede utilizar cualquier tipo de
consulta que desee para encontrar el producto correcto de la base de datos.

Usando el comando SELECT

Cada vez que tenga ganas de crear una consulta dentro de la base de datos,
nuevamente deberá usar el comando SELECCIONAR para que esto
suceda. Este comando básicamente se encargará de iniciar y ejecutar las
consultas que le gustaría enviar a la base de datos. En muchos casos, solo
necesita agregar algo a la declaración, en lugar de simplemente enviar
SELECT, como la marca del elemento que desea, y luego usar este
comando.
Cuando esté utilizando el comando SELECT dentro del lenguaje SQL,
habrá cuatro palabras clave, también conocidas como cuatro cláusulas, que
deben estar presentes. Estos van a incluir:

SELECCIONAR (SELECT)

Este comando se combinará con el comando FROM para obtener los datos
necesarios en un formato que sea legible y organizado. Utilizará esto para
ayudar a determinar los datos que se mostrarán. La cláusula SELECT
introducirá las columnas que le gustaría ver en los resultados de búsqueda,
y luego puede usar el FROM para encontrar el punto exacto que necesita.

DESDE

Los comandos SELECT y FROM a menudo van juntos. Es obligatorio


porque toma su búsqueda de todo lo que hay en la base de datos, hasta las

71
cosas que le gustaría. Necesitará tener al menos una cláusula FROM para
que esto funcione. Una buena sintaxis que usaría tanto el SELECT como el
FROM correctamente incluye:
SELEC [* | Todo | COLUMNA DISTINCION1, COLUMNA2]
DE LA TABLA1 [, TABLA2];

DÓNDE

Esto es lo que usará cuando haya múltiples condiciones dentro de la


cláusula. Por ejemplo, es el elemento en la consulta el que mostrará los
datos selectivos después de que el usuario ingrese la información que
desea encontrar. Si está utilizando esta función, las condiciones correctas
para tenerla junto con ella son los operadores AND y OR. La sintaxis que
debe usar para el comando WHERE incluye:
SELEC [* | Todo | COLUMNA DISTINCION1, COLUMNA2]
DE LA TABLA1 [, TABLA2];
DONDE [CONDICIÓN1 | EXPRESION 1]
[Y CONDICION2 | Expresión 2]

ORDEN POR

Puede utilizar esta cláusula para organizar el resultado de su consulta. El


servidor podrá decidir el orden y el formato en que la información
diferente aparece para el usuario después de realizar su consulta básica. El
valor predeterminado para esta consulta será organizar la salida de la A a
la Z, pero puede realizar los cambios que desee. La sintaxis que puede usar
para esto será la misma que la anterior, pero agregue la siguiente línea al
final:
ORDEN POR COLUMNA 1 | INTEGER [ASC / DESC]
Todo esto deberá estar en su lugar si desea que el comando SELECT
funcione correctamente y obtenga la información correcta que está
buscando con su consulta en la base de datos.

72
Ejemplos

Ejemplo 1

Entender cómo funciona la sensibilidad a los casos


Cuando trabaje dentro de SQL, no tendrá que preocuparse tanto por la
sensibilidad a las mayúsculas y minúsculas, que es un poco diferente en
comparación con algunos de los otros lenguajes de codificación con los
que trabajará. Puede elegir usar cualquiera de las dos versiones de la
palabra, mayúsculas o minúsculas, y funcionará en sus búsquedas. Incluso
puede optar por buscar declaraciones y cláusulas si desea que aparezcan
estas.
Dicho esto, hay varias veces en que la sensibilidad a los casos va a ser
importante. Una de estas veces es con objetos de datos. En su mayor parte,
los datos con los que trabaja se realizarán en mayúsculas. Esto es útil
porque los otros usuarios podrán ver que algo es consistente dentro del
código. Si tiene un usuario que está escribiendo JOHN y otro que elige ir
con John, la gente puede preguntarse si significan lo mismo o no, por lo
que usaremos mayúsculas para mantener todo en orden.
Usar mayúsculas es una de las mejores maneras de hacer esto porque es
fácil de leer, y estará acostumbrado a esto desde algunas de las otras
opciones de bases de datos con las que trabaja. Si no está usando
mayúsculas con su escritura, necesita encontrar al menos algún otro
método para usar que le permita permanecer consistente. Si escribe los
nombres con el formato "Nombre", todos deben ser de esta manera. Esto
ayuda a otros a tener una idea de cómo está trabajando en diferentes
opciones.
Las transacciones con las que está trabajando, así como las consultas que
las acompañan, serán una parte integral de su sistema y harán que funcione
bien para usted. Es posible que sienta que esta información no es tan
importante y que el usuario podrá encontrar toda esta información ya sea
que haya una buena consulta o no, pero si no usa la sensibilidad a las
mayúsculas de la manera correcta o asegúrese de que La tabla está
configurada de la manera que debería ser, usted va a terminar con
resultados incorrectos y todos se sentirán frustrados. Nadie quiere escribir

73
palabras en una consulta y descubrir que están surgiendo resultados que no
tienen nada que ver con lo que quieren.
Cuando esté trabajando en su base de datos, deberá asegurarse de que la
consulta esté bien configurada para que los clientes puedan encontrar los
productos que están buscando dentro de la barra de búsqueda. Cuando
escriben botas, no van a conseguir un montón de juguetes de baño, por
ejemplo. Esta es una de las mejores maneras para mantener a los clientes
contentos y evitar la frustración resultante de no poder encontrar lo que
buscan.
Incluso si no está utilizando la base de datos para vender un producto,
habrá ocasiones en las que aún deberá tener una buena búsqueda del
cliente. Si desean poder obtener alguna otra información de la base de
datos, como su cuenta o una lista de los servicios que puede proporcionar,
todavía tendrá que hacer que la transacción se realice de la mejor manera
posible. Asegurarse de que la base de datos esté bien configurada y de que
usted y el usuario puedan encontrar lo que quieran cada vez que realicen
una consulta en su sitio web.
La configuración de las consultas que le gustaría usar dentro de su base de
datos es un paso importante para asegurarse de que el lenguaje SQL pueda
encontrar lo que están buscando. Ya sea que esté intentando vender
productos en el sitio o le gustaría hacer un seguimiento de toda la
información de la cuenta de sus clientes, descubrirá que trabajar para que
las consultas funcionen correctamente dentro de la base de datos puede
hacerlo más fácil. más fácil. Use algunos de los pasos que se encuentran en
este capítulo para aprender a configurar la base de datos de una manera
que tenga más sentido y garantice que la información correcta aparezca
después de que su cliente realice una búsqueda.

Capítulo Doce: Una Introducción a las


Uniones

74
Una unión al lenguaje de consulta estructurada (SQL) es una instrucción
que puede utilizar para combinar la información de dos tablas diferentes.
Antes de ver los detalles de una unión SQL, veamos por qué querría
usarla. Veamos dos tablas que proporcionan información sobre clientes y
pedidos.

Clientes

La siguiente tabla proporciona información sobre los clientes en una


empresa.
cliente_ primer_ apellido_
email dirección ciudad
ID nombre
1 George Washington [email protected] 3200 Mt Mount Vernon
Vernon
Hwy
2 John Adams [email protected] 1250 Quincy
Hancock St
3 Thomas Jefferson [email protected] 931 Thomas Charlottesville
Jefferson
Pkwy
4 James Madison [email protected] 11350 Orange
Constitution
Hwy
5 James Monroe [email protected] 2050 James Charlottesville
Monroe
Pkwy
La información sobre cada cliente está en una fila separada. Cada columna
especifica información diferente, incluido su nombre, apellido, ID de
correo electrónico y estado. Cada cliente está asociado con una clave
principal llamada customer_ID.

75
Pedidos
orden_id orden_fecha Cantidad cliente_id

1 07/04/1776 $234.56 1

2 03/14/1760 $78.50 3

3 05/23/1784 $124.00 2

4 09/03/1790 $65.50 3

5 07/21/1795 $25.50 10

6 11/27/1787 $14.40 9

En esta tabla, cada orden está asociada con una clave primaria llamada
order_id. SQL solo mirará el orden_id cuando elija invocar un pedido.

Cómo usar una unión

Supongamos que desea utilizar las tablas anteriores para enumerar todos
los pedidos que ha realizado un cliente específico. Esto se puede hacer
uniendo o combinando las tablas de clientes y pedidos. Esto se puede
hacer usando el customer_id.
seleccione orden_fecha, orden_cantidad
de los clientes
unir órdenes
en Clientes.clientee_id = ordenes.cliente_id
donde cliente_id = 3
En el ejemplo anterior, estamos combinando dos palabras clave utilizando
la palabra clave "union". También debe identificar qué clave (en este
ejemplo estamos usando cliente_id y orden_id) que desea que use SQL

76
cuando se une a las tablas. Esto debería seguir la declaración de unión. El
resultado de esta consulta será:

orden_id orden_fecha orden_cantidad

2 3/14/1760 $78.50

4 9/03/1790 $65.50

En este ejemplo, estamos utilizando la unión interna. El método que utilice


depende del tipo de análisis que desea realizar en los datos. Puedes unir
diferentes tablas de varias maneras. En la siguiente sección, veremos las
combinaciones izquierda, derecha y completa. Los ejemplos de las
siguientes secciones utilizarán las tablas de clientes y pedidos anteriores.

Tipos básicos de unirse

Hay cuatro tipos de combinaciones: izquierda, derecha, completa e interna.


Estas uniones son diferentes entre sí, y la forma más intuitiva y sencilla de
explicar estas diferencias es mediante el uso de un diagrama de Venn. Este
diagrama mostrará todas las relaciones lógicas que existen entre dos tablas
o conjuntos de datos.
Antes de utilizar una función JOIN en un conjunto de datos, primero
deberá extraer esos datos y cargarlos en una base de datos relacional. Estas
bases de datos te ayudarán a consultar tus datos desde múltiples fuentes.
Puede usar un ETL para compilar el proceso o construirlo manualmente.
Supongamos que tenemos dos conjuntos de datos diferentes: las tablas A y
B. Cada una de estas tablas tiene una relación específica que se define
mediante una clave externa o primaria. El siguiente diagrama representa el
resultado de combinar las tablas juntas.

77
El número de registros en la Tabla A que coinciden con los registros en la
Tabla B determina la extensión de la superposición en el diagrama
anterior. Puede utilizar los diferentes tipos de combinaciones según el tipo
de datos o el subconjunto que desea seleccionar de las dos tablas.
Puede visualizar los cuatro tipos de combinaciones utilizando los
siguientes diagramas de Venn.

Unir internamente

En este tipo de unión, seleccionará todos los registros de las tablas A y B si


y solo si se cumple la condición.

Unirse a la izquierda

78
En este tipo de unión, se seleccionan todos los registros de la Tabla A, y se
seleccionan algunos registros de la Tabla B dependiendo de si se cumple la
condición de unión.

Unirse a la derecha

En este tipo de unión, se seleccionan todos los registros de la Tabla


B, y se seleccionan algunos registros de la Tabla A dependiendo de
si se cumple la condición de unión.

Unirse completo

79
Todos los registros de las tablas A y B se seleccionan
independientemente de si se cumple o no la condición de unión.

Ejemplos de tipos de unión SQL

Ahora usaremos las dos tablas definidas al principio de este capítulo


para entender cómo usar las combinaciones. Como se mencionó
anteriormente, la relación entre ambas tablas se define mediante la
clave principal, customer_id, en la tabla de clientes. Esta clave es
una clave externa en la tabla de orden.

customer_id primer_nombre apellido email dirección

1 George Washington [email protected] 3200 Mt


Vernon
Hwy
2 John Adams [email protected] 1250
Hancock St

80
3 Thomas Jefferson [email protected] 931 Thomas
Jefferson
Pkwy
4 James Madison [email protected] 11350
Constitution
Hwy
5 James Monroe [email protected] 2050 James
Monroe
Parkway
orden_id orden_fecha cantidad
1 07/04/1776 $234.56
2 03/14/1760 $78.50
3 05/23/1784 $124.00
4 09/03/1790 $65.50
5 07/21/1795 $25.50
6 11/27/1787 $14.40

Debe recordar que no todos los clientes en la tabla de clientes han


realizado un pedido. Hay algunos pedidos para los cuales no
tenemos información del cliente en la tabla anterior.

Unir internamente

Supongamos que queremos extraer información de las tablas


anteriores sobre los clientes que han realizado un pedido. También
queremos información sobre los pedidos realizados por ese cliente.
En este caso, sería ideal utilizar la unión interna, ya que proporciona
información que es común a ambos conjuntos de datos.
seleccione first_name, last_name, order_date, order_amount
de clientes c
órdenes de unión interna o
en c.customer_id = o.customer_id

81
Recibirá la siguiente salida:
primer_nombre apellido orden_fecha orden_cantidad
George Washington 07/4/1776 $234.56
John Adams 05/23/1784 $124.00
Thomas Jefferson 03/14/1760 $78.50
Thomas Jefferson 09/03/1790 $65.50
Debe tener en cuenta que John Adams, Thomas Jefferson y George
Washington fueron los únicos clientes que realizaron pedidos.
Thomas Jefferson fue el único cliente que realizó dos pedidos
diferentes.

Unirse a la izquierda

Si solo desea adjuntar información sobre sus clientes, independientemente


de si su cliente ha realizado un pedido o no, debe utilizar una suscripción
izquierda. Esta unión devolverá todos los registros en la Tabla A y los
registros de la Tabla B si coinciden con la condición de unión.
seleccione first_name, last_name, order_date, order_amount
de clientes c
órdenes de unirse a la izquierda o
en c.customer_id = o.customer_id

primer_nombre apellido orden_fecha orden_cantidad

George Washington 07/04/1776 $234.56

John Adams 05/23/1784 $124.00

Thomas Jefferson 03/14/1760 $78.50

Thomas Jefferson 09/03/1790 $65.50

James Madison NULL NULL

82
James Monroe NULL NULL
Como no había ningún registro coincidente disponible para James Monroe
y James Madison en la tabla de pedidos, la combinación izquierda
devolverá un valor nulo. Esto significa que no hay datos disponibles para
los campos.
Usted puede preguntarse por qué esta unión es útil. Si añadiera una línea
adicional de verificación de código cuando se realizó el pedido, recibirá la
lista de clientes que han realizado un pedido.
seleccione primer_nombre, apellido, orden_fecha, orden_cantidad
de clientes c
órdenes de unirse a la izquierda o
en c.customer_id = o.customer_id
donde orden_fecha es NULL
Unirse a la derecha
La combinación derecha hace exactamente lo contrario de la combinación
izquierda. Este operador proporcionará información sobre todo el pedido
seguido por la información sobre los clientes.
seleccione primer_nombre, apellido, orden_fecha, orden_cantidad
de clientes c
unir las órdenes o
en c.customer_id = o.customer_id

primer_nombre apellido orden_fecha orden_cantidad

George Washington 07/04/1776 $234.56

Thomas Jefferson 03/14/1760 $78.50

John Adams 05/23/1784 $124.00

Thomas Jefferson 09/03/1790 $65.50

NULL NULL 07/21/1795 $25.50

NULL NULL 11/27/1787 $14.40

83
Debe tener en cuenta que, dado que no existe un registro
coincidente para los pedidos realizados en los años 1787 y 1795, el
nombre del cliente es nulo. También debe tener en cuenta la forma
en que se unen las tablas. Si utiliza una combinación derecha para
asignar la tabla de clientes a la tabla de pedidos, el resultado sería el
mismo que el de la combinación izquierda. Si tuviera que agregar
otra línea a la consulta "donde first_name is NULL", la salida
devolverá información sobre los clientes que han realizado un
pedido.
seleccione primer_nombre, apellido, orden_fecha, orden_cantidad
de clientes c
unir las órdenes o
en c.customer_id = o.customer_id
donde first_name es NULL

Unirse completo

Si desea una lista de todos los registros en ambas tablas, debe usar
la unión completa.
seleccione primer_nombre, apellido, orden_fecha, orden_cantidad
de clientes c
órdenes de unión completa o
en c.customer_id = o.customer_id
primer_nombre apellido orden_fecha orden_cantidad
George Washington 07/04/1776 $234.56
Thomas Jefferson 03/14/1760 $78.50
John Adams 05/23/1784 $124.00
Thomas Jefferson 09/03/1790 $65.50
NULL NULL 07/21/1795 $25.50

84
NULL NULL 11/27/1787 $14.40
James Madison NULL NULL
James Monroe NULL NULL

¿Qué vas a hacer después?

Utilizando los cuatro tipos de combinaciones mencionados en este


capítulo, puede vincular diferentes formas y tipos de datos. Esto le
permitirá hacer las preguntas correctas y desafiar sus datos. Si ha trabajado
en grandes conjuntos de datos, sabrá que es difícil llevar los datos a un
almacén de datos o una base de datos, y es aún más difícil mantener los
datos actualizados. Esto es cierto si utiliza diferentes fuentes para obtener
los datos. Esta sección trata sobre cómo puede integrar todos los datos de
diferentes fuentes en un almacén de datos y aprender a mantener la
precisión y la calidad de los datos.
Es útil trabajar en uniones en fuentes o datos específicos ya que es más
fácil. En la mayoría de los casos, las personas usan datos de diferentes
fuentes para realizar un mejor análisis. Por ejemplo, cuando combina los
datos de marketing de Facebook o AdWords y los datos de transacción de
su sitio web o cuenta, puede descubrir algunas ideas útiles que su empresa
o negocio pueden usar para maximizar los beneficios.
Dicho esto, es difícil realizar uniones en conjuntos de datos que provienen
de diferentes fuentes. Por lo tanto, primero deberá consolidar los datos en
un almacén o base de datos. Como se mencionó anteriormente, puede usar
un servicio ETL o puede extraer manualmente los datos de estas fuentes y
consolidarlos en una base de datos.
Una vez que los datos están en el almacén o en la base de datos, puede
combinar diferentes tablas o datos de cualquier fuente que desee. Si utiliza
el almacén de Redshift, puede conectarse a diferentes herramientas de
inteligencia empresarial como Wagon, Looker y Mode. Este almacén
también mejora la velocidad de consulta. Puede ver, consultar, analizar y
visualizar los datos utilizando informes y cuadros.
El punto aquí es que no es fácil usar SQL para combinar datos si no
almacena los datos en una base de datos o almacén. La mejor manera de
conectarse a diferentes fuentes de datos para obtener datos es utilizar un

85
servicio ETL como Stitch. Stitch le permitirá conectarse a diferentes
fuentes que utiliza su empresa y transmite toda esa información a un
almacén de datos como Redshift. Alternativamente, puede transmitir los
datos a una base de datos que haya creado con el fin de analizarlos.
Cuando tiene todos sus datos en el almacén, puede comprender cómo las
diferentes fuentes estructuran los datos. Esto le ayudará a comprender qué
tipos de combinaciones puede realizar en el conjunto de datos.
Como se mencionó anteriormente, los datos que utiliza una empresa para
analizar sus funciones plantean un desafío cuando se desea utilizar una
unión SQL. Esto se debe a que cada empresa utiliza diferentes fuentes para
obtener los datos, y los datos de estas fuentes vienen en diferentes
formatos y formas. Esto dificulta la unión de los datos. Por lo tanto, debe
utilizar un servicio ETL ya que le facilitará la vida.

Capítulo trece: una introducción a las


subconsultas

86
Una de las maneras más fáciles de proteger la integridad de sus datos es
evitar cualquier anomalía que se pueda causar debido a cualquier
modificación que se realice en los datos. Puedes hacer esto normalizando
tu base de datos. En la normalización, deberá dividir una tabla en varias
tablas utilizando un tema. Por ejemplo, no debe incluir información del
producto en la tabla de clientes, aunque el cliente haya comprado el
producto.
Cuando normaliza una base de datos o un almacén de datos correctamente,
los datos se repartirán en varias tablas. A menudo necesitará escribir
consultas para extraer datos de más de dos tablas. Puede hacer esto
utilizando los operadores de unión u operadores relacionales (cubiertos en
los capítulos anteriores). Los operadores relacionales tomarán la
información de varias tablas y construirán una tabla. La tabla tendrá una
combinación diferente de datos según el operador que esté utilizando. Una
forma alternativa de obtener datos de más de dos tablas es usar consultas
anidadas.
En una consulta anidada, las declaraciones adjuntas más externas
contendrán una subconsulta dentro de ella. Esta subconsulta servirá como
una declaración adjunta para subconsultas de nivel inferior que están
anidadas dentro de ella. Puede tener cualquier número de subconsultas en
la consulta principal, ya que no hay límite teórico. Es mejor tener un
número limitado de subconsultas para evitar dificultades de
implementación.
Una subconsulta es una instrucción SELECT, pero la consulta externa
puede ser realizada por una instrucción SELECT, INSERT, UPDATE o
DELETE. Una subconsulta puede operar en una tabla que es diferente de
la tabla en la que opera la declaración envolvente externa. Es por este
motivo que una consulta anidada le permitirá extraer información de
diferentes tablas.
Por ejemplo, si desea consultar la base de datos corporativa y hacer una
lista de los gerentes que tienen más de cincuenta años, puede usar uniones
para obtener esta información. La consulta será:
SELECCIONE D.Deptno, D.Nombre, E.Nombre, E.Age
DEL DEPARTAMENTO D, EMPLEADO E
DONDE D.ManagerID = E.ID y E.Age> 50;

87
Aquí, D es el alias para la tabla del Departamento, E es el alias para la
Tabla del empleado.
La tabla Empleado tiene una columna etiquetada ID que es la clave
principal. El ID de administrador es la clave principal en la tabla de
departamento. Esta identificación es el valor del empleado que es el
gerente del departamento. Puede usar una combinación simple para
emparejar estas tablas y la cláusula WHERE para filtrar la información
necesaria. Esta información no incluirá los datos que no se ajusten al
criterio de unión. La lista de parámetros incluye las columnas DeptNo y
Name de la tabla del Departamento y las columnas Name y Age de la
Tabla de empleados.
Supongamos que solo desea que la información de la tabla de
departamento mire las mismas filas. Esto significa que desea obtener
información acerca de los gerentes que tienen más de cincuenta años, pero
no le importa quiénes son los gerentes o su edad exacta. Puede usar la
siguiente subconsulta en lugar de usar una unión:
SELECCIONE D.Deptno, D.Nombre
DEPARTAMENTO D
DONDE EXISTE (SELECCIONA * DE EMPLEADO E
DONDE E.ID = D.ManagerID Y E.Age> 50);
Esta consulta tiene los siguientes elementos:
1. Palabra clave EXISTS: una de las muchas declaraciones utilizadas en
una subconsulta.
2. SELECCIONE * en la cláusula WHERE: esta instrucción de selección
es una subconsulta.

¿Por qué debería utilizar una subconsulta?

Puede usar una subconsulta en lugar de una combinación en muchos casos


y, en la mayoría de los casos, la complejidad de una subconsulta es la
misma que la complejidad de la instrucción de unión. Puede decidir si
desea utilizar una subconsulta o una unión según lo que le resulte cómodo.
La mayoría de las veces, las personas eligen recuperar información de las
tablas utilizando los operadores de unión, mientras que otras prefieren usar

88
subconsultas. Hay ocasiones en que no puede utilizar una instrucción de
unión para obtener el resultado necesario. En esos casos, sería mejor
utilizar una subconsulta. Alternativamente, puede dividir el problema en
múltiples declaraciones y ejecutarlas una tras otra, dependiendo de lo que
necesite.

¿Qué hacen las subconsultas?

Una subconsulta siempre debe estar en la declaración adjunta y solo dentro


de la cláusula WHERE. La función de una subconsulta es establecer la
condición de búsqueda para la cláusula WHERE. Las diferentes
subconsultas producen diferentes resultados. Algunas subconsultas
producen valores únicos que la declaración adjunta utiliza para comparar
con otros valores. Otras subconsultas producen una lista de valores que la
declaración adjunta utilizará como entrada. El último tipo de una
subconsulta devuelve un valor booleano.

89
Capítulo Catorce: Introducción a los
Operadores de Set.

Puede utilizar algunos operadores SQL para obtener resultados


significativos de los datos en las tablas. Puede utilizar estos operadores
cuando necesite instrucciones especiales. Este capítulo cubre las siguientes
operaciones de conjuntos, con ejemplos:
1. UNION
2. UNION ALL
3. INTERSECTAR
4. MENOS

UNION y UNION TODOS

Puede usar el operador de unión en SQL para combinar los resultados que
obtiene de dos o más consultas. Estas consultas son particularmente
declaraciones selectas. Antes de ver la sintaxis, hay algunos puntos que
debe tener en cuenta:
• Las instrucciones SELECT en una UNION siempre deben tener el
mismo número de columnas
• Cada columna debe tener un tipo de datos similar
• Las columnas en cada declaración deben estar en el mismo orden

Sintaxis de UNION

90
SELECCIONAR nombre (s) de columna DE tabla1
UNIÓN
SELECCIONE column_name (s) FROM table2;

Sintaxis para UNION ALL


Si desea incluir valores duplicados cuando utiliza el operador UNION,
debe incluir la palabra clave "TODOS" después de UNION. La sintaxis
para esto es,
SELECCIONAR nombre (s) de columna DE tabla1
UNION TODO
SELECCIONE column_name (s) FROM table2;
Debe recordar que los nombres de las columnas deben ser los mismos en
la primera instrucción SELECT y en el conjunto de resultados.

Base de datos de muestra

Usaremos la base de datos Northwind para este ejemplo. Veamos la base


de datos de muestra de la tabla de Clientes.
CustomerID NombreCliente NombreContacto Dirección Ciudad

1 Alfreds Maria Anders Obere Str. Berlin


Futterkiste 57
2 Ana Trujillo Ana Trujillo Avda. de la México
Emparedados y Constitución D.F.
helados 2222
3 Antonio Antonio Moreno Mataderos México
Moreno 2312 D.F.
Taquería
Veamos una muestra de la tabla del proveedor.

ProveedorID NombreProveedor NombreContacto Dirección Ciudad

91
Charlotte 49 Gilbert
1 Exotic Liquid London
Cooper St.

New Orleans P.O. Box New


2 Shelley Burke
Cajun Delights 78934 Orleans

707
Grandma Kelly's Ann
3 Regina Murphy Oxford
Homestead Arbor
Rd.

Ejemplos

Ejemplo 1
En este ejemplo, queremos que SQL devuelva los valores de ciudad
distintos de las tablas de clientes y proveedores.

SELECCIONE Ciudad DE Clientes


UNIÓN
SELECCIONE Ciudad DE Proveedores
ORDEN POR Ciudad;
Si hay un cliente o proveedor que es de la misma ciudad, la ciudad solo
aparecerá en la lista una vez, ya que el operador UNION solo devuelve
valores distintos. Si desea todos los valores, debe utilizar el operador
UNION ALL.
Ejemplo 2
El siguiente ejemplo devolverá todos los valores de la ciudad, incluidos los
valores duplicados de ambas tablas.

SELECCIONE Ciudad DE Clientes


UNION TODO
SELECCIONE Ciudad DE Proveedores
ORDEN POR Ciudad;
Ejemplo 3
En este ejemplo, utilizaremos el operador UNION con la palabra clave

92
WHERE. SQL devolverá las ciudades en Alemania desde la tabla de
clientes y proveedores.

SELECCIONE Ciudad, País DE Clientes


DÓNDE País = 'Alemania'
UNIÓN
SELECCIONE Ciudad, País DE Proveedores
DÓNDE País = 'Alemania'
ORDEN POR Ciudad;
Ejemplo 4
En este ejemplo, usaremos el operador UNION ALL con DONDE para
devolver todas las ciudades alemanas, incluidos los duplicados.

SELECCIONE Ciudad, País DE Clientes


DÓNDE País = 'Alemania'
UNION TODO
SELECCIONE Ciudad, País DE Proveedores
DÓNDE País = 'Alemania'
ORDEN POR Ciudad;
Ejemplo 5
SQL devolverá a todos los clientes y proveedores en ambas tablas.

SELECCIONE "Cliente" como tipo, nombre de contacto, ciudad, país


DE LOS CLIENTES
UNIÓN
SELECCIONE "Proveedor", Nombre de contacto, Ciudad, País
De los proveedores;
Ejemplo 6
SELECCIONA product_id DE order_items

UNIÓN
SELECCIONA product_id DE los inventarios;

93
SELECCIONAR location_id DE ubicaciones
UNION TODO
SELECCIONAR location_id DE los departamentos;
Ejemplo 7
SELECCIONE location_id, department_name "Departamento",

TO_CHAR (NULL) "Almacén" DE los departamentos


UNIÓN
SELECCIONAR location_id, TO_CHAR (NULL) "Departamento",
nombre de almacén
DE almacenes;
Salida
LOCATION_ID Departmento Almacén
1400 IT
1400 Southlake, Texas
1500 Shipping
1500 San Francisco
1600 New Jersey
1700 Accounting
1700 Administration
1700 Benefits
1700 Construction

INTERSECARSE

El operador INTERSECT devolverá el resultado de dos o más


instrucciones SELECT, pero solo devolverá las filas que SQL selecciona
por todos los conjuntos de datos o consultas. Si hay un registro que está
presente en un conjunto de resultados y no en el otro, SQL no lo incluirá
en los resultados.

94
La consulta

El siguiente diagrama explica cómo funciona la cláusula. La consulta solo


devolverá los registros que están presentes en el área sombreada azul, ya
que estos registros están presentes en ambos conjuntos de resultados. Las
reglas para la cláusula INTERSECT son las mismas que la cláusula
UNION.

Sintaxis

La sintaxis es,
SELECCIONAR expresión1, expresión2, ... expresión_n
DE las tablas
[DÓNDE condiciones]
INTERSECARSE
SELECCIONAR expresión1, expresión2, ... expresión_n
DE las tablas
[DONDE las condiciones];

Ejemplos

Ejemplo 1
En este ejemplo, estamos utilizando supplier_id ya que tendrá el mismo
tipo de datos en ambas tablas. SQL devolverá el ID de proveedor de la
orden y la tabla del proveedor si el ID aparece en ambos conjuntos de
resultados.

95
SELECCIONAR supplier_id
De los proveedores
INTERSECARSE
SELECCIONAR supplier_id
DE las órdenes;

Ejemplo 2
Continuaremos usando el mismo ejemplo anterior, pero incluiremos la
condición DÓNDE a la consulta. Estamos incluyendo la cláusula WHERE
a ambos conjuntos de datos. SQL solo examinará los ID de proveedor que
sean mayores que 78 en el primer conjunto de datos, mientras que verá los
ID de proveedor en el segundo conjunto de datos donde la cantidad es
mayor que cero.

SELECCIONAR supplier_id
De los proveedores
DONDE supplier_id> 78
INTERSECARSE
SELECCIONAR supplier_id
De ordenes
DONDE cantidad <> 0;
Ejemplo 3
Ahora, veamos otro ejemplo donde veremos cómo podemos usar el
operador INTERSECT para devolver más de una columna. La consulta
devolverá los registros de los contactos y la tabla del cliente si y solo si
coinciden contact_id, last_name y first_name. Estamos incluyendo las
condiciones de DONDE en cada uno de los conjuntos de datos para filtrar
los registros donde el último nombre en la tabla de contactos no es
Anderson, y el ID_de_entorno en la tabla del cliente es menor que 40.

SELECCIONE contact_id, last_name, first_name


De contactos
DONDE last_name <> 'Anderson'

96
INTERSECARSE
SELECCIONAR ID de cliente, último nombre, primer nombre
De los clientes
DONDE customer_id <40;
Ejemplo 4
En este ejemplo, utilizaremos una cláusula ORDER BY con la cláusula
INTERSECT. Como los nombres de columna no son los mismos en las
sentencias SELECT, puede usar la cláusula ORDER BY para referirse a
las columnas en las tablas. En el siguiente ejemplo, estamos clasificando
los datos en orden ascendente utilizando supplier_name y company_name.
SELECCIONAR supplier_id, supplier_name
De los proveedores
DONDE supplier_id> 2000
INTERSECARSE
SELECCIONAR company_id, company_name
De las empresas
DONDE company_id> 1000
ORDEN POR 2;
Ejemplo 5
SELECCIONA product_id DE inventarios

INTERSECARSE
SELECCIONA product_id DE order_items;

MENOS

En esta sección aprenderemos más sobre el operador MENOS. Este


operador solo devolverá aquellos valores en la primera instrucción
SELECT que no estén presentes en la segunda instrucción SELECT. Las
instrucciones SELECT definen el conjunto de datos, y el operador
MENOS recuperará los registros del primer conjunto de datos y eliminará
los resultados del segundo conjunto de datos.

97
La consulta
De la imagen de abajo, puede haber reunido que la consulta MENOS
devolverá los registros que están presentes en el área sombreada azul.
Estos registros solo están presentes en el primer conjunto de datos y no en
el segundo. Las instrucciones SELECT en la consulta MENOS deben tener
el mismo número de campos y tipos de datos similares.

Sintaxis
La sintaxis para el operador menos es la siguiente:
SELECCIONAR expresión1, expresión2, ... expresión_n
DE las tablas
[DÓNDE condiciones]
MENOS
SELECCIONAR expresión1, expresión2, ... expresión_n
DE las tablas
[DONDE las condiciones];

Ejemplos
Ejemplo 1
En este ejemplo, usaremos solo un campo de ambos conjuntos de datos
que tienen el mismo tipo de datos. La consulta MENOS recuperará todos
los valores de supplier_id que están presentes solo en la tabla del

98
proveedor. Esto significa que si hay un supplier_id que es común a ambos
conjuntos de datos o solo está presente en el segundo conjunto de datos, la
consulta MENOS no devolverá ese supplier_id.

SELECCIONAR supplier_id
De los proveedores
MENOS
SELECCIONAR supplier_id
DE las órdenes;
Ejemplo 2
En este ejemplo, usaremos la cláusula ORDER BY ya que hay diferentes
nombres de columna en ambos conjuntos de datos.

SELECCIONAR supplier_id, supplier_name


De los proveedores
DONDE supplier_id> 2000
MENOS
SELECCIONAR company_id, company_name
De las empresas
DONDE company_id> 1000
ORDEN POR 2;

Ejemplo 3
SELECCIONA product_id DE inventarios

MENOS
SELECCIONA product_id DE order_items;

99
Capítulo Quince: Estudio de Caso

La mayoría de los principiantes se preguntan cómo pueden resolver


problemas cuando necesitan combinar datos de diferentes tablas para
obtener un solo resultado. Lo interesante es que hay tres formas de realizar
esta acción, y las hemos cubierto a lo largo del libro: uniones, operadores
de conjuntos y subconsultas.
Dado que este es un problema integral, es una gran idea utilizar un estudio
de caso para mejorar su comprensión. Si no tiene SQL Server Management
Studio y la base de datos Adventure Works 2012, debe comprarlo ahora.
La mayoría de los artículos en línea usan esa versión.
Veamos ahora la pregunta que se hizo.
Hay una tabla de datos que proporciona información sobre diferentes
eventos y hay una serie de campos incluidos en esta tabla (código de
razón, estado y duración). La base de datos también proporciona
información sobre diferentes estados. Esta tabla tiene un campo que es
común a la tabla principal. Esto permite al usuario ver el estado y no el
código del evento. Solo hay cuatro estados en los que se puede clasificar
una actividad o evento: de reserva, inactivo, listo, y temprano, y se asocia
un motivo a cada estado. El motivo asociado con el estado puede ser el
mismo para más de un evento. Esta base de datos de origen tiene cuatro
tablas para cada estado donde se almacenan las razones del estado. Cada
tabla tiene otro campo que lo vincula al código por la razón. Por lo tanto,
solo falta el campo de estado en las tablas.
Cuando busca algo así como, cuando el estado en la tabla principal dice
retraso, la consulta debe recuperar el nombre del evento que tiene el
código para el retraso. La consulta debe hacer lo mismo, si el estado está
inactivo. La consulta buscará el evento en las diferentes tablas de estado.

100
El objetivo aquí es, por lo tanto, crear un resultado que no utilice códigos
sino que utilice descripciones. Caminemos juntos por la solución.

Veamos la vista general de las diferentes tablas y luego el problema de


hacer coincidir las tablas. En este ejemplo, necesitamos usar condiciones
para coincidir con las tablas en función del valor del estado.

Es fácil derivar el nombre de estado y puede usar la unión interna para


esto. Es difícil mostrar el nombre de la razón. Cuando te lo propongas, te

101
darás cuenta de que la respuesta siempre depende de qué tan bien
entiendas las diferentes tablas de razones. Si puede tratar las tablas de
razones de la misma manera, puede unirlas todas a la vez y evitar cualquier
entrada duplicada que solucione el problema.
Si piensa en esto, sabe que puede usar una unión para realizar esta función.
Cada tabla tiene la misma estructura que nos facilita la creación de una
tabla derivada. Esta tabla será el resultado de la combinación de las tablas
de razones que luego se pueden unir a la tabla original utilizando el código
de estado y listo. Esto evitará la necesidad de hacer coincidir
continuamente las cuatro tablas.
La respuesta se puede desglosar en las siguientes soluciones:
1. Use una combinación en la tabla de estado para obtener un
nombre.
2. Utilice un UNION para combinar las cuatro tablas de razones y
evitar la necesidad de usar la coincidencia condicional
3. Incorpore el resultado del paso anterior en la consulta final usando
una subconsulta
Ahora, veamos cada uno de estos problemas en orden.

Usando UNION INTERNA para identificar el


StatusName

Es importante que obtenga el StatusName de las tablas que corresponden


al código de estado en los eventos que tiene. Para ello, tendremos que
utilizar el INNER JOIN. Si recuerda, la unión interna devolverá filas solo
cuando se cumpla la condición de unión, y este es el método de unión más
común utilizado. Si recuerda los ejemplos del capítulo anterior, sabrá que
se puede utilizar una combinación interna para hacer coincidir las claves
primarias y externas. Solo cuando estas claves coinciden, la consulta
devuelve las filas. Esto es lo que tienes en el problema. La clave principal
es el código de estado en la tabla de estado. Debe hacer coincidir este
código con el Código de estado (clave externa) de la tabla de eventos. No
tiene que preocuparse por que la consulta devuelva varias filas ya que el
código de estado es único para cada registro en la tabla de estado. Veamos
cómo se está haciendo esto.

102
Veamos la consulta:
SELECCIONE EventID,
Duración,
Nombre de
DESDE EVENTO E
INNER JOIN Estado S
ON E.StatusCode = S.StatusCode
Hay que hacer más, ya que también debe incluir el nombre del
motivo. Sin embargo, este es un buen comienzo.

Combinando las filas de la tabla de razones usando


UNION

UNION es uno de los diferentes operadores de conjuntos, que es


una declaración utilizada para combinar diferentes filas de una tabla
en un resultado. Una combinación combina columnas de diferentes
tablas en filas distintas para cada clave primaria. El operador
UNION agrega filas de cada tabla en una tabla. Veamos las cuatro

103
tablas separadas por las razones.

When you apply the union clause, you combine every row from these
tables. You will also notice is that you are including a static column which
will correspond to the code in the other tables. What I mean by a static
column is that it is a fixed value. When you do this, you can associate the
rows in every table with a single code. You must remember that this was
one of the hurdles that we needed to overcome. We were unable to identify
a way to match the records in every table by using a status code. You can
use the reason and status codes to match different rows.
SELECT 'R', ReasonCode, Name
FROM ReadyReason
UNION
SELECT 'D1', ReasonCode, Name
FROM DelayReason
UNION
SELECT 'S', ReasonCode, Name
FROM SpareReason
UNION
SELECT 'D2', ReasonCode, Name

104
FROM DownReason

Using a Subquery to Produce the Final Result that


Includes the Derived Table

When the union is created, the user can now match that output with the
reasons table and match the reasons. The diagram below shows that the
matching becomes easier now. You no longer have to look at the status
code and map that code to the reason before you can get the name of the
reason. You can instead use the standard INNER join and match the
derived table with the reason table. You can match the reason code and the
status code to identify the reason. You may now wonder how you can
include this result in the query.
You can fortunately do this by using subqueries. As mentioned earlier, a
subquery is a query that is defined within another query. There are
multiple places in a query where you can use a subquery. It is a good idea
to use a subquery within a FROM since this statement will refer to derived
tables. We now have a derived table which is the result of the UNION. A
derived table is enclosed in a parenthesis, but it is also given a name.

Si observa detenidamente, observará que el resultado de UNION se


llama SR y que a los campos estáticos se les asigna un nombre de
columna. Esto es para asegurar que se refiera a la tabla en la
condición de unión, lo que facilita que un usuario lea y siga SQL.

105
Veamos el siguiente código:
SELECCIONE EventID,
Duración,
SR.ReasonName
DESDE EVENTO E
UNIR INTERNAMENTE
(
SELECCIONE 'R' como StatusCode, ReasonCode, Name
De ReadyReason
UNIÓN
SELECCIONE 'D1', ReasonCode, Nombre
De DelayReason
UNIÓN
SELECCIONA 'S', ReasonCode, Nombre
De SpareReason
UNIÓN
SELECCIONE 'D2', ReasonCode, Nombre
DESDE LA RAZON
) SR
ON E.StatusCode = SR.StatusCode AND
E.ReasonCode = SR.ReasonCode
La unión interna toma la siguiente forma: INNER JOIN {table} ON
{condiciones de coincidencia}. En el ejemplo anterior, la tabla
derivada reemplaza a la tabla. Funciona muy bien en este caso.

Consulta final

Si desea crear el resultado final, debe combinar las soluciones

106
secundarias de las secciones anteriores. Si observa las soluciones de
arriba, sabe que lo que tenemos que hacer es relativamente simple.
Es importante mantener la sintaxis, pero la idea general es sencilla.
Puede ser difícil entender la solución si todo se presenta como una
consulta, pero espero que haya entendido cómo surgió esta
solución.

SELECCIONE EventID,
Duración,
S.Nombre como [Nombre de estado],
SR.ReasonName como [Nombre del motivo]
DESDE EVENTO E
INNER JOIN Estado S
ON E.StatusCode = S.StatusCode
UNIR INTERNAMENTE
(
SELECCIONE 'R', ReasonCode, Nombre
De ReadyReason
UNIÓN
SELECCIONE 'D1', ReasonCode, Nombre
De DelayReason

107
UNIÓN
SELECCIONA 'S', ReasonCode, Nombre
De SpareReason
UNIÓN
SELECCIONE 'D2', ReasonCode, Nombre
DESDE LA RAZON
) SR
ON E.StatusCode = SR.StatusCode AND
E.ReasonCode = SR.ReasonCode
Ahora podemos concluir el estudio de caso. Espero que haya podido
comprender el uso de uniones, operadores y subconsultas. Cuando mira la
consulta final, puede ver que incluye los tres conceptos simples. La
mayoría de las personas cuestionan el proceso y cómo deben escribir
programas complejos. Esto se debe a que no saben por dónde pueden
empezar. Es necesario recordar para avanzar a través de la consulta. Esto
significa que debe resolver el problema y luego tratar de resolver los trozos
más pequeños del problema antes de analizar todo el problema.

108
Capítulo Dieciséis: Diez errores de novato

La mayoría de las personas a menudo leen sobre SQL solo cuando intentan
aprender cómo construir sistemas de bases de datos relacionales.
Definitivamente no estudiarías SQL por diversión. SQL se utiliza para
construir aplicaciones que funcionan en la base de datos. Antes de crear
una, deberá crear o extraer una base de datos para trabajar. Varios
proyectos a menudo fallan mucho antes de que el código se escriba debido
a una base de datos incorrecta. Es imperativo que la base de datos que
obtenga o cree tenga la estructura correcta necesaria para que la aplicación
funcione. Este capítulo cubre diez errores que a menudo se cometen
cuando se trata de crear bases de datos.

Asumiendo que sus clientes saben lo que necesitan

Los clientes a menudo llaman a un experto para diseñar y crear una base
de datos si tienen un problema con los métodos actuales que se utilizan. A
menudo creen que han identificado tanto el problema como la solución y
todo lo que deberían hacer es decirle lo que debe hacerse. Cuando le das a
tus clientes exactamente lo que quieren, cavarás tu propia tumba. La
mayoría de los gerentes y usuarios no poseen los conocimientos o
habilidades necesarios para identificar un problema con precisión.
Tampoco tienen las habilidades para identificar la solución.
Deberá convencer al cliente de que posee las habilidades necesarias para
identificar los problemas dentro del sistema y analizar los problemas
dentro del sistema que necesitará para revisar el diseño de la base de datos.
La causa a menudo se oculta detrás de los síntomas evidentes.

Ignorando el alcance del proyecto

109
Cuando comience a trabajar en el desarrollo de una nueva base de datos o
una aplicación para esa base de datos, su cliente le dirá lo que espera de
esa aplicación. Hay momentos en que el cliente se olvida de decirle algo.
A lo largo del trabajo, surgirán nuevos requisitos, y estos deberán incluirse
en el proyecto. Siempre asegúrese de que todo lo que se le pide que haga
se entregue por escrito antes de comenzar a trabajar en el proyecto. Si le
pagan en base a un proyecto en lugar de una base por hora, estos nuevos
requisitos definitivamente convertirán lo que una vez fue un trabajo
rentable en una gran pérdida para usted. Si hay nuevas adiciones que
surjan, estas deberían ser compensadas tanto en tiempo como en dinero.

Teniendo en cuenta los factores técnicos solos

Los desarrolladores de aplicaciones siempre miran los proyectos


potenciales en términos de si el proyecto es factible o no. Luego basarán
sus estimaciones basadas en esa determinación. Los problemas de
disponibilidad de recursos, políticas de la organización, costos máximos y
requisitos de programación siempre afectan los proyectos. Estos problemas
pueden convertir un proyecto simple en uno complicado. Por lo tanto, debe
comprender los factores relevantes antes de comenzar a desarrollar el
proyecto. Siempre es una buena idea decidir si tiene sentido trabajar en el
proyecto o no antes de comenzar a trabajar en él.

Nunca tomando retroalimentación

Siempre querrá escuchar a su gerente debido a su experiencia. Los


usuarios de cualquier aplicación no pueden decir mucho. Hay ocasiones en
las que también debe ignorar a su gerente, y por una buena razón. A
menudo no tienen idea de lo que quieren los usuarios, pero esto no
significa que sepa más sobre los clientes y lo que necesitan. Siempre debe
recibir comentarios de todos los miembros de la organización o equipo, y
solo aplicar los comentarios que le ayudarán a crear una buena aplicación.

Usando un solo entorno de desarrollo

110
Es posible que haya pasado semanas, meses o quizás años para dominar el
uso de SQL u otros sistemas de administración de bases de datos.
Independientemente del entorno que desee utilizar, debe comprender que
tiene sus propias fortalezas y debilidades. Hay ocasiones en las que
necesita crear una aplicación para la que no puede usar la herramienta en
la que tiene la capacidad de dominar, y la mejor opción aquí sería morder
la bala. Debe decirles a sus clientes que no se puede hacer el trabajo, o
debería tomarse un tiempo para mejorar su aprendizaje. También puede
decirles a sus clientes que se acerquen a otra persona o desarrollador para
la tarea si no puede trabajar en ello.

Usando un tipo de arquitectura del sistema

Los sistemas de gestión de bases de datos utilizados en el entorno de


teleproceso son diferentes de los utilizados en la industria de clientes y
servidores. Estos sistemas también son diferentes de los que se utilizan en
entornos de bases de datos distribuidas. Es posible que las bases de datos
que utiliza en el trabajo no siempre funcionen con otros tipos de datos. Por
lo tanto, debe elegir la arquitectura correcta, incluso si eso significa que
pasa el trabajo.

Aislar diseños de tablas de bases de datos

Cuando identifique los objetos de datos y las relaciones de manera


incorrecta, la tabla de la base de datos introducirá algunos errores en la
base de datos que destruirán la validez de los resultados. Si desea diseñar
una base de datos perfecta, siempre debe considerar la organización de los
datos en la base de datos y determinar cómo estos datos están relacionados
entre sí. No hay un diseño correcto que debas usar. Solo necesita
determinar cuál es el diseño apropiado para sus datos según las
necesidades del proyecto.

Descuidar comentarios
111
Debes recordar que nadie puede escribir el código perfecto. Incluso el
mejor desarrollador puede pasar por alto algunos puntos, y él o ella solo
pueden identificar esos puntos si alguien más busca el código. Siempre
debe presentar su trabajo para una revisión antes de lanzarlo al mercado ya
que le ayudará a redefinir su trabajo. Esto te ayudará a mejorar el
programa. Siempre debe tener una revisión profesional antes de comenzar
a desarrollar el código o la aplicación.

Prueba de salto

Si hay una aplicación de base de datos compleja que está utilizando puede
tener algunos errores, y es importante que aborde estos errores lo antes
posible. Puede probar la base de datos de todas las formas posibles, pero
aún puede contener algunos errores ocultos. Por lo tanto, debe entregar la
solicitud a las personas que no saben cuál es su propósito y pedirles que la
utilicen. Le proporcionarán más información sobre los errores ocultos que
le permitirán mejorar su programa. Siempre debe aprender a solucionar el
problema antes de que lo utilice un grupo más grande de personas.

Sin documentación

Si cree que la aplicación que está utilizando es perfecta y no tiene que ser
ajustada o alterada, debe volver a pensar. Debe recordar que llegará el
momento en que necesite realizar algunos cambios en el código. Es posible
que no recuerdes por qué escribiste el código de una manera específica.
Por lo tanto, es importante que documente su trabajo para comprender por
qué escribió el código de una manera específica. Si se muda de la empresa
o se muda a un equipo diferente, la persona que se presente como su
reemplazo debe saber qué debe hacerse con el código. Él o ella también
deben saber por qué escribiste el código de una manera específica.
Siempre puede sobre-documentar su trabajo, ya que es importante que
agregue tantos detalles como pueda sobre la aplicación.

112
Capítulo Diecisiete: Diez consejos para una
fácil recuperación

Una base de datos es similar a un tesoro virtual de información, y la mayor


parte de esta información está oculta a la vista. Debe usar la instrucción
SQL SELECT para desenterrar esta información oculta. Puede tener una
idea clara sobre qué información desea desenterrar, pero puede ser difícil
traducir esa idea en código SQL. Si su consulta es incorrecta, terminará
con los resultados incorrectos. Debe seguir los siguientes principios para
asegurarse de que su base de datos funciona de la manera adecuada.

Verificar la estructura de la base de datos.

Cuando recupera datos de una base de datos y descubre que los resultados
no son los esperados, debe verificar el diseño de la base de datos. Muchas
personas utilizan bases de datos mal diseñadas, y debe asegurarse de

113
corregir su base de datos antes de trabajar con ella. Es necesario un buen
diseño para garantizar que mantiene la integridad de los datos.

Prueba la base de datos

Siempre debe crear una base de datos que tenga la misma estructura que la
base de datos real. Esta base de datos de prueba no tiene que contener
todos los valores. Debe elegir los datos para los que sabe qué resultados
esperar. Ejecute la consulta en el conjunto de datos y vea si recibe el
resultado deseado. Es posible que deba volver a formular su consulta en
función de la salida que necesite.
Siempre debe crear varios conjuntos de datos de prueba que también
incluyan algunos casos impares como valores extremos o tablas vacías.
Siempre debes pensar en los escenarios improbables y siempre probarlos.
También debe observar el comportamiento adecuado y tomar nota de ello.
Cuando verifique su base de datos y las consultas, también debe
comprender dónde puede tener problemas.

Revisar consultas con JOIN

Una unión es contra intuitiva. Debes asegurarte de que la declaración de


JOIN en tu código se esté realizando de la manera exacta que querías.
Debe agregar otras cláusulas a la sentencia solo cuando esté seguro de que
la sentencia JOIN está funcionando correctamente.
Las uniones son conocidas por ser contrarias a la intuición. Si su consulta
contiene uno, asegúrese de que está haciendo lo que espera antes de
agregar cláusulas WHERE u otros factores de complicación.

Siempre revisa las consultas con subselecciones

La mayoría de las personas abusan de la declaración de subselección. Una


declaración de subselección le permite tomar los datos de una tabla y usar
una declaración de selección interna para tomar los datos de otra tabla.

114
Debe asegurarse de que los datos en la instrucción SELECT interna sean
los datos que la instrucción SELECT externa debe devolver como salida.
Si tiene más de una declaración de subselección, debe tener mucho
cuidado con el código.

Resumir datos utilizando GROUP BY

Supongamos que tiene una tabla NACIONAL que proporciona


información sobre el JUGADOR, el EQUIPO y la cantidad de jonrones
que el jugador ha anotado en la Liga Nacional. Si desea recuperar el
número total de jonrones para un equipo, debe usar la siguiente consulta:
Selecciona un equipo,
SUMA (Homers) DE NACIONAL
GRUPO POR EQUIPO;
Esta consulta enumerará los equipos y los números de jonrones que el
equipo ha golpeado en la temporada.

Cuidado con las restricciones de la cláusula

Si desea usar una lista de bateadores en la liga nacional, puede usar la


siguiente consulta:
SELECCIONAR Jugador, Equipo, Homers DEL NACIONAL
DONDE Homers> = 20
GRUPO POR EQUIPO;
En la mayoría de las herramientas de base de datos, la consulta devolverá
un error. Las columnas que utiliza en una función de agrupación o en una
función de conjunto siempre aparecerán en la lista de selección. Puedes
usar la siguiente sintaxis para el mismo:
SELECCIONAR Jugador, Equipo, Homers DEL NACIONAL
DONDE Homers> = 20
GRUPO POR Equipo, Jugador, Homers;
La consulta funcionará de la forma que desee, ya que desea mostrar todas

115
las columnas que aparecerán en la cláusula GROUP BY. Por lo tanto, la
consulta le dará los resultados deseados. La herramienta SQL primero
ordenará los resultados según el Equipo, luego por Jugador y finalmente
por Homers.

Utilice siempre paréntesis para operadores lógicos

Cuando mezcla las declaraciones AND y OR en SQL, no procesará la


información de la forma que desea. Siempre debe usar los paréntesis para
asegurarse de obtener el resultado deseado. Los paréntesis también ayudan
a garantizar que las palabras clave se apliquen a los operandos o
expresiones necesarios.

Controlar los privilegios de recuperación

La mayoría de las personas no utilizan las funciones de seguridad que


ofrece SQL. No se preocupan por la seguridad de sus datos. Creen que
solo algunas personas utilizarán mal los datos en su base de datos. Nunca
debes construir una base de datos con esta mentalidad. Siempre debe
mantener y establecer la seguridad de cualquier base de datos,
independientemente de su importancia.

Crear una copia de seguridad regular


Es difícil recuperar datos si hubo una calamidad natural como un
terremoto, una inundación o un incendio. Por lo tanto, siempre debe crear
una copia de seguridad de sus datos y cambiar la copia de seguridad a un
lugar seguro. La definición de un lugar seguro depende de cuán críticos
sean sus datos. Puede guardar la copia de seguridad en una habitación a
prueba de incendios, o en otro edificio, dependiendo de lo que mejor le
funcione. Debe asegurarse de que sus datos estén seguros y que haya una
copia de seguridad reciente de los datos disponibles para usted.

Manejar las condiciones de error con gracia

116
Independientemente de si está incrustando consultas desde una aplicación
o en una aplicación o creando una consulta ad hoc desde la consola, SQL
puede devolver un mensaje de error en lugar del resultado. Si el mensaje
de error aparece en la consola, puede decidir qué desea hacer a
continuación según el mensaje de error. Si el mensaje de error aparece en
una aplicación, la situación cambia ya que el usuario no sabe qué acción
debe realizar para superar el error. Por lo tanto, siempre debe incluir el
manejo de errores en su sistema para cubrir cualquier error que pueda
surgir. Lleva tiempo crear un código de manejo de errores, pero siempre es
mejor incluir el código en lugar de mirar la pantalla cuando aparece un
mensaje de error.

Consejos adicionales para manejar los errores

Siempre use paréntesis

Siempre debe recordar utilizar caracteres de cierre para evitar comillas


desequilibradas, corchetes, paréntesis y comillas dobles. Los expertos
sugieren que primero escriba los caracteres de abrir y cerrar antes de
escribir los datos que deben estar entre los paréntesis. El siguiente error le
mostrará qué error recibirá cuando haya parámetros no balanceados:
SELECCIONAR apellido, nombre del empleado
DÓNDE salario> = (seleccione AVG (salario) del empleado;
ERROR: error de sintaxis en o cerca de ";"
LÍNEA 2: DONDE el salario> = (seleccione AVG (salario) del empleado;

Nunca uses comas al final de las secuencias


En SQL, las comas actúan como separadores. Nunca debe incluir una
coma entre la palabra clave FROM y los nombres después de la palabra
clave. Es un error común.
SELECCIONAR * DEL EMPLEADO

117
ERROR: error de sintaxis en o cerca de ","
LÍNEA 1: SELECCIONAR * DE empleado, departamento

Utilice la evaluación de consultas parciales para depurar


consultas largas

pgAdmin, Navicat y otros clientes SQL le permiten ejecutar una parte de


la consulta. Todo lo que necesita hacer es resaltar la parte del código que
desea evaluar. De esta manera usted puede arreglar el código donde sea
necesario. En el siguiente ejemplo, hay dos errores.
SELECCIONE llastname, nombre de pila del empleado
DÓNDE salario> = (seleccione MAXI (salario) del empleado;
ERROR: la columna "llastname" no existe
LÍNEA 1: SELECCIONE llastname, firstname DE empleado
Si ejecuta el código completo, obtendrá un error sobre paréntesis
desequilibrados.
SELECCIONE llastname, nombre de pila del empleado
DÓNDE salario> = (seleccione MAXI (salario) del empleado;
ERROR: error de sintaxis en o cerca de ";"
LÍNEA 2: DONDE el salario> = (seleccione MAX (salario) del empleado;
También puede utilizar una subconsulta y ejecutar el programa por
separado. Veamos el siguiente ejemplo:
SELECCIONE llastname, nombre de pila del empleado
DÓNDE salario> = (seleccione MAXI (salario) del empleado;
ERROR: la función maxi (numérica) no existe
LÍNEA 1: seleccione MAXI (salario) de empleado

Preste atención a los nombres de columnas y tablas

Debe prestar mucha atención a los nombres de las pestañas y las columnas.
Intente pegar los nombres de un comando anterior, ya que sabe que el

118
nombre será correcto. Siempre es una buena idea copiar y pegar los
nombres si cree que no puede escribirlos. Si escribe incorrectamente el
nombre de una tabla o columna, debe mirar la parte DE de su código. Debe
asegurarse de que el nombre de la columna esté presente en el nombre de
la tabla que sigue a FROM.
SELECCIONE llastname, firstname DE empleados
ERROR: la tabla "empleados" no existe
LÍNEA 1: SELECCIONE llastname, firstname DE los empleados
Alternativamente, puede usar un nombre de tabla o un alias como el
prefijo de un nombre de columna. Esto ayudará cuando use dos tablas
diferentes para obtener la información. El siguiente error aparecerá si tiene
columnas con nombres idénticos en diferentes tablas.
SELECCIONAR apellido, nombre
Del departamento, empleado
DONDE depto_id = depto_id
ERROR: la referencia de columna "depto_id" es ambigua
LINEA 3: DONDE depto_id = depto_id
SELECCIONAR apellido, nombre
Del departamento, empleado
DONDE department.depto_id = employee.depto_id
Puede corregir estos errores incluyendo el nombre de la tabla como un
prefijo al nombre de la columna.

Capítulo Dieciocho: Ejercicio

119
Este capítulo tiene tres tablas y algunas preguntas al final del capítulo. Si
está solicitando ingreso a una organización que usa SQL, debe responder
las preguntas de este capítulo antes de buscar la solución al final del libro.
Siempre es una buena idea practicar preguntas para dominar un tema. Es
por este motivo que hay una serie de treinta preguntas en este capítulo que
puede utilizar para mejorar su aprendizaje. También puede usar el script
SQL en el capítulo para crear los datos y tablas de prueba. La mayoría de
las preguntas en este capítulo son aquellas que hacen las principales
compañías y empresas.
Deberá usar las siguientes tablas para responder a sus consultas.
Tabla 1 – Trabajador
RKER_ID PRIMER APELLIDO SALARIO FECHA DEPARTMENTO
NOMBRE DE
JUNTAR
001 Monika Arora 100000 2014-02- HR
20
09:00:00
002 Niharika Verma 80000 2014-06- Admin
11
09:00:00
003 Vishal Singhal 300000 2014-02- HR
20
09:00:00
004 Amitabh Singh 500000 2014-02- Admin
20
09:00:00
005 Vivek Bhati 500000 2014-06- Admin
11
09:00:00
006 Vipul Diwan 200000 2014-06- Account
11
09:00:00
007 Satish Kumar 75000 2014-01- Account
20
09:00:00
008 Geetika Chauhan 90000 2014-04- Admin

120
11
09:00:00

Tabla 2 - Bonificación
TRABAJADOR_REF_ID BONO_FECHA BONO_CANTIDAD
1 2016-02-20 00:00:00 5000
2 2016-06-11 00:00:00 3000
3 2016-02-20 00:00:00 4000
1 2016-02-20 00:00:00 4500
2 2016-06-11 00:00:00 3500
Tabla 3 - Título
TRABAJADOR_REF_ID TRABAJADOR_TITULO AFECTACION_DE
1 Manager 2016-02-20 00:00:00
2 Executive 2016-06-11 00:00:00
8 Executive 2016-06-11 00:00:00
5 Manager 2016-06-11 00:00:00
4 Asst. Manager 2016-06-11 00:00:00
7 Executive 2016-06-11 00:00:00
6 Lead 2016-06-11 00:00:00
3 Lead 2016-06-11 00:00:00
Debe ejecutar la siguiente consulta si desea preparar sus datos de muestra.
CREAR BASE DE DATOS ORG;
MOSTRAR BASES DE DATOS;
UTILICE ORG;
CREAR TABLA DE TRABAJADOR (
WORKER_ID INT NO NULL CLAVE PRIMARIA
AUTO_INCREMENT,
FIRST_NAME CHAR (25),
LAST_NAME CHAR (25),
SALAR INT (15),
JOINING_FECHA DE FECHA,
DEPARTAMENTO CHAR (25)

121
);

Insertar en el trabajador
VALORES (TRABAJADOR_ID, PRIMER_NOMBRE,
APELLIDO, SALARIO, UNION_FECHA, DEPARTMENTO)
(001, 'Monika', 'Arora', 100000, '14 -02-20 09.00.00 ',' HR '),
(002, 'Niharika', 'Verma', 80000, '14 -06-11 09.00.00 ',' Admin '),
(003, 'Vishal', 'Singhal', 300000, '14 -02-20 09.00.00 ',' HR '),
(004, 'Amitabh', 'Singh', 500000, '14 -02-20 09.00.00 ',' Admin '),
(005, 'Vivek', 'Bhati', 500000, '14 -06-11 09.00.00 ',' Admin '),
(006, 'Vipul', 'Diwan', 200000, '14 -06-11 09.00.00 ',' Cuenta '),
(007, 'Satish', 'Kumar', 75000, '14 -01-20 09.00.00 ',' Cuenta '),
(008, 'Geetika', 'Chauhan', 90000, '14 -04-11 09.00.00 ',' Admin ');

Bono CREAR TABLA (


TRABAJADOR_REF_ID INT,
BONO_CANTIDAD INT (10),
BONO _FECHA TIEMPODEFECHA,
LLAVE EXTRANJERA (WORKER_REF_ID)
REFERENCIAS Trabajador (TRABAJADOR_ID)
EN LA ELIMINACIÓN DE CASCADAS
);

Insertar en Bono
VALORES (TRABAJADOR_REF_ID, BONO_CANTIDAD,
BONO_FECHA)
(001, 5000, '16 -02-20 '),
(002, 3000, '16 -06-11 '),
(003, 4000, '16 -02-20 '),
(001, 4500, '16 -02-20 '),

122
(002, 3500, '16 -06-11 ');
CREAR TABLA Título (
TRABAJADOR_REF_ID INT,
TRABAJADOR_TITULO CHAR (25),
AFECTADO_DE TIEMPODEFECHA,
LLAVE EXTRANJERA (TRABAJADOR_REF_ID)
REFERENCIAS Trabajador (TRABAJADOR_ID)
EN LA ELIMINACIÓN DE CASCADAS
);

INSERTAR EN EL título
VALORES (TRABAJADOR_REF_ID,
TRABAJADOR_TITULO, AFECTADO_DE)
(001, 'Manager', '2016-02-20 00:00:00'),
(002, 'Ejecutivo', '2016-06-11 00:00:00'),
(008, 'Ejecutivo', '2016-06-11 00:00:00'),
(005, 'Manager', '2016-06-11 00:00:00'),
(004, 'Asst. Manager', '2016-06-11 00:00:00'),
(007, 'Ejecutivo', '2016-06-11 00:00:00'),
(006, 'Lead', '2016-06-11 00:00:00'),
(003, 'Lead', '2016-06-11 00:00:00');
Verás el siguiente resultado en tu ventana:

Una vez que tenga los datos, puede comenzar a trabajar en las preguntas de

123
este capítulo.
1. Escriba una consulta SQL para obtener "PRIMER_NOMBRE" de
la tabla de trabajo usando el nombre de alias como
<TRABAJADOR_NOMBRE>.
2. Escriba una consulta SQL para obtener "PRIMER_NOMBRE" de
la tabla de trabajo en mayúsculas.
3. Escriba una consulta SQL para obtener los valores únicos del
DEPARTAMENTO de la tabla de trabajo.
4. Escriba una consulta SQL para imprimir los primeros tres
caracteres de "PRIMER_NOMBRE" de la tabla de trabajo.
5. Escriba una consulta SQL para encontrar la posición del alfabeto
(‘A’) en la columna del primer nombre ‘Amitabh’ de la tabla del
trabajador.
6. Escriba una consulta SQL para imprimir el
"PRIMER_NOMBRE" de la tabla de trabajo después de eliminar
espacios en blanco del lado derecho.
7. Escriba una consulta SQL para imprimir el DEPARTAMENTO
de la tabla del trabajador después de eliminar los espacios en blanco
del lado izquierdo.
8. Escriba una consulta SQL que recoja los valores únicos de
DEPARTAMENTO de la tabla de trabajo y imprima su longitud.
9. Escriba una consulta SQL para imprimir el
"PRIMER_NOMBRE" de la tabla de trabajo después de reemplazar
‘A’ con ‘A’
10. Escriba una consulta SQL para imprimir "PRIMER_NOMBRE"
y APELLIDO de la tabla de trabajo en una sola columna
COMPLETE_NOMBRE. Un personaje espacial debería separarlos.
11. Escriba una consulta SQL para imprimir todos los detalles del
trabajador desde el orden de la tabla del trabajador mediante
"PRIMER_NOMBRE" ascendente.
12. Escriba una consulta SQL para imprimir todos los detalles de los
trabajadores desde la orden de la tabla de trabajadores por
"PRIMER_NOMBRE" ascendente y el DEPARTAMENTO
descendente.

124
13. Escriba una consulta SQL para imprimir los detalles de los
trabajadores con el primer nombre como "Vipul" y "Satish" de la
tabla Trabajador.
14. Escriba una consulta SQL para imprimir detalles de los
trabajadores que excluyen los primeros nombres, "Vipul" y "Satish"
de la tabla de trabajadores.
15. Escriba una consulta SQL para imprimir los detalles de los
trabajadores con DEPARTAMENTO nombre como "administrador".
16. Escriba una consulta SQL para imprimir detalles de los
trabajadores cuyo "PRIMER_NOMBRE" contiene ‘A’
17. Escriba una consulta SQL para imprimir los detalles de los
trabajadores cuyo "PRIMER_NOMBRE" termina con ‘A’
18. Escribe una consulta SQL para imprimir los detalles de los
trabajadores cuyos nombres de "PRIMER_NOMBRE" finalizan con
‘H’ y contienen seis alfabetos
19. Escriba una consulta SQL para imprimir detalles de los
trabajadores cuyo SALARIO se encuentra entre 100000 y 500000.
20. Escriba una consulta SQL para imprimir detalles de los
trabajadores que se han unido en febrero de 2014.
21. Escriba una consulta SQL para obtener el número de empleados
que trabajan en el ‘Admin 'del departamento.
22. Escriba una consulta SQL para obtener nombres de trabajadores
con salarios> = 50000 y <= 100000.
23. Escriba una consulta SQL para obtener el número de
trabajadores para cada departamento en orden descendente.
24. Escriba una consulta SQL para imprimir detalles de los
trabajadores que también son gerentes.
25. Escriba una consulta SQL para obtener registros duplicados que
tengan datos coincidentes en algunos campos de una tabla.
26. Escriba una consulta SQL para mostrar solo filas impares de
una tabla.
27. Escriba una consulta SQL para mostrar solo filas pares de una
tabla.
28. Escriba una consulta SQL para clonar una tabla nueva de otra

125
tabla.
29. Escriba una consulta SQL para obtener registros de intersección
de dos tablas.
30. Escriba una consulta SQL para mostrar registros de una tabla que
otra tabla no tenga.

126
Capítulo Diecinueve: Usando SQL Con
Aplicaciones

Hemos visto cómo podemos usar SQL de forma aislada. Por ejemplo,
pasamos por diferentes formas de crear tablas y qué operaciones puede
realizar en esas tablas para recuperar las respuestas requeridas. Si solo
desea aprender cómo funciona SQL, puede usar este tipo de aprendizaje,
pero no es así como se usa SQL.
La sintaxis de SQL es cercana al inglés, pero no es un idioma fácil de
dominar. La mayoría de los usuarios de computadoras no están
familiarizados con SQL, y puede asumir que siempre habrá personas que
no saben cómo trabajar con SQL. Si surge una pregunta sobre una base de
datos, un usuario nunca usará una declaración SELECT para responder esa
pregunta. Los desarrolladores de aplicaciones y los analistas de sistemas
son probablemente las únicas personas que se sienten cómodas con el uso
de SQL. No hacen una carrera escribiendo consultas en una base de datos
para recuperar información. En su lugar, desarrollan aplicaciones que
escriben consultas.
Si desea realizar la misma operación continuamente, debe asegurarse de no
tener que reconstruir esa operación desde cero. En su lugar, escribe una
aplicación para hacer el trabajo por ti. Si usa SQL en la aplicación,
funcionará de manera diferente.

SQL en una aplicación

Puedes creer que SQL es un lenguaje de programación incompleto. Si


desea utilizar SQL en una aplicación, debe combinar SQL con cualquier
otro lenguaje de procedimiento como FORTRAN, Pascal, C, Visual Basic,
C ++, COBOL o Java. SQL tiene algunas fortalezas y debilidades debido a
cómo está estructurado el lenguaje. Un lenguaje de procedimiento que está
estructurado de manera diferente tendrá diferentes fortalezas y debilidades.
Cuando combina los dos idiomas, puede superar las debilidades de SQL y
el lenguaje de procedimiento.

127
Puede crear una aplicación potente al combinar SQL y un lenguaje de
procedimiento. Esta aplicación tendrá una amplia gama de capacidades. En
las discusiones de los capítulos anteriores, usamos el asterisco para indicar
que queremos incluir todas las columnas en la tabla. Si esta tabla tiene
muchas columnas, puede ahorrar mucho tiempo escribiendo el asterisco.
No es una buena idea usar el asterisco cuando está escribiendo un
programa en un lenguaje de procedimiento. Una vez que haya escrito la
aplicación, es posible que desee agregar o eliminar una columna de la tabla
cuando ya no sea necesaria. Cuando haces esto, cambias el significado del
asterisco. Si usa el asterisco en la aplicación, puede recuperar las columnas
que cree que está obteniendo.
Este cambio no afectará el programa existente hasta que necesite
recompilarlo para hacer algún cambio o corregir un error. El efecto del
comodín de asterisco se expandirá a las columnas actuales. Esto hará que
la aplicación falle cuando no pueda identificar el error durante el proceso
de depuración. Por lo tanto, cuando construya una aplicación, refiérase a
los nombres de columna explícitamente en la aplicación y evite usar el
asterisco.

128
Capítulo Veinte: Programa Java Embedded
(incrustado) SQL

En este capítulo, cubriremos información sobre cómo puede incrustar SQL


en una aplicación Java. Para los fines de este capítulo, utilizaremos una
base de datos PostgresSQL como backend, pero puede usar cualquier otra
base de datos como backend en lugar de PostgresSQL. Es posible que deba
realizar algunos cambios en el tutorial. Necesitas tener la siguiente
configuración en tu computadora:
1. Java SDK
2. Eclipse DBE
3. Algunos DBMS
Es muy fácil incrustar SQL en una aplicación Java. Debe utilizar el
controlador JDBC adecuado en el sistema para la base de datos. Este
controlador es un archivo que proporciona la API que debe usar para
escribir consultas en la base de datos. Puede usar Google para identificar
qué controlador debe usar para su base de datos. Para los usuarios de
Postgres, el controlador se puede encontrar en la siguiente ubicación:
http://jdbc.postgresql.org/ . Debe descargar el controlador en el directorio
que usará para el desarrollo de la aplicación. Una vez que haya descargado
el controlador, puede comenzar a configurar el proyecto y luego emitir una
consulta simple utilizando la base de datos.

Configuración de un proyecto en Eclipse

129
Primero debe crear un nuevo proyecto en eclipse y llamarlo
"Database_Tutorial". Cuando el proyecto esté configurado, debe hacer clic
derecho en el nombre del proyecto y seleccionar "Build Path" (recorrido
construido) y "Configure Build Path". Luego debe hacer clic en " Agregar
tarros externos”y luego busque el controlador JDBC. Esto ayudará a
configurar el entorno que actuará como la interfaz entre usted y su base de
datos.

Hacer la conexión

Ahora, hagamos la conexión a la base de datos. Primero deberá crear un


objeto de conexión rodeado de sentencias catch. Este objeto capturará
aquellas declaraciones que causen algún error. El método
DriveManager.getConnection manejará la conexión que se realiza a la base
de datos. Este método también toma la ubicación de la base de datos de
Postgres y el nombre y la contraseña asociados con esa instancia.
Supongamos que para este ejemplo, el nombre de usuario es Postgres y la
contraseña se pasa.
Conexión c = nula;
tratar {
// El segundo y tercer argumento son el nombre de usuario y la
contraseña,
// respectivamente. Deben ser todo lo necesario para conectarse.
// a la base de datos.
c = DriverManager.getConnection ("jdbc: postgresql: // localhost /",
"postgres", "raíz");
} captura (excepción e) {

}
Ahora debe intentar ejecutar el código anterior en su programa Java. Si no
encuentra ningún error, puede estar seguro de que se ha conectado a la
base de datos. Ahora, deberá consultar la base de datos y obtener algunos
resultados con los que pueda jugar.

130
Permítanos ahora realizar una consulta simple en la base de datos. El
siguiente código imprimirá los resultados en la línea de comando.
importar java.sql.Connection;
importar java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
clase pública tutorial {
Tutorial público () {
Conexión c = nula;
tratar {
// El segundo y tercer argumento son el nombre de usuario y la
contraseña,
// respectivamente. Deben ser todo lo necesario para conectarse.
// a la base de datos.
c = DriverManager.getConnection ("jdbc: postgresql: // localhost
/",
"postgres", "raíz");

String query = "Select * From author";


Declaración s = c.createStatement ();
ResultSet queryResult = s.executeQuery (consulta);

while (! queryResult.isLast ()) {

queryResult.next ();
String authorName = queryResult.getString (1) + "," +
queryResult.getString (2) + "," + queryResult.getString (3);
System.out.println (authorName);
}

131
} captura (excepción e) {
e.printStackTrace ();
}
}

/ **
* @param args
*/
public static void main (String [] args) {
// TODO Generación automática de código auxiliar

Tutorial t = nuevo Tutorial ();


}

}
Si observa el código anterior, verá que ResultSet y Statement son dos
nuevos objetos que hemos incluido en el código. Estas declaraciones
permiten la iteración y la ejecución de los resultados en las filas devueltas.
El objeto ResultSet actuará como un cursor a las filas devueltas y ese
resultado se repetirá en cada fila hasta que el compilador llegue al final del
conjunto.

Agregar entrada de usuario a las consultas

Otra forma de incluir la interactividad del usuario es usar un escáner. Este


escáner esperará la primera entrada del usuario y luego pasará esa
información a un método. Este método construirá la consulta SQL y
llamará a la base de datos. Cuando se incluye la entrada del usuario en este
programa, existe un problema con la amenaza de las inyecciones de SQL,
que es una herramienta de piratería que utilizan la mayoría de los hackers
y crackers éticos.

132
Inyecciones de SQL

Una inyección SQL es un ataque a un sitio web o programa que explota las
vulnerabilidades del programa. Esta inyección modificará la base de datos
que no producirá los resultados deseados. En el programa LibraryViewer,
una inyección de SQL puede ingresar en cualquier campo dependiendo de
la información de entrada que alguien la envíe. Por lo tanto, es
responsabilidad del programador asegurarse de que encuentre una manera
de minimizar este ataque.
Cuando tenga en cuenta la entrada del usuario, debe evitar la
concatenación de la entrada del usuario y la consulta.
//¡¡¡MALO!!!
String query = "Select * From author Where authorid =" + id_input;
La consulta anterior tomará la entrada del usuario. A continuación,
concatenará la entrada con la consulta. Esta es una mala idea ya que puede
eliminar o agregar tablas según las instrucciones proporcionadas por el
usuario. Por ejemplo, si el usuario ingresara “1. Eliminar libros de tablas ',
el manejador de consultas eliminará los libros de tablas, ya que así es
como SQL leerá las instrucciones. Para asegurarse de que esto no ocurra,
debe incluir una verificación de tipo para cada entrada que el usuario
agregue a la consulta. El compilador debe verificar si la entrada del
usuario es siempre un valor entero.
Existe un método llamado PreparedStatement en Java que dificulta que
cualquiera pueda inyectar comandos en la declaración. Esto se debe a que
parametriza la consulta SQL que se está utilizando. El siguiente ejemplo
tiene dos funciones que realizan la misma tarea. Hay uno que usa una
declaración preparada para garantizar que el valor sea un número entero
que el otro solo concatene esa entrada en la consulta.
// AYUDA A PREVENIR INYECCIONES POR EL TIPO DE
CONTROL Y FORTALECIMIENTO DE LA PARAMETERIZACIÓN.
entrada pública vacía (entrada de cadena) {
Conexión c = nula;
tratar {
// El segundo y tercer argumento son el nombre de usuario y la

133
contraseña,
// respectivamente. Deben ser todo lo necesario para conectarse.
// a la base de datos.
c = DriverManager.getConnection ("jdbc: postgresql: // localhost /",
"postgres", "raíz");

String query = "Select * From author Where authorid =?";


PreparedStatement s = c.prepareStatement (consulta);
s.setInt (1, Integer.parseInt (entrada));
ResultSet queryResult = s.executeQuery ();

while (! queryResult.isLast ()) {

consultaResult.next ();
String authorName = queryResult.getString (1) + "," +
queryResult.getString (2) + "," + queryResult.getString (3);
System.out.println (authorName);
}

} captura (excepción e) {
e.printStackTrace ();
}

// NO HACE TAL ERROR EN LA VERIFICACIÓN Y SOLO


ENCUENTRA LA CADENA DE ENTRADA. ¡¡¡MUY MAL!!!
public void inputBad (entrada de cadena) {
Conexión c = nula;
tratar {

134
// El segundo y tercer argumento son el nombre de usuario y la
contraseña,
// respectivamente. Deben ser todo lo necesario para conectarse.
// a la base de datos.
c = DriverManager.getConnection ("jdbc: postgresql: // localhost /",
"postgres", "raíz");

String query = "Select * De autor Where authorid =" + input + ";";


Declaración s = c.createStatement ();
ResultSet consultaResultado = s.executeQuery (consulta);

while (! queryResult.isLast ()) {

queryResult.next ();
String authorName = queryResult.getString (1) + "," +
queryResult.getString (2) + "," + queryResult.getString (3);
System.out.println (authorName);
}

} captura (excepción e) {
e.printStackTrace ();
}
}
El método PreparadaSentencia configura la consulta para cualquier valor
que desee incluir en la consulta. Reemplaza esos valores con un signo de
interrogación. Verá que ha escrito "Seleccionar *" de la tabla de autores en
la consulta. Esto significa que el compilador reemplazará todos los campos
de la tabla con un signo de interrogación. Luego puede completar
cualquier valor faltante llamando al método establecido. En el código
anterior, tenemos setInt (1, Entero.parseInt (entrada)). Este método le dirá
al objeto que la primera variable en la consulta siempre debe ser un
número entero. Un método PreparadaSentencia es bueno para cubrir

135
muchos tipos de inyecciones, pero hay diferentes maneras en que esto
puede suceder. Por lo tanto, es importante recordar que debe tener
suficientes pruebas en su consulta para deshacerse de las inyecciones lo
antes posible.

Capítulo Veintiuno: Programa de SQL


Embedded (incrustado) C

Ahora, ya sabe cómo conectar la base de datos a un lenguaje de


procedimiento, escribamos nuestro primer programa SQL incorporado en
C. En este ejemplo, seleccionaremos una estación y listaremos toda la
información de esa estación. La información para la estación proviene de
la tabla creada en el Capítulo nueve.
#include <stdio.h>
#include <string.h>

136
EXEC SQL COMENZAR DECLARAR LA SECCIÓN;

largo station_id;
largo mon
temperatura de flotación
lluvia flotante
char ciudad_nombre [21];
SQLCODE largo;
EXEC SQL END DECLARE SECTION;
principal()
{
/ * la declaración CONECTAR, si es necesario, va aquí * /
strcpy (city_name, "Denver");
EXEC SQL SELECT ID INTO: station_id
De la estacion
DONDE CIUDAD =: nombre de ciudad;
si (SQLCODE == 100)
{
printf ("No hay una estación para city% s \ n", city_name);
salida (0);
}
printf ("Para la ciudad% s, la ID de la estación es% ld \ n", city_name,
station_id);
printf ("Y aquí están los datos del clima: \ n");
EXEC SQL DECLARE XYZ CURSOR PARA
SELECCIONAR MES, TEMP_F, RAIN_I
DE ESTADÍSTICAS
WHERE ID =: station_id
ORDEN POR MES;
EXEC SQL OPEN XYZ;

137
while (SQLCODE! = 100) {
EXEC SQL FETCH XYZ EN: mon,: temp,: rain;
si (SQLCODE == 100)
printf ("fin de lista \ n");
más
printf ("mes =% ld, temperatura =% f, precipitación =% f \ n", mon, temp,
lluvia);
}
EXEC SQL CLOSE XYZ;
salida (0);
}
La salida será
Para la ciudad de Denver, la identificación de la estación es 44
Y aquí están los datos del clima:
mes = 1, temperatura = 27.299999, lluvia = 0.180000
mes = 7, temperatura = 74.800003, lluvia = 2.110000
fin de la lista

Capítulo Veintidós: Programa de FORTRAN


Embedded (incrustado) en SQL

También puede incrustar SQL en diferentes aplicaciones de FORTRAN.


Primero deberá configurar la aplicación y habilitarla para admitir el uso de
SQL. Las sentencias de SQL incorporado en FORTRAN siempre constan
de los siguientes elementos.
Corregir la sintaxis del elemento FORTRAN
Inicializador de sentencia

138
EXEC SQL
Cadena de declaración
Cualquier sentencia SQL válida con espacios en blanco como
delimitadores.
Terminador de declaración
Fin de línea de origen.
El final de la línea de origen es el terminador de la instrucción, y si la línea
continua, esta declaración será el final de la línea continua.

Ejemplos de Declaración

1. C incluir el manejo de errores


exec sql incluye sqlca
exec sql comienza a declarar sección

2. C Variables de cada tipo de datos.


byte dbyte
logico * 1 dlog1

ogico * 2 dlog2
logico * 4 dlog4
registro lógico
entero * 2 dint2
entero * 4 dint4
dint entero
real * 4 dreal4
real * 8 dreal8

139
dreal real
doble precisión ddoub
parámetro (max = 1000)

carácter * 12 nombrebd
carácter * 12 fname, tname, cname

3. C Estructura con una unión.


estructura / persona /
edad de bytes
banderas enteras
Unión
mapa
caracter * 30 fullnm
mapa final
mapa
personaje * 12 primero
personaje * 18 ultimo
mapa final
fin de la unión
estructura final

registro / persona / persona, ptable (MAX)

4. C De DCLGEN
exec sql incluye 'employee.dcl'

5. C Formularios compilados.
entero empfrm, dptfrm

140
exec sql end declarar sección
empfrm externo, dptfrm

Capítulo Veintitrés: Programa COBOL


Embedded (incrustado) de SQL

DIVISIÓN DE IDENTIFICACIÓN.

PROGRAMA-ID. TESTALL.
NOMBRE DEL AUTOR. YO.

141
DIVISIÓN DE MEDIO AMBIENTE.

SECCIÓN DE CONFIGURACIÓN.
FUENTE-ORDENADOR. IBM-AT.
OBJETO-ORDENADOR. IBM-AT.

SECCIÓN DE ENTRADA-SALIDA.
CONTROL DE ARCHIVOS.

DIVISIÓN DE DATOS.

SECCIÓN DE ARCHIVO.

SECCIÓN DE ALMACENAMIENTO LABORAL.

EXEC SQL
INCLUYE EMPREC
END-EXEC

01 DISP-RATE PIC $$$, $$$, $$ 9.99.


01 DISP-COM PIC Z.99.
01 DISP-CODE PIC ---- 9.
01 FAKE-CHAR PIC X.
01 ANSS PIC X.
01 COM-NULL-IND PIC S9 (4) COMP.

EXEC SQL
INCLUYE SQLCA
END-EXEC

142
DIVISIÓN DE PROCEDIMIENTOS.

100-PRINCIPAL.
* declarar cursor para seleccionar
EXEC SQL
DECLARAR CURSOR EMPTBL PARA
SELECCIONAR *
DE EMPLEADO
ORDEN POR NOMBRE
END-EXEC

* cursor abierto
EXEC SQL
EMPTBL ABIERTO
END-EXEC
MOVER SQLCODE A DISP-CODE
PANTALLA 'abierta' DISP-CODE

* buscar un elemento de datos


EXEC SQL
FETCH EMPTBL EN
: ENO,: LNAME,: FNAME,: STREET,: CITY,
: ST,: ZIP,: DEPTO,: PAGO,
: COM: COM-NULL-IND
END-EXEC

100-test.
MOVER SQLCODE A DISP-CODE

143
PANTALLA 'fetch' DISP-CODE

* Bucle hasta que no haya más datos.


ACTUAR HASTA SQLCODE <0 O SQLCODE = 100

* mostrar el registro
Mover la tasa de pago a tasa de interés
MOVE COM TO DISP-COM
PANTALLA "DEPARTAMENTO" DEPARTAMENTO
PANTALLA 'apellido' LNAME
PANTALLA "nombre" FNAME
PANTALLA 'calle' CALLE
VISUALIZAR CIUDAD 'ciudad'
PANTALLA "estado" ST
PANTALLA 'zip code' ZIP
VISUALIZACIÓN 'tasa de pago'
IF COM-NULL-IND <0
MOSTRAR 'comisión es nula'
MÁS
PANTALLA 'comisión' DISP-COM
TERMINARA SI
PANTALLA '¿Quieres ver el siguiente disco? (y / n) '
ACEPTAR ANSS
SI ANSS = 'Y' O 'y'
EXEC SQL
FETCH EMPTBL EN
: ENO,: LNAME,: FNAME,: STREET,: CITY,
: ST,: ZIP,: DEPTO,: PAGO,
: COM: COM-NULL-IND

144
END-EXEC
MÁS
Ir a cierre de lazo
TERMINARA SI
MOVER SQLCODE A DISP-CODE
PANTALLA 'fetch' DISP-CODE
FIN DE EJECUCIÓN.

PANTALLA 'Todos los registros en esta tabla han sido seleccionados.'

CLOSE-LOOP.
* cierra el cursor
EXEC SQL
CERRAR EMPTBL
END-EXEC

100-SALIDA.
Dejar de correr.

Capítulo Veinticuatro: Soluciones a las


Preguntas del Capítulo Dieciséis

Este capítulo proporciona las soluciones a las preguntas en el capítulo


dieciséis. Debe recordar que las soluciones en este capítulo no son la única
forma de realizar la función. Puedes usar un método alternativo.
1. Seleccione PRIMER_NOMBRE COMO
TRABAJADOR_NOMBRE en Worker;

145
2. Seleccione la parte superior (PRIMER_NOMBRE) en
Trabajador;
3. Seleccione DEPARTAMENTO distinto del trabajador;
4. Seleccione la subcadena (PRIMER_NOMBRE, 1,3) de
Trabajador;
5. Seleccione INSTR (PRIMER_NOMBRE, BINARY'a ') en
Trabajador donde PRIMER_NOMBRE =' Amitabh ';
6. Seleccione RTRIM (PRIMER_NOMBRE) en Trabajador;
7. Seleccione LTRIM (DEPARTAMENTO) de Trabajador;
8. Seleccione la longitud distinta (DEPARTAMENTO) de
Trabajador;
9. Seleccione REEMPLAZA (PRIMER_NOMBRE, 'a', 'A') en
Trabajador;
10. Seleccione CONCAT (PRIMER_NOMBRE, '', LAST_NAME)
COMO 'COMPLETE_NAME' en Worker;
11. Seleccione * de la orden del trabajador por
PRIMER_NOMBRE asc;
12. Seleccione * de Orden de trabajo por PRIMER_NOMBRE asc,
DEPARTMENT desc;
13. Seleccione * del Trabajador donde PRIMER_NOMBRE está en
('Vipul', 'Satish');
14. Seleccione * del Trabajador donde PRIMER_NOMBRE no está
en ('Vipul', 'Satish');
15. Seleccione * de Trabajador donde DEPARTAMENTO como
'Admin%';
16. Seleccione * del Trabajador donde PRIMER_NOMBRE le
gusta '% a%';
17. Seleccione * del Trabajador donde PRIMER_NOMBRE le
gusta '% a';
18. Seleccione * del Trabajador donde PRIMER_NOMBRE le gusta
'_____h';
19. Seleccione * del Trabajador donde SALARIO entre 100000 y
500000;

146
20. Seleccione * del Trabajador donde año (JOINING_DATE) =
2014 y mes (JOINING_DATE) = 2;
21. SELECCIONAR CUENTA (*) DESDE el trabajador DONDE
DEPARTAMENTO = 'Admin';
22. SELECCIONE CONCAT (PRIMER_NOMBRE, '',
LAST_NAME) como Worker_Name, Salary
De trabajador
DONDE TRABAJADOR_ID
(SELECCIONA WORKER_ID FROM worker
DONDE Salario ENTRE 50000 Y 100000);
23. SELECCIONAR DEPARTAMENTO, contar (WORKER_ID)
No_Of_Workers
De trabajador
GRUPO POR DEPARTAMENTO
ORDEN POR No_Of_Workers DESC;
24. SELECCIONAR DISTINTO W.FIRST_NAME,
T.WORKER_TITLE
Del trabajador w
INNER JOIN Título T
ON W.WORKER_ID = T.WORKER_REF_ID
Y T.WORKER_TITLE en ('Administrador');
25. SELECCIONA WORKER_TITLE, AFFECTED_FROM,
COUNT (*)
Del título
GRUPO POR WORKER_TITLE, AFFECTED_FROM
QUE TIENE COUNT (*)> 1;
26. SELECT * FROM Worker WHERE MOD (WORKER_ID, 2)
<> 0;
27. SELECT * FROM Worker WHERE MOD (WORKER_ID, 2)
= 0;
28. SELECT * INTO WorkerClone FROM Worker;

147
29. (SELECCIONAR * DEL TRABAJADOR)
INTERSECARSE
(SELECCIONAR * DE WorkerClone);
30. SELECT * FROM Worker
MENOS
SELECT * FROM Title;
Espero que hayan podido responder todas las preguntas en este capítulo. Si
no pudo responder estas preguntas, debería volver a los primeros capítulos
del libro y trabajar en otras preguntas también. Hay toneladas de preguntas
disponibles en Internet, y hay muchos sitios web de tutoriales que le
brindarán diferentes preguntas en las que puede practicar.

148
Conclusión

Con esto, hemos llegado al final de este libro. Le agradezco una vez más
por haber elegido este libro.
En el mundo de hoy, hay una gran cantidad de datos que se ponen a su
disposición. Si es propietario de un negocio o desea iniciar un negocio,
debe saber cómo cuidar los datos que recopila y usar esa información para
mejorar el funcionamiento del negocio. También debe aprender a
almacenar la información en una ubicación, para asegurarse de que pueda
acceder a ella siempre que sea necesario. Si está intentando conservar la
información personal de sus clientes en un lugar o si está más interesado
en poner la información de ventas de una manera fácil de ver, necesita
tener una base de datos que sea fácil de usar.
En esta guía, dedicaremos un poco de tiempo a hablar sobre SQL y cómo
puede usarlo de una manera que lo ayude a lidiar con todas sus
necesidades de administración de datos. SQL es un lenguaje simple que
puede ayudarlo a analizar sus datos independientemente del tipo de
negocio que ejecute. Vamos a cubrir parte de la información básica que
necesita para hacer que este sistema funcione para usted.
Hay tanto que puede aprender acerca de SQL y cómo utilizar este sistema
para que su negocio sea más exitoso. Esta guía lo ayudará a comenzar para
que pueda organizar y acceder a sus datos en cualquier momento que lo
desee.

Fuentes

https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-
joins/
http://www.sql-join.com/sql-join-types
https://www.linkedin.com/pulse/why-should-you-learn-sql-alan-
wisniewski-
https://www.systematix.co.uk/sql/12-benefits-of-sql-structured-query-
language

149
https://www.google.co.in/search?
q=SQL+exercises&rlz=1C1CHBF_enIN777IN777&oq=SQL+exercises&aqs=chrome..
8
http://www.sql-ex.com/learn_exercises.php#answer_ref
https://georgedittmar.wordpress.com/2012/03/02/embedded-sql-tutorial-
how-to-write-java-applications-that-need-a-database/
http://www.cs.sfu.ca/CourseCentral/354/zaiane/material/notes/Chapter4/node33.html
http://www.cs.sfu.ca/CourseCentral/354/zaiane/material/notes/Chapter4/node33.html
https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/apsg/src/tpc/db2z_
http://docs.actian.com/ingres/10s/index.html#page/EmbedSQL/Embedded_SQL_2fFort
https://www.ibm.com/support/knowledgecenter/SSSNY3_10.1.0/com.ibm.db2.luw.apd
https://www.essentialsql.com/a-case-study-on-how-to-use-joins-
subqueries-and-unions-to-combine-data-in-sql/
https://www.tutorialspoint.com/sql/sql-operators.htm
https://www.w3resource.com/sql/arithmetic-operators/sql-arithmetic-
operators.php ’
https://www.itl.nist.gov/div897/ctg/dm/sql_examples.htm#create%20view
https://www.dofactory.com/sql/select
https://www.dofactory.com/sql/sample-database
https://www.w3resource.com/sql/arithmetic-operators/sql-arithmetic-
operators.php

150
Bibliografía

1. Grupos de Google. (2018). Obtenido de


https://groups.google.com/d/msg/oracle-plsql/sugqHCyrdPs/ol4Sj8y3IuIJ
2. TAYLOR, A. (2010). SQL PARA DUMMIES. [S.l.]: JOHN WILEY &
SONS
3. TAYLOR, A. (2010). SQL PARA DUMMIES. [S.l.]: JOHN WILEY &
SONS
4. TAYLOR, A. (2010). SQL PARA DUMMIES. [S.l.]: JOHN WILEY &
SONS
5. TAYLOR, A. (2010). SQL PARA DUMMIES. [S.l.]: JOHN WILEY &
SONS
6. Taylor, A. (2018). Cómo garantizar la integridad referencial para
proteger sus datos SQL - Para Dummies. Obtenido de
https://www.dummies.com/programming/sql/how-to-ensure-referential-
integrity-to-protect-your-sql-data/
7. Taylor, A. (2018). Cómo garantizar la integridad referencial para
proteger sus datos SQL - Para Dummies. Obtenido de
https://www.dummies.com/programming/sql/how-to-ensure-referential-
integrity-to-protect-your-sql-data/

151
Índice
Introducción 10
Capítulo uno : Los fundamentos de comenzar con SQL 11
Capítulo Dos : Comandos SQL Básicos 21
Capítulo tres : Tipos de datos que puede usar dentro de
25
SQL
Capítulo cuatro : Introducción a los tipos de datos
31
numéricos
Capítulo cinco : Una introducción a las cadenas de
36
caracteres
Capítulo seis : Una introducción a los tiempos de datos 40
Capítulo Siete : Una Introducción a los Intervalos 43
Capítulo ocho : Administrar los objetos en su base de
50
datos
Capítulo Nueve : Recuperando Datos 54
Capítulo Diez : Seguridad de la base de datos 65
Capítulo Once : Cómo trabajar con resultados de
70
búsqueda a través de SQL
Capítulo Doce : Una Introducción a las Uniones 74
Capítulo trece : una introducción a las subconsultas 86
Capítulo Catorce : Introducción a los Operadores de Set . 90
Capítulo Quince : Estudio de Caso 100
Capítulo Dieciséis : Diez errores de novato 109
Capítulo Diecisiete : Diez consejos para una fácil
113
recuperación
Capítulo Dieciocho : Ejercicio 119
Capítulo Diecinueve : Usando SQL Con Aplicaciones 127
Capítulo Veinte : Programa Java Embedded ( incrustado )
129
SQL

152
Capítulo Veintiuno : Programa de SQL Embedded (
136
incrustado ) C
Capítulo Veintidós : Programa de FORTRAN Embedded
138
( incrustado ) en SQL
Capítulo Veintitrés : Programa COBOL Embedded (
141
incrustado ) de SQL
Capítulo Veinticuatro : Soluciones a las Preguntas del
145
Capítulo Dieciséis
Conclusión 149

153

También podría gustarte