Ejercicio en SQL Clase
Ejercicio en SQL Clase
Ejercicio en SQL Clase
“La clínica “SAN PATRÁS” necesita llevar un control informatizado de su gestión de pacientes y
médicos.De cada paciente se desea guardar el código, nombre, apellidos, dirección, población,
provincia, código postal, teléfono y fecha de nacimiento.
De cada médico se desea guardar el código, nombre, apellidos, teléfono y especialidad. Se desea
llevar el control de cada uno de los ingresos que el paciente hace en el hospital. Cada ingreso que
realiza el paciente queda registrado en la base de datos. De cada ingreso se guarda el código de
ingreso (que se incrementará automáticamente cada vez que el paciente realice un ingreso), el
número de habitación y cama en la que el paciente realiza el ingreso y la fecha de ingreso.
Un médico puede atender varios ingresos, pero el ingreso de un paciente solo puede ser atendido por
un único médico. Un paciente puede realizar varios ingresos en el hospital”.
Se creo la base de datos llamada Clinica San Patras, utilizando el siguiente código: CREATE
DataBase ClinicaSan Patras
Paciente: código, nombre, apellidos, dirección, población, provincia, código postal, teléfono y fecha
de nacimiento.
Médico: código, nombre, apellidos, teléfono y especialidad.
Ingresos: código de ingreso (que se incrementará automáticamente cada vez
que el paciente realice un ingreso), el número de habitación y cama en la que el paciente realiza el
ingreso y la fecha de ingreso.
Para ello se implementa el siguiente código:
CREATE Table Paciente (Codigo varchar(3)PRIMARY KEY, Nombre varchar (15), ApePat varchar
(15), ApeMat varchar (15), Direccion varchar (30), Poblacion varchar (20), Provincia varchar
(20), CP numeric (5), Telefono numeric(10), FN varchar(10))
CREATE Table Medico(Codigo varchar(3)PRIMARY KEY, Nombre varchar (15), ApePat varchar
(15), ApeMat varchar (15), Telefono numeric(10), Especialidad varchar(20))
1. Introducción
Los DLL que permiten crear y definir nuevas bases de datos, campos e índices.
Los DML que permiten generar consultas para ordenar, filtrar y extraer datos
de la base de datos.
Comandos DLL
Comando Descripción
Comandos DML
Comando Descripción
Utilizado
SELECT para consultar registros de la base de datos que satisfagan un criterio
determinado
Utilizado
INSERT para cargar lotes de datos en la base de datos en una única
operación.
Utilizado
UPDATE
para modificar los valores de los campos y registros especificados
Utilizado
DELETE
para eliminar registros de una tabla de una base de datos
1.3 Cláusulas
Comando Descripción
Utilizada
FROM
para especificar la tabla de la cual se van a seleccionar los registros
Utilizada
WHERE para especificar las condiciones que deben reunir los registros que
se van a seleccionar
GROUP Utilizada
BY para separar los registros seleccionados en grupos específicos
Utilizada
HAVING
para expresar la condición que debe satisfacer cada grupo
ORDER Utilizada
BY para ordenar los registros seleccionados de acuerdo con un orden específico
Es
AND el “y” lógico. Evalúa dos condiciones y devuelve un
valor de verdad sólo si ambas son ciertas.
Es
OR el “o” lógico. Evalúa dos condiciones y devuelve un
valor de verdad si alguna de las dos es cierta.
Negación
NOT
lógica. Devuelve el valor contrario de la expresión.
1.5
Operadores de Comparación
Operador Uso
Menor
<
que
Mayor
>
que
Distinto
<>
de
Menor
<=
ó Igual que
Mayor
>=
ó Igual que
Utilizado
BETWEEN
para especificar un intervalo de valores.
Utilizado
LIKE
en la comparación de un modelo
Utilizado
In
para especificar registros de una base de datos
1.6 Funciones de Agregado
Comando Descripción
Utilizada
AVG
para calcular el promedio de los valores de un campo determinado
Utilizada
COUNT
para devolver el número de registros de la selección
Utilizada
SUM
para devolver la suma de todos los valores de un campo determinado
Utilizada
MAX
para devolver el valor más alto de un campo especificado
Utilizada
MIN
para devolver el valor más bajo de un campo especificado
2. Consultas de Selección
Predicado Descripción
Devuelve todos
ALL
los campos de la tabla
ALL:
Si no se incluye ninguno
de los predicados se asume ALL.
El Motor de base de datos selecciona todos los registros que cumplen las condiciones
de la instrucción SQL. No se conveniente abusar de este predicado ya
que obligamos al motor de la base de datos a analizar la estructura de la tabla
para averiguar los campos que contiene, es mucho más rápido indicar
el listado de campos deseados.
TOP:
DISTINCT:
Omite
los registros que contienen datos duplicados en los campos seleccionados. Para
que los valores de cada campo listado en la instrucción SELECT se incluyan en la
consulta deben ser únicos.
DISTINCTROW:
2.4 Alias
Criterios de Selección
A lo largo de este capítulo se estudiarán las posibilidades de filtrar los registros con el
fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas.
3. Criterios de Selección
3.1
Operadores Lógicos
<expresión1> operador
<expresión2>
En donde expresión1
y expresión2 son las condiciones
a evaluar, el resultado de la operación varía en función
del operador lógico. La tabla adjunta muestra los diferentes posibles
resultados:
El último operador denominado Is se emplea para comparar dos variables de tipo objeto
<Objeto1> Is <Objeto2>. Este operador devuelve verdad
si los dos objetos son iguales.
(campo
[Not] Between valor1 And valor2 (la condición Not es opcional)
Se
utiliza para comparar una expresión de cadena con un modelo en una expresión
SQL. Su sintaxis es:
expresión
Like modelo
En donde expresión es una cadena modelo o campo contra el que se compara
expresión. Se puede
utilizar el operador Like para
encontrar valores en los campos que coincidan con el modelo especificado. Por
modelo puede especificar un valor completo (Ana María), o se pueden utilizar
caracteres comodín como los reconocidos por el sistema operativo para
encontrar un rango de valores (Like An*).
El
ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de
cualquier letra entre A y F y de tres dígitos:
Like ‘P[A-F]###’
Este
ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la
D seguidas de cualquier cadena.
Like ‘[A-D]*’
Tipo Modelo No
Coincide
de coincidencia Planteado Coincide
Distinto de un dígito ‘[!0-9]’ ‘A’, ‘a’, ‘&’, ‘~’ ‘0’, ‘1’, ‘9’
Combinada ‘a[!b-m]#’ ‘An9’, ‘az0’, ‘a99’ ‘abc’, ‘aj0’
3.4 El Operador In
expresión
[Not] In(valor1, valor2, . . .)
La cláusula WHERE puede usarse para determinar qué registros de las tablas
enumeradas en
la cláusula FROM aparecerán
en los resultados de la instrucción SELECT.
Después de escribir esta cláusula se deben especificar las condiciones
expuestas en los apartados 3.1 y 3.2. Si no se emplea esta cláusula,
la consulta devolverá todas las filas de la tabla. WHERE es opcional, pero cuando
aparece debe ir a continuación de FROM.
Agrupamiento de Registros
Aprenderemos a combinar los registros con valores idénticos, en la lista de campos
especificados, en un único registro.
Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la
cláusula HAVING
para filtrar los registros una vez agrupados.
HAVING
es similar a WHERE, determina
qué registros se seleccionan. Una vez que los registros se han agrupado
utilizando GROUP BY, HAVING
determina cuales de ellos se van a mostrar.
Calcula
la media aritmética de un conjunto de valores contenidos en un campo
especificado de una consulta. Su sintaxis es la siguiente
Avg(expr)
En donde expr representa el campo que contiene los datos numéricos para los que se
desea calcular la media o una expresión que realiza un cálculo
utilizando los datos de dicho campo. La media calculada por Avg es la media aritmética
(la suma de los valores dividido por el número
de valores). La función Avg no incluye ningún campo Null en el cálculo.
Calcula
el número de registros devueltos por una consulta. Su sintaxis es la
siguiente
Count(expr)
En donde expr
contiene el nombre del campo que desea contar. Los operandos de expr pueden incluir
el nombre de un campo de una tabla, una constante o una función
(la cual puede ser intrínseca o definida por el usuario pero no otras
de las funciones agregadas de SQL).
Puede contar cualquier tipo de datos incluso texto.
Aunque expr
puede realizar un cálculo sobre un campo, Count simplemente cuenta el número de
registros sin tener en cuenta qué
valores se almacenan en los registros. La función Count
no cuenta los registros que tienen campos null a menos que expr sea el carácter
comodín asterisco (*).
Si utiliza un asterisco, Count calcula el número total de registros, incluyendo aquellos
que contienen
campos null. Count(*) es considerablemente
más rápida que Count(Campo).
No se debe poner el asterisco entre dobles comillas (‘*’).
Si expr
identifica a múltiples campos, la función Count cuenta un registro sólo si al menos uno
de los campos no es Null.
Si todos los campos especificados son Null,
no se cuenta el registro. Hay que separar los nombres de los campos con ampersand
(&).
Devuelven
el mínimo o el máximo de un conjunto de valores contenidos en
un campo especifico de una consulta. Su sintaxis es:
Min(expr)
Max(expr)
En donde expr es el campo sobre el que se desea realizar el cálculo. Expr pueden
incluir el nombre de un campo de una tabla, una constante o una función
(la cual puede ser intrínseca o definida por el usuario pero no otras
de las funciones agregadas de SQL).
Devuelve
estimaciones de la desviación estándar para la población
(el total de los registros de la tabla) o una muestra de la población
representada (muestra aleatoria) . Su sintaxis es:
StDev(expr)
StDevP(expr)
En donde
expr representa el nombre del campo que contiene los datos que
desean evaluarse o una expresión que realiza un cálculo utilizando
los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un
campo de una tabla, una constante o una función
(la cual puede ser intrínseca o definida por el usuario pero no otras
de las funciones agregadas de SQL)
Devuelve
la suma del conjunto de valores contenido en un campo especifico de una consulta.
Su sintaxis es:
SumP(expr)
En donde expr representa el nombre del campo que contiene los datos que desean
sumarse o una
expresión que realiza un cálculo utilizando los datos de dichos
campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla,
una constante o una función
(la cual puede ser intrínseca o definida por el usuario pero no otras
de las funciones agregadas de SQL).
Var(expr)
VarP(expr)
VarP evalúa una población, y Var evalúa una muestra de la población. Expr el nombre
del campo que
contiene los datos que desean evaluarse o una expresión que realiza un
cálculo utilizando los datos de dichos campos. Los operandos de expr
pueden incluir el nombre de un campo de una tabla, una constante o una función
(la cual puede ser intrínseca o definida por el usuario pero no otras
de las funciones agregadas de SQL)
5. Consultas de Actualización
5.1 DELETE
5.2.1
Para insertar un único Registro:
5.2.2
Para insertar Registros de otra Tabla:
Se puede utilizar la instrucción INSERT INTO para agregar un registro único a una
tabla, utilizando la sintaxis de la consulta de adición
de registro único tal y como se mostró anteriormente. En este
caso, su código específica el nombre y el valor de cada campo
del registro. Debe especificar cada uno de los campos del registro al que se
le va a asignar un valor así como el valor para dicho campo. Cuando no
se especifica dicho campo, se inserta el valor predeterminado o Null.
Los registros se agregan al final de la tabla.
La
tabla destino u origen puede especificar una tabla o una consulta.
Tipos de Datos
Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios
sinónimos válidos reconocidos por dichos tipos de datos.
6. Tipos de Datos
Tipo
Longitud Descripción
de Datos
1 byte por
LONGTEXT De cero a un máximo de 1.2 gigabytes.
carácter
1 byte por
TEXT De cero a 255 caracteres.
caracter
SubConsultas
Una subconsulta es una instrucción SELECT anidada dentro de una instrucción
SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra
subconsulta.
7. SubConsultas
En donde:
instrucción
sql : Es una instrucción
SELECT, que sigue el mismo formato y reglas que cualquier otra
instrucción SELECT. Debe
ir entre paréntesis.
Selecciona el nombre de
todos los empleados que han reservado al menos un pedido.
Recupera el Código
del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el nombre
del producto de la tabla de productos.
Una consulta
de referencias cruzadas es aquella que nos permite visualizar los datos en filas
y en columnas, estilo tabla, por ejemplo:
Si tenemos
una tabla de productos y otra tabla de pedidos, podemos visualizar en total
de productos pedidos por año para un artículo determinado, tal
y como se visualiza en la tabla anterior.
En donde:
función
agregada: Es una función SQL
agregada que opera sobre los datos seleccionados.
instrucción
select: Es una instrucción SELECT.
campo pivot:
Es el campo o expresión que desea utilizar para crear las cabeceras de
la columna en el resultado de la consulta.
valor1,
valor2: Son valores fijos utilizados para crear las cabeceras
de la columna.
Para resumir
datos utilizando una consulta de referencia cruzada, se seleccionan los valores
de los campos o expresiones especificadas como cabeceras de columnas de tal
forma que pueden verse los datos en un formato más compacto que con una
consulta de selección.
TRANSFORM es opcional pero si se incluye es la primera instrucción de una cadena
SQL. Precede a la instrucción SELECT que especifica los campos
utilizados como encabezados de fila y una cláusula GROUP
BY que especifica el agrupamiento de las filas. Opcionalmente
puede incluir otras cláusulas como por ejemplo WHERE,
que especifica una selección adicional o un criterio de ordenación
.
También
puede incluir valores fijos, para los que no existen datos, para crear columnas
adicionales.
Ejemplos:
Un caso
práctico:
Estructura
y datos de las tablas:
1. Artículos:
ID Nombre
1 Zapatos
2 Pantalones
3 Blusas
2. Pedidos:
Id Fecha Cantidad
1 11/11/1996 250
2 11/11/1996 125
11/11/1996 520
1 12/10/1996 50
2 04/05/1996 250
05/08/1996 100
1 01/01/1997 40
2 02/08/1997 60
05/10/1997 70
1 12/12/1997 8
2 15/12/1997 520
17/10/1997 1250
Zapatatos 1 48 87 00 48
Comentarios
a la consulta:
La cláusula TRANSFORM
indica el valor que deseamos visualizar en las columnas que realmente pertenecen
a la consulta, en este caso 1996
y 1997, puesto que las demás
columnas son opcionales.
SELECT
especifica el nombre de las columnas opcionales que deseamos visualizar, en
este caso Producto, Código, Total y Media,
indicando el nombre del campo que deseamos mostrar en cada columna o el valor
de la misma. Si incluimos una función de cálculo el resultado
se hará en base a los datos de la fila actual y no al total de los datos.
FROM especifica el origen de los datos. La primera tabla que debe figurar es aquella
de donde deseamos extraer los datos, esta tabla debe contener al menos tres
campos, uno para los títulos de la fila, otros para los títulos
de la columna y otro para calcular el valor de las celdas.
La cláusula GROUP
BY especifica el agrupamiento de los registros, contrariamente
a los manuales de instrucción esta cláusula no es opcional ya
que debe figurar siempre y debemos agrupar los registros por el campo del cual
extraemos la información. En este caso existen dos campos del cual extraemos
la información: pedidos.cantidad y artículos.nombre, por ellos
agrupamos por los campos.
Para finalizar la cláusula PIVOT indica el nombre de las columnas no opcionales, en
este caso 1996 y 1997 y como
vamos a el dato que aparecerá en las columnas, en este caso empleamos
el año en que se produjo el pedido, extrayéndolo del campo pedidos.fecha.
Otras posibilidades
de fecha de la cláusula pivot son las siguientes:
1. Para
agrupamiento por Trimestres
2. Para
agrupamiento por meses (sin tener en cuenta el año)
Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina
registros de dos tablas siempre
que haya concordancia de valores en un campo común. Su sintaxis es:
En donde:
tb1, tb2:
Son los nombres de las tablas desde las que se combinan los registros.
campo1,
campo2: Son los nombres de los campos que se combinan. Si no
son numéricos, los campos deben ser del mismo tipo de datos y contener
el mismo tipo de datos, pero no tienen que tener el mismo nombre.
comp: Es
cualquier operador de comparación relacional
: =, <, >, <=, >=, o <>.
Se puede utilizar una operación INNER JOIN en cualquier cláusula FROM. Esto crea
una combinación
por equivalencia, conocida también como unión interna. Las combinaciones
Equi son las más comunes; éstas combinan los registros de dos
tablas siempre que haya concordancia de valores en un campo común a ambas
tablas. Se puede utilizar INNER JOIN
con las tablas Departamentos y Empleados para seleccionar todos los
empleados de cada departamento. Por el contrario, para seleccionar todos los
departamentos (incluso si alguno de ellos no tiene ningún empleado asignado)
se emplea LEFT JOIN o todos los
empleados (incluso si alguno no está asignado
a ningún departamento), en este caso RIGHT
JOIN.
SELECT campos
FROM tabla1 INNER JOIN tabla2
ON tb1.campo1 comp tb2.campo1 AND
ON tb1.campo2 comp tb2.campo2) OR
ON tb1.campo3 comp tb2.campo3)];
También puede anidar instrucciones
JOIN utilizando la siguiente sintaxis:
SELECT campos
FROM tb1 INNER JOIN
(tb2 INNER JOIN [( ]tb3
[INNER JOIN [( ]tablax [INNER JOIN ...)]
ON tb3.campo3 comp tbx.campox)]
ON tb2.campo2 comp tb3.campo3)
ON tb1.campo1 comp tb2.campo2;
Un LEFT
JOIN o un RIGHT JOIN
puede anidarse dentro de un INNER JOIN,
pero un INNER JOIN no puede anidarse
dentro de un LEFT JOIN o un RIGHT
JOIN.
Ejemplo:
Se utiliza la operación UNION para crear una consulta de unión, combinando los
resultados de dos o
más consultas o tablas independientes. Su sintaxis es:
En donde:
consulta1,
consulta2, consultan: Son instrucciones SELECT,
el nombre de una consulta almacenada o el nombre de una tabla almacenada precedido
por la palabra clave TABLE.
Se puede utilizar una cláusula GROUP BY y/o HAVING en cada argumento consulta
para agrupar los datos devueltos. Puede utilizar
una cláusula ORDER BY al
final del último argumento consulta para visualizar los datos devueltos
en un orden específico.
Parte Descripción
Parte Descripción
En donde:
Parte Descripción
En donde:
Parte Descripción
Operación Descripción
Parte Descripción
Es el nombre
nombre
del parámetro
Es el tipo de
tipo
datos del parámetro
Una consulta
consulta
SQL
Ejemplo:
En donde
MISDATOS.MDB es el nombre de una base de datos de Microsoft
Access que contiene la tabla Clientes.
Esta opción requiere que esté declarado el acceso al fichero de grupo de trabajo
(generalmente system.mda
ó system .mdw) de la base
de datos actual.
La Cláusula PROCEDURE
Esta cláusula es poco usual y se utiliza para crear una consulta a la misma vez que se
ejecuta, opcionalmente define los parámetros de la misma.
En donde:
Parte Descripción
16.2 Utlizar
SQL desde Visual Basic
Si la consulta de selección se
encuentra almacenada en una consulta de la base de datos:
Set RS=MiBaseDatos.OpenRecordset("MiConsulta")
DatePart
Valor Descripción
yyyy Año
q Trimestre
m Mes
Día del
y
año
Día del
d
mes
Día de
w
la semana
h Hora
m Minutos
s Segundos
Valor Descripción
Utiliza el valor
0
pode efecto del sistema
Domingo (Valor
1
predeterminado)
2 Lunes
3 Martes
4 Miércoles
5 Jueves
6 Viernes
7 Sábado
ComienzoAño indica cual es la primera semana del año; los posibles valores son:
Valor Descripción
Comienza el año
1
el 1 de enero (valor predeterminado).
Empieza con la
2
semana que tenga al memos cuatro días en el nuevo año.
Empieza con la
3
semana que esté contenida completamente en el nuevo año.
iif(Expresion,Valor1,Valor2)
En donde Expresión es
la sentencia que evaluamos; si Expresión es verdadera entonces
se devuelve Valor1, si Expresión es falsa se devuelve
Valor2.
Más información
Asegurate de revisar el foro de Bases de datos en Foros del Web para resolución de
cualquier duda.