Download - Base de Datos El lenguaje SQL
![Page 1: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/1.jpg)
11
Base de Datos
El lenguaje SQL
![Page 2: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/2.jpg)
2
Funciones de Agregación
Agrupamientos
Funciones Escalares
Subqueries
Contenido
![Page 3: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/3.jpg)
3
Toman valores que dependen de las columnas y retornan información respecto a las columnas (no las columnas propiamente)
COUNT (*)COUNT (DISTINCT nombre_columna)SUM (columna/expresión) AVG (columna/expresión)MAX (columna/expresión)MIN (columna/expresión)
FUNCIONES DE AGREGACION
![Page 4: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/4.jpg)
4
Devuelve la cantidad de tuplas que cumplen la condición de WHERE o HAVING.
Ej1: ¿ Cuantos movimientos se han hecho en el banco?
SELECT COUNT (*) FROM Movimientos;
Ej2: ¿ Cuantos alumnos hay Inscriptos a una materia ?
SELECT COUNT (DISTINCT cod_alumno)
FROM Inscripciones;
Funciones de Agregación : COUNT
![Page 5: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/5.jpg)
5
Suma los contenidos de un campo numerico.Ej: ¿Cuánto dinero se ha depositado en la cuenta 100101?
SELECT SUM(importe)
FROM Movimientos
WHERE importe > 0 AND cuenta = 100101 ;
Se les puede aplicar Etiquetas :SELECT SUM(importe) AS ‘Total Depósitos’
FROM Movimientos
WHERE importe > 0 AND cuenta = 100101 ;
Funciones de Agregación : SUM
(sum)
887786.31000000
(sum)
887786.31000000
Total Depósitos
887786.31000000
Total Depósitos
887786.31000000
![Page 6: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/6.jpg)
6
Devuelve el promedio de los contenidos de un campo numérico.
AVG = SUM() / COUNT()
¿Cuál es el monto promedio depositado en la cuenta 100101?
SELECT AVG(importe) as Promedio
FROM Movimientos
WHERE importe > 0 AND cuenta = 100101 ;
Funciones de Agregación : AVG
Promedio
569847.320
Promedio
569847.320
![Page 7: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/7.jpg)
7
Devuelven el mayor o menor valor del conjunto seleccionado.
Ej1 :¿Cuál fue el depósito más alto en la cuenta 100101?
SELECT MAX(importe)
FROM Movimientos
WHERE cuenta = 100101;
Ej2 :¿Cuál fue el depósito más pequeño en la cuenta 100101?
SELECT MIN(importe)
FROM Movimientos
WHERE cuenta = 100101 AND importe > 0 ;
Funciones de Agregación : MAX, MIN
(max)661306.92000000
(max)661306.92000000
(min)226479.39000000
(min)226479.39000000
![Page 8: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/8.jpg)
8
Se pueden aplicar simultáneamente. En este caso se aplican al MISMO conjunto de tuplas.
SELECT MAX(importe) , MIN(importe), AVG(importe)
FROM Movimientos
WHERE cuenta = 100101 and importe > 0;
En este ejemplo devuelve 1 tupla con 3 campos.
Funciones de Agregación
![Page 9: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/9.jpg)
9
SELECT cuenta FROM Movimientos
CUENTA 791 803106982106982106972106972107052107052
SELECT cuenta FROM Movimientos
CUENTA 791 803106982106982106972106972107052107052
Agrupamientos
GROUP BYPermite agrupar los registros por un campo (o más de uno)Produce un solo registro por cada grupo de registros.
SELECT cuenta FROM MovimientosGROUP BY cuenta
CUENTA
791 803106982106972107052
SELECT cuenta FROM MovimientosGROUP BY cuenta
CUENTA
791 803106982106972107052
![Page 10: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/10.jpg)
10
Agrupamientos
Su utilidad es combinarlo con las Funciones Agregadas :
Ej1: “Quiero saber cantidad de movimientos y el importe por Cuenta”
SELECT cuenta, count(*), sum (importe) FROM MovimientosGROUP BY cuenta
CUENTA (count(*)) (sum)
791 1 167505.18 803 1 139000.00106982 2 0.00106972 2 0.00107052 2 0.00
SELECT cuenta, count(*), sum (importe) FROM MovimientosGROUP BY cuenta
CUENTA (count(*)) (sum)
791 1 167505.18 803 1 139000.00106982 2 0.00106972 2 0.00107052 2 0.00
![Page 11: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/11.jpg)
11
Agrupamientos
Ej2: “Quiero saber cantidad de personas por Departamento y luego por Ciudad”
SELECT departamento, ciudad, COUNT(*)FROM clientesGROUP BY departamento, ciudad
Obs: No necesariamente se ordenan por ese criterio
departamento ciudad (count(*))
MONTEVIDEO MONTEVIDEO 598CANELONES CANELONES 22CANELONES ATLANTIDA 13MALDONADO MALDONADO 37MALDONADO P. DEL ESTE 25
departamento ciudad (count(*))
MONTEVIDEO MONTEVIDEO 598CANELONES CANELONES 22CANELONES ATLANTIDA 13MALDONADO MALDONADO 37MALDONADO P. DEL ESTE 25
![Page 12: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/12.jpg)
12
Ordenando el GROUP BY :
Ej1: Ordenado por departamento y luego ciudadSELECT departamento, ciudad, COUNT(*)FROM Clientes
GROUP BY departamento, ciudadORDER BY departamento, ciudad
Ej2: Ordenado por Cantidad (descendente) y luego por ciudad y departamentoSELECT departamento, ciudad, COUNT(*)FROM Clientes
GROUP BY departamento, ciudadORDER BY 3 DESC, 2, 1
Agrupamientos – Con orden
![Page 13: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/13.jpg)
13
IMPORTANTE
Todas las columnas en la lista del SELECT que no estén en funciones de agregación, deben figurar en los campos de GROUP BY Esto es porque el GROUP BY solo puede retornar una fila por grupo y para esas filas se aplica la función de agregación.
SELECT col1, col2,col3,…., colN, funcA(), funcB()FROM …..WHERE ….GROUP BY col1, col2,col3,…., colN
Agrupamientos
![Page 14: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/14.jpg)
14
La claúsula HAVING usualmente complementa a GROUP BY aplicando condiciones a los grupos (especificados por el GROUP BY) luego de que éstos están formados
Ventajas : se pueden incluir funciones de agregación como condición de búsqueda, facilidad que no está permitida en WHERE.
Agrupamientos : HAVING
![Page 15: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/15.jpg)
15
Ejemplo:“Quiero saber el total de dinero (por cuenta) de las cuentas > 10.000 pero solo de los que tengan un total positivo”
SELECT cuenta, SUM(importe) AS Total
FROM Movimientos
WHERE cuenta > 10000
GROUP BY cuenta
HAVING SUM(importe) > 0;
Agrupamientos : HAVING
cuenta total 100071 51112.31000000 100102 100.0000000 100111 226857.2900000
cuenta total 100071 51112.31000000 100102 100.0000000 100111 226857.2900000
HAVING filtra grupos así como el WHERE
filtra registros.
HAVING filtra grupos así como el WHERE
filtra registros.
![Page 16: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/16.jpg)
16
SELECT cuenta,
MAX(importe) Maximo,
MIN (importe) Minimo,
AVG(importe) Promedio
FROM Movimientos
WHERE cuenta > 10000
GROUP BY cuenta
HAVING COUNT(*) > 2 AND SUM(importe) > 0
Agrupamientos : Un ejemplo
![Page 17: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/17.jpg)
17
Funciones de String
Funciones Aritméticas
Funciones de Fecha
Funciones del Sistema
Se pueden componer, siempre que se respeten los dominios de Entrada y Salida
Funciones Escalares
![Page 18: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/18.jpg)
18
LEN STR SUBSTRINGLOWER UPPERLTRIM CHARINDEXPATINDEX SPACECHAR REPLICATE REVERSE STUFFDIFFERENCE RIGHT
Funciones de String
![Page 19: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/19.jpg)
19
LEN( campo/valor) Devuelve el largo del string pasado como argumento.len(‘HOLA’) Resultado : 4len(‘’) Resultado : 0
STR( valor_numerico[, largo[, pos_decimales]])
SELECT str(-165.8768, 7, 2) Resultado : ‘-165.88’
SUBSTRING( campo/valor, posicion inicial, largo) Devuelve un fragmento del String (parametro 1)Los caracteres comienzan en la posición 1
SELECT substring("ROBERTO MARTINEZ DELGADO",8,7) Resultado : ‘ MARTIN’
Funciones de String
![Page 20: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/20.jpg)
20
LOWER(<char_expr>) Devuelve el mismo string pasado a minúsculas
UPPER(<char_expr>) Devuelve el mismo string pasado a mayúsculas
SELECT upper('Bob Smith1234*&^'), lower('Bob Smith1234*&^')
---------------- ----------------BOB SMITH1234*&^ bob smith1234*&^
LTRIM(<char_expr>) Remueve espacios en blanco de la izquierda
SELECT ltrim(' valor ')--------------valor
Funciones de String
![Page 21: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/21.jpg)
21
CHARINDEX retorna la posición de comienzo de una determinada cadena en una expresión, donde expresión usualmente es el nombre de una columna
CHARINDEX(<'char_expr'>, <expression>)
SELECT charindex('de','Un pequeño texto de muestra')
Resultado : 18
Funciones de String
![Page 22: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/22.jpg)
22
Función Parámetros SemánticaABS (N) Devuelve el valor absoluto de NSIGN (N) Devuelve -1 si N<0 , 1 si N>0 o 0CEILING (N) Entero inmediato siguiente a NFLOOR (N) Entero inmediato anterior a NEXP (N) EXP(N) = eN
LOG (N) LOG(N) = Loge(N)
POWER (x,y) POWER(x,y) = xy
ROUND (N, d) Redondea N a d digitosSQRT (N) Raiz cuadrada de N
Trigonométricas
Funciones Aritméticas
![Page 23: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/23.jpg)
23
DATEPART(<date_part>, d) Devuelve un componente de la fecha d : year, month, day, hour, minute, secondselect datepart(day, getdate() ) 14select datepart(year, ’25/07/2009’ ) 2009
DATENAME(<date part>, d) Devuelve el nombre de una parte de la fecha dselect datename(month,'25/07/2009') ‘July’select datename(weekday,'25/07/2009') ‘Saturday’
Funciones de Fecha
![Page 24: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/24.jpg)
24
DATEADD (<date part>, <number>, <date>) Suma o resta intervalos a una fecha (dias, meses, años,
etc.)select dateadd(day, 10, ’25/07/2009’) ‘4/8/2009’select dateadd(month, 2, ’25/07/2009’) ‘25/9/2009’select dateadd(month, -9, ’25/07/2009’) ‘25/10/2008’
DATEDIFF(<date part>, <date1>, <date2>) Calcula diferencia entre 2 fechas (en dias , meses, años,
etc). select datediff(day, '25/07/2009', '25/08/2009') 31select datediff(month, '25/07/2009', '25/08/2009') 1
Funciones de Fecha
![Page 25: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/25.jpg)
25
Permiten obtener información del entornoDevuelven información del sistema, usuario, BD y objetos de la BD. Suelen depender del DBMS.
getdate() , CURRENT_DATE(), CURRENT_TIME()Devuelven fecha/hora actual
host_name()Nombre del equipo desde donde se conectó.
db_name(), DATABASE()Nombre de la base en que estamos posicionados
user_name() , CURRENT_USER()Devuelve el nombre del usuario del DBMS actualmente
conectad @@VERSION , VERSION()
Devuelven la version del DBMS
Funciones del Sistema
![Page 26: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/26.jpg)
26
Son sentencias SELECT anidadas dentro de otra sentencia SELECT
Devuelven información a la principal y deben figurar siempre entre paréntesis.
Permiten implementar la operación DIFERENCIA del Algebra Relacional
Subqueries
![Page 27: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/27.jpg)
27
“Necesito listar personas que viven en la misma ciudad que ‘CLIENTE 10010’ “
SELECT persona, nombre, ciudad, departamento
FROM Personas
WHERE ciudad = (SELECT ciudad
FROM Personas
WHERE nombre = ‘CLIENTE 10010’
)
Subqueries (ejemplo)
![Page 28: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/28.jpg)
28
Las subqueries son evaluadas primero y su(s) valor(es) son sustituido(s) en la consulta principal.
Una subquery puede retornar :• Ningun valor
Consecuencias: Dicha subquery es equivalente a un valor NuloLa query general no retona ningún valor.
• Un valor Consecuencia : La subquery es equivalente a un número o valor carácter
• Un conjunto de valoresConsecuencia : La subquery retorna o una fila o una columna
Subqueries
![Page 29: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/29.jpg)
29
Restricciones:Solo si el subquery devuelve UN valor puede preguntarse por =Si el subquery devuelve UN campo se puede preguntar por INEn caso contrario se debe preguntar por EXISTS
Ejemplo 1:Listar las personas que viven en la misma ciudad que ‘ JUAN PEREZ’.
SELECT persona, nombre, ciudad, departamentoFROM PersonasWHERE ciudad = (select ciudad
from personas where nombre =
‘JUAN PEREZ’ )
Subqueries
Podemos usar = porque sabemos que solo se va a devolver 1 tupla.
![Page 30: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/30.jpg)
30
Ejemplo 2:Listar personas que viven en la misma ciudad y departamento que ‘JUAN PEREZ’.
SELECT persona, nombre, ciudad, departamento
FROM Personas P
WHERE EXISTS (select *
from personas P2
where P2.nombre = ‘JUAN PEREZ’
and P.ciudad = P2.ciudad
and P.departamento = P2.departamento
)
Subqueries
Usamos EXISTS porque no podemos preguntar si <Ciudad,Departamento> IN …..
![Page 31: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/31.jpg)
31
1. Correlacionadas
2. No-Correlacionadas
Correlacionadas (o inner SELECT): el valor producido por ella depende de un valor producido por el SELECT externo. En cualquier otro caso son No-Correlacionadas
Subqueries : Tipos
![Page 32: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/32.jpg)
32
Listar los Empleados cuyo sueldo está por debajo del promedio de su Sección
SELECT nro_emp, nom_emp, seccion, sueldo
FROM Empleados E1
WHERE sueldo < (SELECT AVG (sueldo)
FROM Empleados E2
WHERE E2.seccion = E1.seccion )
ORDER BY 1, 2, 3
La subquery es ejecutada por cada fila considerada por el SELECT externo
Subqueries Correlacionados
Deben referirse a la MISMA sección
![Page 33: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/33.jpg)
33
Permiten implementar DIFERENCIA de tablasEj: Que clientes no tienen cuentas
SELECT *FROM ClientesWHERE cod_cliente NOT IN
(SELECT cod_cliente FROM Cuentas)Sentencia equivalente (correlacionada) :
SELECT *FROM ClientesWHERE NOT EXISTS
(SELECT * FROM Cuentas WHERE Cuentas.cod_cliente =
Clientes.cod_cliente )
Subqueries : Negación
![Page 34: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/34.jpg)
34
Se utiliza NOT EXISTS cuando se desea evaluar un NOT IN con más de una columna
Ej: “Movimientos para los cuales no se ha ingresado una cotización aun (están en tabla MOVIMIENTOS pero NO en COTIZACIONES)”
SELECT M.id_mov, M.fecha, M.cuenta, C.moneda
FROM movimientos M, cuentas C
WHERE M.cuenta = C.cuenta
AND NOT EXISTS
( SELECT *
FROM Cotizaciones COT
WHERE COT.moneda = C.moneda
AND COT.fecha = M.fecha )
ORDER BY 1, 2, 3
Subqueries : Negación
![Page 35: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/35.jpg)
35
Se pueden utilizar en la cláusula HAVING para mayor expresividad.
“Clientes con un saldo en plazo fijo igual al más alto de todos los plazos fijos”
SELECT cliente, sum(saldo)
FROM Cuentas
GROUP BY cliente
Subqueries : Uso en HAVING
HAVING sum (saldo) = (SELECT max (saldo)
FROM cuentas
)
![Page 36: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/36.jpg)
36
Combina múltiples consultas en una solaFacilita ordenamiento no posible con una consulta simpleUNION : Operador que une el resultado de 2 o mas Consultas en una Consulta Simple.
2 Tipos : UNION
Excluye los resultados repetidos de las consultas unidas.
UNION ALLIncluye TODAS las tuplas de las consultas unidas (aun con repetición)
UNION
![Page 37: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/37.jpg)
37
UNION
SintaxisSELECT lista de columnas
FROM tablas[WHERE condicion]
UNION [ALL]
SELECT lista de columnasFROM tablas[WHERE condicion]
[Order By lista de columnas]
![Page 38: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/38.jpg)
38
Condiciones y RequisitosLa cantidad de columnas en cada sentencia SELECT debe ser la misma
El tipo de datos de cada columna entre los dos SELECT’s debe coincidir.
No se exige que sea la misma columna, ni siquiera que posea el mismo nombre.
Si deseo ordenar la salida, debo ubicar la sentencia ORDER BY al final de la consulta. Referencio las columnas por sus posiciones.
UNION
![Page 39: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/39.jpg)
39
Ejemplo
SELECT unique cuentas.cuenta, cuentas.producto
FROM movimientos, cuentas
WHERE movimientos.cuenta = cuentas.cuenta
and sucursal = 4
and importe > 3000000
UNION
SELECT unique cuentas.cuenta, cuentas.producto
FROM cuentas, cuentas_intereses
WHERE cuentas.cuenta =cuentas_intereses.cuenta
and cuentas_intereses.interes = 0;
UNION
![Page 40: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/40.jpg)
40
CuentaProducto95 3100 3102 3188 3247 3256 3266 3338 3570 3578 3599 3610 3947 31422 31423 323213 3101801 3102002 3105612 3105622 3
CuentaProducto95 3100 3102 3188 3247 3256 3266 3338 3570 3578 3599 3610 3947 31422 31423 323213 3101801 3102002 3105612 3105622 3
Resultado con UNION
Cuenta Producto95 3100 3102 3188 3247 3256 3266 3338 3570 3578 3578 3599 3610 3947 31422 31422 31423 323213 3101801 3102002 3105612 3105622 3
Cuenta Producto95 3100 3102 3188 3247 3256 3266 3338 3570 3578 3578 3599 3610 3947 31422 31422 31423 323213 3101801 3102002 3105612 3105622 3
UNIONResultado con UNION ALL
![Page 41: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/41.jpg)
41
UNION - Ejemplos Válidos
1) SELECT cod_cliente, nro_cuenta, cod_moneda, ‘Cliente 102’ as Grupo
FROM Cuentas
WHERE cod_cliente = 102
UNION
SELECT cod_cliente, nro_cuenta, cod_moneda , ‘Euros’ as Grupo
FROM Cuentas
WHERE cod_moneda = 3 and cod_cliente <> 102
ORDER BY 3,1,2
2) SELECT E.id_persona, P.nombre
FROM Personas P, Empleados E
WHERE P.id_persona = E.id_persona
UNION
SELECT C.cod_cliente, P.nombre
FROM Personas P, Clientes C
WHERE P.id_persona = C.id_persona
![Page 42: Base de Datos El lenguaje SQL](https://reader035.vdocuments.co/reader035/viewer/2022062217/56815259550346895dc08da1/html5/thumbnails/42.jpg)
42
UNION - Ejemplos Incorrectos1) SELECT cod_cliente, fec_apertura
FROM Cuentas
WHERE cod_cliente = 102
UNION
SELECT cod_cliente, nro_cuenta
FROM Cuentas
WHERE cod_moneda = 3 and cod_cliente <> 102
2) SELECT E.id_persona, P.nombre, E.fec_ingreso
FROM Personas P, Empleados E
WHERE P.id_persona = E.id_persona
UNION
SELECT C.cod_cliente, P.nombre
FROM Personas P, Clientes C
WHERE P.id_persona = C.id_persona
, ???????