Se revisa las sentiencias de next_day
select next_day(sysdate, 'lunes')from dual
ademas
select chr(12) from dual
Concatenar caracteres
select ('hola''Mundo') from dual
Agregar caracteres a la derecha o a la izquierda con LPAD y RPAD
select lpad('hola',20,'+') from dual
resultado= ++++++++++++++++hola
Replace
select replace('El profe es vacan', 'v', 'b')from dual
Resultado= 'El profe es bacan'
substr
select substr('el galeon español', 4, 6)from dual
resultado= 'galeon'
instr (NO ENTENDI LO QUE HACE)
select instr('corporate floor', 'or', 3, 2)from dual
resultado= 14
Piso y cielo (floor, ceil) aproxima hacia arriba o hacia abajo
select ceil('3,58') from dual
resultado= 4
select floor('3,58') from dual
resultado=3
calcular potencia
select power(2,5)from dual
da el resultado de 2 elevado a 5 osea 32
diferencia entre round y trunc
select round(2.27, 1)from dual
resultado= 2.3
select trunc(2.27, 1)from dual
resultado= 2.2
Funcion case para seleccionar entre alternativas
select salario, case
when salario <100000 then 'Reguleque'
when salario >300000 then 'Super'
else 'Esta bien'
end
from empleado
se crea una funcion para identificar si un numero es par o impar
create FUNCTION paroimpar (pnumero int)
return varchar2
is
vtexto varchar2(5);
begin
if mod(pnumero,2)=0 then
vtexto:='Par';
else
vtexto:='Impar';
end if;
return vtexto;
end paroimpar;
miércoles, 28 de diciembre de 2011
miércoles, 21 de diciembre de 2011
Clase miércoles 21/12/2011
CURSORES BIEN EXPLICADO ---> http://www.desarrolloweb.com/articulos/cursores-pl-sql-I.html
--atributos que nos interesan
ALL_TABLES
(owner)
(table_name)
(Tabid)
select owner, table_name
from all_tables
where owner = '154345272'
--atributos que nos interesan
ALL_TAB_COLUMNS
(column_name)
(owner)
(table_name)
Select distinct col.column_name
from all_tab_columns col
Where upper(owner)='154345272'
/*obtener todas las tablas, columnas y nombre owner*/
DECLARE
vPropietario varchar2(40);
vNombreTabla varchar2(40);
vNombreColumna varchar2(100);
/* Primer cursor */
cursor obtieneTablas is
select distinct t.owner, t.table_name
from all_tables t
where t.owner = '154345272';
/* Segundo cursor */
cursor obtieneColumnas is
select distinct c.column_name
from all_tab_columns c
where c.owner = vPropietario
and c.table_name = vNombreTabla;
begin
open obtieneTablas;
dbms_output.put_line('Abriendo Cursor - obtieneTablas');
loop fetch obtieneTablas into vPropietario, vNombreTabla;
exit when obtieneTablas%NOTFOUND;
dbms_output.put_line('Tabla : '||vPropietario||'.'||
vNombreTabla);
open obtieneColumnas;
loop fetch obtieneColumnas into vNombreColumna;
exit when obtieneColumnas%NOTFOUND;
dbms_output.put_line('=>'||vNombreTabla||'.'||
vNombreColumna);
end loop;
close obtieneColumnas;
end loop;
close obtieneTablas;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Se ha detectado un error - '||
SQLCODE||' -ERROR- '||SQLERRM);
end;
*******************************************
select owner, table_name
from all_tables
where owner = '154345272'
Select distinct col.column_name
from all_tab_columns col
Where upper(owner)='154345272'
Select owner,Table_name,Column_name
from all_tab_columns
Where upper(owner)='154345272'
/*obtener todas las tablas, columnas y nombre owner*/
DECLARE
vPropietario varchar2(40);
vNombreTabla varchar2(40);
vNombreColumna varchar2(100);
/* Primer cursor */
cursor obtieneTablas is
select distinct t.owner, t.table_name
from all_tables t
where t.owner = '154345272';
/* Segundo cursor */
cursor obtieneColumnas is
select distinct c.column_name
from all_tab_columns c
where c.owner = vPropietario
and c.table_name = vNombreTabla;
begin
open obtieneTablas;
dbms_output.put_line('Abriendo Cursor - obtieneTablas');
loop fetch obtieneTablas into vPropietario, vNombreTabla;
exit when obtieneTablas%NOTFOUND;
dbms_output.put_line('Tabla : '||vPropietario||'.'||
vNombreTabla);
open obtieneColumnas;
loop fetch obtieneColumnas into vNombreColumna;
exit when obtieneColumnas%NOTFOUND;
dbms_output.put_line('=>'||vNombreTabla||'.'||
vNombreColumna);
end loop;
close obtieneColumnas;
end loop;
close obtieneTablas;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Se ha detectado un error - '||
SQLCODE||' -ERROR- '||SQLERRM);
end;
--FUNCIONES
select sysdate from dual;
select to_char (to_date('20/09/1982','dd-mm-yyyy'),'DAY') from dual;
select '***'|| to_char (to_date('20/09/1982','dd-mm-yyyy'),'DAY')||'***' from dual;
--publicar 2 o 3 ejemplos de TO_CHAR con TO_DATE
-- RECORDANDO A UTILIZAR EL %TYPE
-- DECLARAR TIPO RECORD
select a,b into va,vb;
TYPE mitiporecord is RECORD
(
va varchar2(2),
vb int
);
create table tx (x int,y varchar(5));
insert into tx
select rownum,trunc(dbms_random.value(1,99999))
from dual
connect by rownum <= 10;
select * from tx;
--probar de la segunda letra
select instr ('Hola mundo','o',1,2) from dual
--probar de la tercera letra
select instr ('Hola mundo','o',3,2) from dual
--agregar un mes
Select add_months (sysdate,1) from dual
--dia de la semana
Select to_char (add_months (sysdate,-1),'day') from dual
--atributos que nos interesan
ALL_TABLES
(owner)
(table_name)
(Tabid)
select owner, table_name
from all_tables
where owner = '154345272'
--atributos que nos interesan
ALL_TAB_COLUMNS
(column_name)
(owner)
(table_name)
Select distinct col.column_name
from all_tab_columns col
Where upper(owner)='154345272'
/*obtener todas las tablas, columnas y nombre owner*/
DECLARE
vPropietario varchar2(40);
vNombreTabla varchar2(40);
vNombreColumna varchar2(100);
/* Primer cursor */
cursor obtieneTablas is
select distinct t.owner, t.table_name
from all_tables t
where t.owner = '154345272';
/* Segundo cursor */
cursor obtieneColumnas is
select distinct c.column_name
from all_tab_columns c
where c.owner = vPropietario
and c.table_name = vNombreTabla;
begin
open obtieneTablas;
dbms_output.put_line('Abriendo Cursor - obtieneTablas');
loop fetch obtieneTablas into vPropietario, vNombreTabla;
exit when obtieneTablas%NOTFOUND;
dbms_output.put_line('Tabla : '||vPropietario||'.'||
vNombreTabla);
open obtieneColumnas;
loop fetch obtieneColumnas into vNombreColumna;
exit when obtieneColumnas%NOTFOUND;
dbms_output.put_line('=>'||vNombreTabla||'.'||
vNombreColumna);
end loop;
close obtieneColumnas;
end loop;
close obtieneTablas;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Se ha detectado un error - '||
SQLCODE||' -ERROR- '||SQLERRM);
end;
*******************************************
select owner, table_name
from all_tables
where owner = '154345272'
Select distinct col.column_name
from all_tab_columns col
Where upper(owner)='154345272'
Select owner,Table_name,Column_name
from all_tab_columns
Where upper(owner)='154345272'
/*obtener todas las tablas, columnas y nombre owner*/
DECLARE
vPropietario varchar2(40);
vNombreTabla varchar2(40);
vNombreColumna varchar2(100);
/* Primer cursor */
cursor obtieneTablas is
select distinct t.owner, t.table_name
from all_tables t
where t.owner = '154345272';
/* Segundo cursor */
cursor obtieneColumnas is
select distinct c.column_name
from all_tab_columns c
where c.owner = vPropietario
and c.table_name = vNombreTabla;
begin
open obtieneTablas;
dbms_output.put_line('Abriendo Cursor - obtieneTablas');
loop fetch obtieneTablas into vPropietario, vNombreTabla;
exit when obtieneTablas%NOTFOUND;
dbms_output.put_line('Tabla : '||vPropietario||'.'||
vNombreTabla);
open obtieneColumnas;
loop fetch obtieneColumnas into vNombreColumna;
exit when obtieneColumnas%NOTFOUND;
dbms_output.put_line('=>'||vNombreTabla||'.'||
vNombreColumna);
end loop;
close obtieneColumnas;
end loop;
close obtieneTablas;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Se ha detectado un error - '||
SQLCODE||' -ERROR- '||SQLERRM);
end;
--FUNCIONES
select sysdate from dual;
select to_char (to_date('20/09/1982','dd-mm-yyyy'),'DAY') from dual;
select '***'|| to_char (to_date('20/09/1982','dd-mm-yyyy'),'DAY')||'***' from dual;
--publicar 2 o 3 ejemplos de TO_CHAR con TO_DATE
-- RECORDANDO A UTILIZAR EL %TYPE
-- DECLARAR TIPO RECORD
select a,b into va,vb;
TYPE mitiporecord is RECORD
(
va varchar2(2),
vb int
);
create table tx (x int,y varchar(5));
insert into tx
select rownum,trunc(dbms_random.value(1,99999))
from dual
connect by rownum <= 10;
select * from tx;
--probar de la segunda letra
select instr ('Hola mundo','o',1,2) from dual
--probar de la tercera letra
select instr ('Hola mundo','o',3,2) from dual
--agregar un mes
Select add_months (sysdate,1) from dual
--dia de la semana
Select to_char (add_months (sysdate,-1),'day') from dual
sábado, 17 de diciembre de 2011
Clase Sabado 17-12-2011
declare
begin
exception
end
vtipo propiedad.tipo%type
dbms_output.put_line( );
select nombre, sexo
from empleado
declare
vnombre empleado.nombre%type;
vsexo empleado.sexo%type;
vtexto varchar(25);
cursor micursor is
[select nombre, sexo from empleado]
begin
open micursor;
loop
fetch micursor into vnombre, vsexo;
exit when micursor%notfound
if
vsexo='M' then
vtexto='Hombre'
elsif
vsexo='F' then
vtexto='Mujer'
else
vtexto='Ambiguo'
endif
dbms_output.putline(vnombre ││ 'ø' ││ vsexo 'ø' ││ vtexto);
end loop;
close micursor
Recuperacion Sabado 17
Se reviso fechas de proxima prueba y examen
sababo 7 de enero catedra2
sabado 14 de enero examen
se continua con la clase normal...
CURSORES
Declare
vgenero varchar2(10);
vnombre empleado.nombre%type;
vsexo empleado.sexo%type;
cursor listageneroempleado is
select nombre, sexo from empleado;
Begin
open listageneroempleado;
loop
fetch listageneroempleado INTO vnombre, vsexo;
exit when listageneroempleado%notfound
if sexo='M' then
vgenero='Hombre';
else if sexo='F' then
vgenero='Mujer';
else
vgenero='Ambiguo';
end if;
DBMS_Output.put_line(vnombre' 'vsexo' 'vgenero);
End loop;
close listageneroempleado;
END;
sababo 7 de enero catedra2
sabado 14 de enero examen
se continua con la clase normal...
CURSORES
Declare
vgenero varchar2(10);
vnombre empleado.nombre%type;
vsexo empleado.sexo%type;
cursor listageneroempleado is
select nombre, sexo from empleado;
Begin
open listageneroempleado;
loop
fetch listageneroempleado INTO vnombre, vsexo;
exit when listageneroempleado%notfound
if sexo='M' then
vgenero='Hombre';
else if sexo='F' then
vgenero='Mujer';
else
vgenero='Ambiguo';
end if;
DBMS_Output.put_line(vnombre' 'vsexo' 'vgenero);
End loop;
close listageneroempleado;
END;
viernes, 16 de diciembre de 2011
"ESTUDIAR LAS SIGUIENTES INSTRUCCIONES"
INSERT
CONSTRAINT
SELECT
DELETE = ELIMINAR LOS REGISTROS
DML "data manipulation language" /DDL "data definition language"
NULL = es un valor especial para los atributos que nunca han tenido un contenido
DROP = ELIMINAR LA TABLA
IN
DUAL
GROUP
DISTINCT
TRIM
CREATE TABLE
CREATE SEQUENCE
LIKE
WHERE
COUNT/MAX/MIN/AVG
ORDER BY
RPUND
DESC
BETWEEN
UPPER / LOWER
--------------------------------------
EJEMPLO INSERT
TABLA T1 (
A INT PRIMARY KEY,
B VARCHAR (2)
);
INSERT INTO T1 VALUES (1,'...')
--------------------------------------
PK_T1
--------------------------------------
EJERCICIOS
--LISTAR LAS PROPIEDADES QUE TIENE UN CLIENTE (NOMBRE,APELLIDO,NUMPROP,F.INICIO ARRIENDO)
--FORMA MAS FACIL DE HACER UN JOIN
SELECT C.nombre, C.apellido, A.numPropiedad, A.inicioRenta
FROM CLIENTE C, ARRIENDO A
WHERE C.NumCliente = A.NumCliente
AND C.nombre = 'Jhon'
AND C.apellido = 'Perez'
--LISTAR EL NUMERO DE TODAS LAS OFICINAS QUE SE ENCUENTRAN EN VALDIVIA
SELECT numOficina
FROM OFICINA
WHERE CIUDAD = 'Valdivia'
--listar todos los empleaods que trabajan en la oficina de Valdivia
SELECT numEmpleado,Nombre,Apellido
FROM Empleado
Where numOficina IN ('B115','B015');
SELECT numEmpleado,Nombre,Apellido
FROM Empleado
Where numOficina IN (SELECT numOficina
FROM OFICINA
WHERE CIUDAD = 'Valdivia');
--que es lo que entrega el max
SELECT MAX (salario)
FROM Empleado
WHERE sexo = 'F';
--sequence
CREATE SEQUENCE seqt1
START WITH 10
INCREMENT BY 10;
--uso de la secuencia
SELECT seqt1.NEXTVAL FROM dual;
INSERT INTO T1 VALUES (seqT1.NEXTVAL,'1');
CREATE TABLE T1 (
A INT PRIMARY KEY,
B VARCHAR (2)
);
--calcular el salario mostrar nombre,apellido,salario,promedio y la diferencia
SELECT Nombre,Apellido,Salario,(SELECT AVG(Salario) FROM EMPLEADO) AS Promedio,
Salario - (SELECT AVG(Salario) FROM EMPLEADO) AS DIFERENCIA
FROM EMPLEADO
--numero de la oficina, cantidad de empleados(contar), sueldo promedio por oficina(promedio)
SELECT numOficina,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario), MIN(Salario)
FROM Empleado
GROUP BY numOficina
SELECT O.ciudad,O.numOficina,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario), MIN(Salario)
FROM Empleado E, Oficina O
WHERE E.numOficina = O.numOficina
GROUP BY O.ciudad, O.numOficina
--cantidad de oficinas por ciudad
SELECT O.ciudad,O.numOficina,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario) AS MAXIMO, MIN(Salario) AS MINIMO
FROM Empleado E, Oficina O
WHERE E.numOficina = O.numOficina
GROUP BY O.ciudad, O.numOficina
ORDER BY O.Ciudad
SELECT ciudad,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario), MIN(Salario)
FROM Oficina
GROUP BY ciudad
-- Listar las oficina que tiene el salario promedio más ALTO
SELECT numOficina,AVG (Salario) AS SALARIO --MAX(Salario) AS MAXIMO
FROM Empleado
GROUP BY numOficina
HAVING AVG(Salario) = (SELECT MAX(AVG(Salario)) FROM Empleado
GROUP BY numOficina)
--Listar las ciudades que tengan màs de 2 oficinas
SELECT Ciudad,count (numOficina)
FROM Oficina
GROUP BY Ciudad
HAVING count(numOficina) > 2
INSERT
CONSTRAINT
SELECT
DELETE = ELIMINAR LOS REGISTROS
DML "data manipulation language" /DDL "data definition language"
NULL = es un valor especial para los atributos que nunca han tenido un contenido
DROP = ELIMINAR LA TABLA
IN
DUAL
GROUP
DISTINCT
TRIM
CREATE TABLE
CREATE SEQUENCE
LIKE
WHERE
COUNT/MAX/MIN/AVG
ORDER BY
RPUND
DESC
BETWEEN
UPPER / LOWER
--------------------------------------
EJEMPLO INSERT
TABLA T1 (
A INT PRIMARY KEY,
B VARCHAR (2)
);
INSERT INTO T1 VALUES (1,'...')
--------------------------------------
PK_T1
--------------------------------------
EJERCICIOS
--LISTAR LAS PROPIEDADES QUE TIENE UN CLIENTE (NOMBRE,APELLIDO,NUMPROP,F.INICIO ARRIENDO)
--FORMA MAS FACIL DE HACER UN JOIN
SELECT C.nombre, C.apellido, A.numPropiedad, A.inicioRenta
FROM CLIENTE C, ARRIENDO A
WHERE C.NumCliente = A.NumCliente
AND C.nombre = 'Jhon'
AND C.apellido = 'Perez'
--LISTAR EL NUMERO DE TODAS LAS OFICINAS QUE SE ENCUENTRAN EN VALDIVIA
SELECT numOficina
FROM OFICINA
WHERE CIUDAD = 'Valdivia'
--listar todos los empleaods que trabajan en la oficina de Valdivia
SELECT numEmpleado,Nombre,Apellido
FROM Empleado
Where numOficina IN ('B115','B015');
SELECT numEmpleado,Nombre,Apellido
FROM Empleado
Where numOficina IN (SELECT numOficina
FROM OFICINA
WHERE CIUDAD = 'Valdivia');
--que es lo que entrega el max
SELECT MAX (salario)
FROM Empleado
WHERE sexo = 'F';
--sequence
CREATE SEQUENCE seqt1
START WITH 10
INCREMENT BY 10;
--uso de la secuencia
SELECT seqt1.NEXTVAL FROM dual;
INSERT INTO T1 VALUES (seqT1.NEXTVAL,'1');
CREATE TABLE T1 (
A INT PRIMARY KEY,
B VARCHAR (2)
);
--calcular el salario mostrar nombre,apellido,salario,promedio y la diferencia
SELECT Nombre,Apellido,Salario,(SELECT AVG(Salario) FROM EMPLEADO) AS Promedio,
Salario - (SELECT AVG(Salario) FROM EMPLEADO) AS DIFERENCIA
FROM EMPLEADO
--numero de la oficina, cantidad de empleados(contar), sueldo promedio por oficina(promedio)
SELECT numOficina,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario), MIN(Salario)
FROM Empleado
GROUP BY numOficina
SELECT O.ciudad,O.numOficina,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario), MIN(Salario)
FROM Empleado E, Oficina O
WHERE E.numOficina = O.numOficina
GROUP BY O.ciudad, O.numOficina
--cantidad de oficinas por ciudad
SELECT O.ciudad,O.numOficina,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario) AS MAXIMO, MIN(Salario) AS MINIMO
FROM Empleado E, Oficina O
WHERE E.numOficina = O.numOficina
GROUP BY O.ciudad, O.numOficina
ORDER BY O.Ciudad
SELECT ciudad,count(*) AS CUENTA,AVG(Salario) AS SALARIO, MAX(Salario), MIN(Salario)
FROM Oficina
GROUP BY ciudad
-- Listar las oficina que tiene el salario promedio más ALTO
SELECT numOficina,AVG (Salario) AS SALARIO --MAX(Salario) AS MAXIMO
FROM Empleado
GROUP BY numOficina
HAVING AVG(Salario) = (SELECT MAX(AVG(Salario)) FROM Empleado
GROUP BY numOficina)
--Listar las ciudades que tengan màs de 2 oficinas
SELECT Ciudad,count (numOficina)
FROM Oficina
GROUP BY Ciudad
HAVING count(numOficina) > 2
Clase Viernes 16-12-2011
Listar las propiedades que "tiene" un "cliente"
(nombre,apellido,numprop,finicio(arriendo))
Join:
select c.nombre, c.apellido, a.numpropiedad, a.finicio
from cliente c, arriendo a
where c.numcliente=a.numcliente
and nombre='Juan'
and apellido='Perez'
select c.nombre, c.apellido, a.numpropiedad, a.finicio
from cliente c, arriendo a
where c.numcliente=a.numcliente
and a.numpropiedad=p.numpropiedad
and p.numempleado=e.numempleado
Para lista el numero de oficinas que estan en Valdivia:
select numoficina
from oficina
where ciudad='Valdivia';
Listar empleados que estan en Valdivia:
select numempleado,nombre,apellido
from empleado
where numoficina in (select numoficina
from oficina
where ciudad='Valdivia');
Secuencias:
create
start with 10
increment by 10;
Prueba de la secuencia:
select
insert into t1 values (seqt1.nextval,'1');
Promedio del salario de los empleados:
select
salario - (select avg (salario) from empleado) as diferencia
from empleado
select numoficina, count (*), avg(salario), max(salario), min(salario)
from empleado
group by numoficina
select
from empleado e, oficina o
where e.numoficina=o.numoficina
group by o.ciudad, o.numoficina
Listar las oficinas con el salario promedio mas alto:
select
from empleado
group by numoficina
having avg(salario) = (select max(avg(salario)) from empleado group by numoficina)
numoficina,avg(salario) o.ciudad, o.numoficina, count (*), avg(salario), max(salario), min(salario) nombre, apellido, salario, round((select avg (salario) from empleado),1) as promedio, seqt1.nextval from dual; sequence seqt1
(nombre,apellido,numprop,finicio(arriendo))
Join:
select c.nombre, c.apellido, a.numpropiedad, a.finicio
from cliente c, arriendo a
where c.numcliente=a.numcliente
and nombre='Juan'
and apellido='Perez'
select c.nombre, c.apellido, a.numpropiedad, a.finicio
from cliente c, arriendo a
where c.numcliente=a.numcliente
and a.numpropiedad=p.numpropiedad
and p.numempleado=e.numempleado
Para lista el numero de oficinas que estan en Valdivia:
select numoficina
from oficina
where ciudad='Valdivia';
Listar empleados que estan en Valdivia:
select numempleado,nombre,apellido
from empleado
where numoficina in (select numoficina
from oficina
where ciudad='Valdivia');
Secuencias:
create
start with 10
increment by 10;
Prueba de la secuencia:
select
insert into t1 values (seqt1.nextval,'1');
Promedio del salario de los empleados:
select
salario - (select avg (salario) from empleado) as diferencia
from empleado
select numoficina, count (*), avg(salario), max(salario), min(salario)
from empleado
group by numoficina
select
from empleado e, oficina o
where e.numoficina=o.numoficina
group by o.ciudad, o.numoficina
Listar las oficinas con el salario promedio mas alto:
select
from empleado
group by numoficina
having avg(salario) = (select max(avg(salario)) from empleado group by numoficina)
numoficina,avg(salario) o.ciudad, o.numoficina, count (*), avg(salario), max(salario), min(salario) nombre, apellido, salario, round((select avg (salario) from empleado),1) as promedio, seqt1.nextval from dual; sequence seqt1
Clase Viernes 16 diciembre
Un Join mas complejo
select c.nombre, c.apellido, a.numpropiedad, a.finicio, e.numempleado
from cliente c, arriendo a, propiedad p, empleado e
where c.numcliente=a.numcliente
and a.numpropiedad=p.numpropiedad
and p.numempleado=e.numpropiedad...
Teoria
DDL = Lenguaje de definicion de datos
DML= Lenguaje de manipulacion de datos
IN
select * from empleado where numoficina IN( Select numoficina from oficina where ciudad='Valdivia')
MAX
select max(salario) from empleado where sexo='M'
SEQUENCE
create sequence seqt1
start with 10 increment by 10;
select seqt1.nextval from dual;
insert into t1 values (seqt1.nextval, '6');
select * from t1
Promedio y round (avg, round)
select nombre, apellido, salario, round((select avg(salario) from empleado),1) as promedio, salario-round((select avg(salario) from empleado),1) as diferencia
from empleado
select numoficina, count (*), avg(salario), max(salario), min(salario)
from empleado
group by numoficina
select o.ciudad, o.numoficina, count (*), avg(salario), max(salario), min(salario)
from empleado e, oficina o
where e.numoficina=o.numoficina
group by o.ciudad, o.numoficina
order by o.ciudad
select c.nombre, c.apellido, a.numpropiedad, a.finicio, e.numempleado
from cliente c, arriendo a, propiedad p, empleado e
where c.numcliente=a.numcliente
and a.numpropiedad=p.numpropiedad
and p.numempleado=e.numpropiedad...
Teoria
DDL = Lenguaje de definicion de datos
DML= Lenguaje de manipulacion de datos
IN
select * from empleado where numoficina IN( Select numoficina from oficina where ciudad='Valdivia')
MAX
select max(salario) from empleado where sexo='M'
SEQUENCE
create sequence seqt1
start with 10 increment by 10;
select seqt1.nextval from dual;
insert into t1 values (seqt1.nextval, '6');
select * from t1
Promedio y round (avg, round)
select nombre, apellido, salario, round((select avg(salario) from empleado),1) as promedio, salario-round((select avg(salario) from empleado),1) as diferencia
from empleado
select numoficina, count (*), avg(salario), max(salario), min(salario)
from empleado
group by numoficina
select o.ciudad, o.numoficina, count (*), avg(salario), max(salario), min(salario)
from empleado e, oficina o
where e.numoficina=o.numoficina
group by o.ciudad, o.numoficina
order by o.ciudad
sábado, 10 de diciembre de 2011
Clases Sabado 10
Se crea un programa simple usando variables y SQL
la PPT de la materia ya esta disponible en el sitio de la U
el codigo de ejemplo es:
/*Creacion de la tabla*/
create table T1(
e integer,
f integer
);
/*se consulta la tabla creada*/
select * from T1
/*Se insertan datos a la tabla*/
Begin
DELETE FROM T1;
INSERT INTO T1 VALUES(1, 3);
INSERT INTO T1 VALUES(2, 4);
End;
/*se ejecuta el programa*/
DECLARE
a NUMBER;
b NUMBER;
BEGIN
SELECT e,f INTO a,b
FROM T1 WHERE e>1;
INSERT INTO T1 VALUES(b,a);
END;
/*se consulta nuevamente la tabla creada*/
select * from T1
/*para mostrar registros por pantalla*/
BEGIN
DBMS_OUTPUT.PUT_LINE('HOLA MUNDO');
END;
/*Ejemplo de impresion con el uso de un programa y el uso de IF*/
declare
precio integer:=150;
BEGIN
if precio>=15 then
DBMS_OUTPUT.PUT_LINE('El precio es: 'precio);
end if;
end;
/*OTRO EJEMPLO*/
declare
precio integer:=150;
texto varchar2(5);
BEGIN
if precio>=15 then
texto:='mayor';
else
texto:='menor';
end if;
DBMS_OUTPUT.PUT_LINE('El precio es 'texto' y es: 'precio);
end;
la PPT de la materia ya esta disponible en el sitio de la U
el codigo de ejemplo es:
/*Creacion de la tabla*/
create table T1(
e integer,
f integer
);
/*se consulta la tabla creada*/
select * from T1
/*Se insertan datos a la tabla*/
Begin
DELETE FROM T1;
INSERT INTO T1 VALUES(1, 3);
INSERT INTO T1 VALUES(2, 4);
End;
/*se ejecuta el programa*/
DECLARE
a NUMBER;
b NUMBER;
BEGIN
SELECT e,f INTO a,b
FROM T1 WHERE e>1;
INSERT INTO T1 VALUES(b,a);
END;
/*se consulta nuevamente la tabla creada*/
select * from T1
/*para mostrar registros por pantalla*/
BEGIN
DBMS_OUTPUT.PUT_LINE('HOLA MUNDO');
END;
/*Ejemplo de impresion con el uso de un programa y el uso de IF*/
declare
precio integer:=150;
BEGIN
if precio>=15 then
DBMS_OUTPUT.PUT_LINE('El precio es: 'precio);
end if;
end;
/*OTRO EJEMPLO*/
declare
precio integer:=150;
texto varchar2(5);
BEGIN
if precio>=15 then
texto:='mayor';
else
texto:='menor';
end if;
DBMS_OUTPUT.PUT_LINE('El precio es 'texto' y es: 'precio);
end;
Recuperacion Sabado 10 de diciembre
Para encontrar un valor entre ciertos rangos
select * from empleado
where salario >= 200000
and salario <= 300000;
otra manera de hacer lo mismo es:
select * from empleado
where salario between 200000 and 300000;
select * from empleado
where fechanac between '01-12-1960' and '31-12-1960';
hacer un join entre 2 tablas
select e.numempleado, e.nombre, o.ciudad
from empleado e, oficina o
where e.numoficina=o.numoficina;
listar los gerentes que ganan mas de 200000
select * from empleado
where cargo='gerente' and salario>=200000;
listar todos los clientes que contengan 'Glasgow' en su direccion
select * from cliente
where direccion like '%Glasgow%';
clientes que su nombre empieza con 'P'
select * from cliente
where nombre like 'P%'
estudiar comando trim, ltrim y rtrim, para no considerar espacios en un campo
ejemplo de trim
select * from empleado
where trim(cargo) like 'Gerent_'
listar todas las visitas que tienen comentario
select * from visita
where comentario is not null;
select * from empleado
where salario >= 200000
and salario <= 300000;
otra manera de hacer lo mismo es:
select * from empleado
where salario between 200000 and 300000;
select * from empleado
where fechanac between '01-12-1960' and '31-12-1960';
hacer un join entre 2 tablas
select e.numempleado, e.nombre, o.ciudad
from empleado e, oficina o
where e.numoficina=o.numoficina;
listar los gerentes que ganan mas de 200000
select * from empleado
where cargo='gerente' and salario>=200000;
listar todos los clientes que contengan 'Glasgow' en su direccion
select * from cliente
where direccion like '%Glasgow%';
clientes que su nombre empieza con 'P'
select * from cliente
where nombre like 'P%'
estudiar comando trim, ltrim y rtrim, para no considerar espacios en un campo
ejemplo de trim
select * from empleado
where trim(cargo) like 'Gerent_'
listar todas las visitas que tienen comentario
select * from visita
where comentario is not null;
viernes, 9 de diciembre de 2011
Viernes 09/12/2011
Herramientas
*Dropbox
Permite compartir archivos con la nube
*DIIGO
Permite guardar las URL y publicarlas
ejemplo: www.diigo.com/user/efischer
Diapositiva DreamHome
Tablas
Arriendo
Cliente
Visita
Propietario
Oficina
Propiedad
Empleado
El código de la creación de las tablas se encuentra en ORAHELP.BLOGSPOT.COM
Para que es la tabla dual
¿que es?
Oracle es una base de datos relacional, quiere decir que todos los elementos son relaciones. Entonces cuando
necesitamos realizar una operación podemos hacer uso del dual.
ejemplo
Fecha actual
SELECT SYSDATE FROM DUAL
Ejercicio 1
Crear tabla persona
atributos:
id
nombre
apellido
fechanac
renta
Desarrollo ejercicio 1
CREATE TABLE Persona (
id integer not null,
Nombre integer not null,
Apellido varchar(40),
Fechanac date,
Renta numeric(5,1),
constraint pk_persona primary key(id)
);
Importante
¿Qué comando debo utilizar para saber cuantas tablas tengo creadas?
select * from tab
¿Cómo sé la estructura que tiene una tabla?
DEsC nombre tabla ejemplo: DESC Persona
AUTOINCREMENTO
CREATE SEQUENCE SEQPersona;
LISTAR NUMERO DE PROPIEDAD (numpropiedad) DE TODAS LAS PROPIEDADES QUE HAN SIDO VISITADAS
LISTAR EL SALARIO MENSUAL PARA TODOS LOS EMPLEADOS
LISTAR EL NOMBRE EMPLEADO
LISTAR EL NUMERO EMPLEADO
SELECT NUMEMPLEADO,NOMBRE,ROUND (SALARIO/12,1) AS "SALARIO MENSUAL"
FROM EMPLEADO;
LISTAR TODOS LOS EMPLEADOS QUE GANA MAS DE 100 DOLARES
SELECT NUMEMPLEADO,NOMBRE,ROUND (SALARIO) AS "SALARIO MENSUAL"
FROM EMPLEADO;
WHERE SALARIO > 100000
LISTAR LA INFORMACION DE TODAS LAS OFICINAS QUE ESTAN EN CASTELLON O SANTIAGO? (atributos distintos)
SELECT *
FROM OFICINA
WHERE CIUDAD= 'Arica'
OR CIUDAD= 'Santiago';
SELECT *
FROM OFICINA
WHERE UPPER (CIUDAD)= 'ARICA'
OR LOWER (CIUDAD)= 'santiago';
SELECT *
FROM OFICINA
WHERE UPPER (CIUDAD) IN ('ARICA','SANTIAGO');
LISTAR TODOS LOS EMPLEADOS QUE NO SON GERENTES NI SUPERVISORES
SELECT *
FROM EMPLEADO
WHERE UPPER (CARGO) NOT IN ('GERENTES','SUPERVISORES');
link de interes: http://cursos.atica.um.es/DBA9i1/sqlplus.html
*Dropbox
Permite compartir archivos con la nube
*DIIGO
Permite guardar las URL y publicarlas
ejemplo: www.diigo.com/user/efischer
Diapositiva DreamHome
Tablas
Arriendo
Cliente
Visita
Propietario
Oficina
Propiedad
Empleado
El código de la creación de las tablas se encuentra en ORAHELP.BLOGSPOT.COM
Para que es la tabla dual
¿que es?
Oracle es una base de datos relacional, quiere decir que todos los elementos son relaciones. Entonces cuando
necesitamos realizar una operación podemos hacer uso del dual.
ejemplo
Fecha actual
SELECT SYSDATE FROM DUAL
Ejercicio 1
Crear tabla persona
atributos:
id
nombre
apellido
fechanac
renta
Desarrollo ejercicio 1
CREATE TABLE Persona (
id integer not null,
Nombre integer not null,
Apellido varchar(40),
Fechanac date,
Renta numeric(5,1),
constraint pk_persona primary key(id)
);
Importante
¿Qué comando debo utilizar para saber cuantas tablas tengo creadas?
select * from tab
¿Cómo sé la estructura que tiene una tabla?
DEsC nombre tabla ejemplo: DESC Persona
AUTOINCREMENTO
CREATE SEQUENCE SEQPersona;
LISTAR NUMERO DE PROPIEDAD (numpropiedad) DE TODAS LAS PROPIEDADES QUE HAN SIDO VISITADAS
LISTAR EL SALARIO MENSUAL PARA TODOS LOS EMPLEADOS
LISTAR EL NOMBRE EMPLEADO
LISTAR EL NUMERO EMPLEADO
SELECT NUMEMPLEADO,NOMBRE,ROUND (SALARIO/12,1) AS "SALARIO MENSUAL"
FROM EMPLEADO;
LISTAR TODOS LOS EMPLEADOS QUE GANA MAS DE 100 DOLARES
SELECT NUMEMPLEADO,NOMBRE,ROUND (SALARIO) AS "SALARIO MENSUAL"
FROM EMPLEADO;
WHERE SALARIO > 100000
LISTAR LA INFORMACION DE TODAS LAS OFICINAS QUE ESTAN EN CASTELLON O SANTIAGO? (atributos distintos)
SELECT *
FROM OFICINA
WHERE CIUDAD= 'Arica'
OR CIUDAD= 'Santiago';
SELECT *
FROM OFICINA
WHERE UPPER (CIUDAD)= 'ARICA'
OR LOWER (CIUDAD)= 'santiago';
SELECT *
FROM OFICINA
WHERE UPPER (CIUDAD) IN ('ARICA','SANTIAGO');
LISTAR TODOS LOS EMPLEADOS QUE NO SON GERENTES NI SUPERVISORES
SELECT *
FROM EMPLEADO
WHERE UPPER (CARGO) NOT IN ('GERENTES','SUPERVISORES');
link de interes: http://cursos.atica.um.es/DBA9i1/sqlplus.html
clase viernes 9 de dic
Dual es una tabla ficticia que crea y utiliza para ciertas consultas
create table persona (
id integer,
nombre varchar (35),
apellido varchar (40),
fechanac date,
renta numeric (5,1),
constraint pk_persona primary key (id)
);
/*Consultas*/
/*Consultar tablas de la base*/
select * from tab
select * from empleado
select * from persona
/*Para borrar un registro*/
delete from persona where nombre='Pedro';
insert into persona values (2, 'Pedro', 'Picapiedra', '1-04-1950', 1200.0);
insert into persona values (seqPersona.nextval, 'Pablo', 'Marmol', '1-04-1955', 0.0);
/*Para crear un autoincremento*/
create sequence seqPersona
start with 2
increment by 1;
select distinct numpropiedad from visita order by numpropiedad;
/*Listar el salario mensual de todos los empleados*/
select numempleado, nombre, round (salario/12,1) as "Salario Mensual" from empleado;
/*Pregunta de prueba, que hace el round*/
select * from oficina where upper(ciudad)='ARICA' OR lower(ciudad)='santiago';
select * from oficina where upper(ciudad) in('ARICA','SANTIAGO');
select * from oficina where upper(ciudad) NOT in('ARICA','SANTIAGO');
create table persona (
id integer,
nombre varchar (35),
apellido varchar (40),
fechanac date,
renta numeric (5,1),
constraint pk_persona primary key (id)
);
/*Consultas*/
/*Consultar tablas de la base*/
select * from tab
select * from empleado
select * from persona
/*Para borrar un registro*/
delete from persona where nombre='Pedro';
insert into persona values (2, 'Pedro', 'Picapiedra', '1-04-1950', 1200.0);
insert into persona values (seqPersona.nextval, 'Pablo', 'Marmol', '1-04-1955', 0.0);
/*Para crear un autoincremento*/
create sequence seqPersona
start with 2
increment by 1;
select distinct numpropiedad from visita order by numpropiedad;
/*Listar el salario mensual de todos los empleados*/
select numempleado, nombre, round (salario/12,1) as "Salario Mensual" from empleado;
/*Pregunta de prueba, que hace el round*/
select * from oficina where upper(ciudad)='ARICA' OR lower(ciudad)='santiago';
select * from oficina where upper(ciudad) in('ARICA','SANTIAGO');
select * from oficina where upper(ciudad) NOT in('ARICA','SANTIAGO');
Clases Viernes 09-12-2011.
Crear una pregunta y publicarla el Sabado 10-12-2011 que ira en la Catedra del 17-12-2011.
Herramientas:
-Dropbox
-Diigo
www.diigo.com/user/efischer
http://orahelp.blogspot.com/search?q=completo
Tabla dual, pregunta de prueba. Es una tabla ficticia para hacer consultas.
Ejemplo:
select sysdate from dual
---
Para crear una tabla persona2:
create table persona2 (
id integer,
nombre varchar2(35),
apellido varchar2(40),
fecha date,
renta numeric (5,1),
constraint pk_persona2 primary key (id)
);
---
Para saber cuales tablas tengo:
select * from tab
cat
---
desc persona
---
Para insertar Valores en la tabla:
insert into persona2 values (seqPersona2.nextval,'Pablo','Marmol','1-12-1960',200.0);
---
Para Ver los valores insertados:
select * from persona2
---
Para que automaticamente incremente en 1 la id:
create sequence seqPersona2
start with 1
increment by 1;
---
Listar numero de propiedad (numpropiedad) las propiedades que han sido visitadas
select
from visitaorder by numpropiedad;
---
select numempleado, nombre, round(salario/12,1) as "SALARIO MENSUAL"from empleado;
Round sirve para aproximar valores.
---
select *
from oficina
where upper(ciudad)='ARICA'
or lower(ciudad)='santiago';
---
Herramientas:
-Dropbox
-Diigo
www.diigo.com/user/efischer
http://orahelp.blogspot.com/search?q=completo
Tabla dual, pregunta de prueba. Es una tabla ficticia para hacer consultas.
Ejemplo:
select sysdate from dual
---
Para crear una tabla persona2:
create table persona2 (
id integer,
nombre varchar2(35),
apellido varchar2(40),
fecha date,
renta numeric (5,1),
constraint pk_persona2 primary key (id)
);
---
Para saber cuales tablas tengo:
select * from tab
cat
---
desc persona
---
Para insertar Valores en la tabla:
insert into persona2 values (seqPersona2.nextval,'Pablo','Marmol','1-12-1960',200.0);
---
Para Ver los valores insertados:
select * from persona2
---
Para que automaticamente incremente en 1 la id:
create sequence seqPersona2
start with 1
increment by 1;
---
Listar numero de propiedad (numpropiedad) las propiedades que han sido visitadas
select
from visitaorder by numpropiedad;
---
select numempleado, nombre, round(salario/12,1) as "SALARIO MENSUAL"from empleado;
Round sirve para aproximar valores.
---
select *
from oficina
where upper(ciudad)='ARICA'
or lower(ciudad)='santiago';
---
Buenas practicas en PL / SQL
Link del trabajo:
http://dl.dropbox.com/u/52808587/Buenas%20Practicas%20PL-SQL.docx
Buena practica 1: En los datos numericos, definir la presicion
Oracle soporta hasta 38 digitos de presicion en los tipos de datos "NUMBER", si no se define en forma correcta se esta derrochando memoria.
Forma erronea:
DECLARE
Variable1 NUMBER;
Forma correcta:
DECLARE
Variable1 NUMBER(12 , 2);
Buena Practica 2: Cuidar las conversiones implícitas de tipos de datos
Como es sabido PL/SQL maneja las conversiones implícitas pero existen dos grandes problemas en esto.
Las conversiones no son intuitivas, aveces se realizan de formas no esperadas y ocurren problemas, especialmente dentro de sentencias SQL.
Las reglas de conversión no están bajo el control del desarrollador. Pueden cambiar con una actualización o upgrade de Oracle.
Se puede convertir con el uso explicito de funciones como son: TO_DATE, TO_CHAR, TO_NUMBER y CAST.
Forma erronea:
DECLARE
fecha_fin DATE: = '01-MAR-11';
Forma correcta:
http://dl.dropbox.com/u/52808587/Buenas%20Practicas%20PL-SQL.docx
Buena practica 1: En los datos numericos, definir la presicion
Oracle soporta hasta 38 digitos de presicion en los tipos de datos "NUMBER", si no se define en forma correcta se esta derrochando memoria.
Forma erronea:
DECLARE
Variable1 NUMBER;
Forma correcta:
DECLARE
Variable1 NUMBER(12 , 2);
Buena Practica 2: Cuidar las conversiones implícitas de tipos de datos
Como es sabido PL/SQL maneja las conversiones implícitas pero existen dos grandes problemas en esto.
Las conversiones no son intuitivas, aveces se realizan de formas no esperadas y ocurren problemas, especialmente dentro de sentencias SQL.
Las reglas de conversión no están bajo el control del desarrollador. Pueden cambiar con una actualización o upgrade de Oracle.
Se puede convertir con el uso explicito de funciones como son: TO_DATE, TO_CHAR, TO_NUMBER y CAST.
Forma erronea:
DECLARE
fecha_fin DATE: = '01-MAR-11';
Forma correcta:
DECLARE
fecha_fin DATE: = TO_DATE ('01-MAR-11' , 'DD-MON-RR');
sábado, 3 de diciembre de 2011
Clase 03-12-2012
Clase 03-12-2012:
Tablas
create table empleado
numempleado char(4)
varchar2(35)
integer
char(4)
varchar2(4)
number(2,1)
float
date
select 2/3
from dual */funcion virtual para hacer operaciones/*
primary key */crear llave primaria/*
constraint PK_XXX primary key (numarriendo)
Investigar sobre las mejores practicas en PL-SQL para el proximo Sabado a traves del Blogger.com
Formato:
-Encabezado
-Pequeño resumen
-Accesos a Word, etc mediante DropBox (Public-Guardar archivo-Copiar la URL-Pegarla)
create table t1 (id_t1 integer,nombre varchar2(25),apellido varchar2(30),fecha date
constraint pk_t1 primary key
);
insert into t1 values(1,'Mauricio','Ribot',sysdate)desc t1
http://groups.google.com/group/aci900
Tablas
create table empleado
numempleado char(4)
varchar2(35)
integer
char(4)
varchar2(4)
number(2,1)
float
date
select 2/3
from dual */funcion virtual para hacer operaciones/*
primary key */crear llave primaria/*
constraint PK_XXX primary key (numarriendo)
Investigar sobre las mejores practicas en PL-SQL para el proximo Sabado a traves del Blogger.com
Formato:
-Encabezado
-Pequeño resumen
-Accesos a Word, etc mediante DropBox (Public-Guardar archivo-Copiar la URL-Pegarla)
create table t1 (id_t1 integer,nombre varchar2(25),apellido varchar2(30),fecha date
constraint pk_t1 primary key
);
insert into t1 values(1,'Mauricio','Ribot',sysdate)desc t1
http://groups.google.com/group/aci900
Clase del sabado 3 de diciembre
Material de SQL para consultas disponible en la pagina de la U
script para crear base de datos en orahelp.blogspot.com (completo)
preguntas de prueba
al crear tabla tipo de dato number(6,2) (averiguar que significa "6,2"
que es DUAL en oracle
crear tablas, ejemplo
create table ARRIENDO(
numarriendo integer not null,
numpropiedad char(4),
numcliente char(4),
renta float,
formapago char(10),
deposito float,
pagado char(1),
iniciorenta date,
finrenta date,
constrain pk_arriendo primary key (numarriendo)
);
fin ejemplo
verificar importancia de los DDL(lenguaje de definicion de datos) y DML(lenguaje de manipulacion de datos)
los DDL Define datos y el DML modifica datos
insert into para agregar datos a una tabla
script para crear base de datos en orahelp.blogspot.com (completo)
preguntas de prueba
al crear tabla tipo de dato number(6,2) (averiguar que significa "6,2"
que es DUAL en oracle
crear tablas, ejemplo
create table ARRIENDO(
numarriendo integer not null,
numpropiedad char(4),
numcliente char(4),
renta float,
formapago char(10),
deposito float,
pagado char(1),
iniciorenta date,
finrenta date,
constrain pk_arriendo primary key (numarriendo)
);
fin ejemplo
verificar importancia de los DDL(lenguaje de definicion de datos) y DML(lenguaje de manipulacion de datos)
los DDL Define datos y el DML modifica datos
insert into para agregar datos a una tabla
viernes, 2 de diciembre de 2011
Consultar SQL de clases
OraHelp
http://orahelp.blogspot.com/search?q=completo
---------------------------------------
select *
from empleado
---------------------------------------
desc empleado
---------------------------------------
select * from empleado
where upper (sexo)= 'M'
---------------------------------------
SELECT * from empleado
where lower (sexo)= 'm'
---------------------------------------
SELECT cargo, count (numempleado) /* Seleccionamos el campo cargo de la tabla empleado y colocamos un contador*/
FROM empleado
GROUP BY cargo
HAVING count(*) >=5 /*agrupamos los registros del campo cargo*/
ORDER BY cargo DESC /* al colocar DESC los ordena en forma descendente y sin nada en forma ascendente*/
---------------------------------------
Listar cuantos asistentes mujeres
SELECT count (*)
FROM empleado
WHERE UPPER (sexo) = 'F'
AND UPPER (cargo) = 'ASISTENTE'
----------------------------------------
SELECT *
FROM OFICINA
¿CUANTAS OFICINAS TENGO POR CIUDAD?
SELECT CIUDAD, count (*) as "numoficina"
FROM oficina
GROUP BY ciudad
http://orahelp.blogspot.com/search?q=completo
---------------------------------------
select *
from empleado
---------------------------------------
desc empleado
---------------------------------------
select * from empleado
where upper (sexo)= 'M'
---------------------------------------
SELECT * from empleado
where lower (sexo)= 'm'
---------------------------------------
SELECT cargo, count (numempleado) /* Seleccionamos el campo cargo de la tabla empleado y colocamos un contador*/
FROM empleado
GROUP BY cargo
HAVING count(*) >=5 /*agrupamos los registros del campo cargo*/
ORDER BY cargo DESC /* al colocar DESC los ordena en forma descendente y sin nada en forma ascendente*/
---------------------------------------
Listar cuantos asistentes mujeres
SELECT count (*)
FROM empleado
WHERE UPPER (sexo) = 'F'
AND UPPER (cargo) = 'ASISTENTE'
----------------------------------------
SELECT *
FROM OFICINA
¿CUANTAS OFICINAS TENGO POR CIUDAD?
SELECT CIUDAD, count (*) as "numoficina"
FROM oficina
GROUP BY ciudad
clase de SQL
orden de uso de select y sus condiciones
select *
from
where
group by
having
order by
select cargo, count(numempleado) as cantidad from empleado group by cargo having count(*) >=4
select *
from
where
group by
having
order by
select cargo, count(numempleado) as cantidad from empleado group by cargo having count(*) >=4
Suscribirse a:
Entradas (Atom)