SQL - Guía Completa para Principiantes de La Programación SQL Con Ejercicios
SQL - Guía Completa para Principiantes de La Programación SQL Con Ejercicios
_______________________________
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.
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.
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
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
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
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
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?
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.
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.
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.
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
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.
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.
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.
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:
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
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
23
Comandos de control transaccional
Cometer (perpetrar)
Punto de guardado
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
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.
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:
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;
Números absolutos
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.
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).
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
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.
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
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
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
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.
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.
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).
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.
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.
42
del tipo de datos que incluyen una parte fraccionaria.
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
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).
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
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
Subtipos y supertipos
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.
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.
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
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
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
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.
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
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
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
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
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.
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.
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
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
ORDEN POR
72
Ejemplos
Ejemplo 1
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.
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
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.
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á:
2 3/14/1760 $78.50
4 9/03/1790 $65.50
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
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
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.
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
Unir internamente
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
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
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
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.
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.
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.
89
Capítulo Catorce: Introducción a los
Operadores de Set.
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;
91
Charlotte 49 Gilbert
1 Exotic Liquid London
Cooper St.
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.
92
WHERE. SQL devolverá las ciudades en Alemania desde la tabla de
clientes y proveedores.
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",
INTERSECARSE
94
La consulta
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.
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
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.
Ejemplo 3
SELECCIONA product_id DE inventarios
MENOS
SELECCIONA product_id DE order_items;
99
Capítulo Quince: Estudio de Caso
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.
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.
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.
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
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.
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
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
117
ERROR: error de sintaxis en o cerca de ","
LÍNEA 1: SELECCIONAR * DE empleado, departamento
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.
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 ');
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.
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
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 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");
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
}
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.
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");
consultaResult.next ();
String authorName = queryResult.getString (1) + "," +
queryResult.getString (2) + "," + queryResult.getString (3);
System.out.println (authorName);
}
} captura (excepción e) {
e.printStackTrace ();
}
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");
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.
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
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
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
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
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.
EXEC SQL
INCLUYE EMPREC
END-EXEC
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
100-test.
MOVER SQLCODE A DISP-CODE
143
PANTALLA 'fetch' DISP-CODE
* 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.
CLOSE-LOOP.
* cierra el cursor
EXEC SQL
CERRAR EMPTBL
END-EXEC
100-SALIDA.
Dejar de correr.
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
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