Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Command oracle
1. ¿Conoces todos los comandos SQL de Oracle para hacer tus consultas? En este manual vamos a aprender a usar los más comunes. Entre ellos conoceremos los diferentes operadores que podemos utilizar, como eliminar filas duplicadas en nuestras consultas, funciones para trabajar con caracteres, fechas, funciones numéricas, de grupo, etc.<br />En posteriores entregas aprenderemos a crear tablas, usuarios, conceder permisos, modificar y eliminar columnas, etc.<br />Introducción a consultas<br />Consultas simples:<br />SELECT campo FROM tabla;<br />Consulta simple con condición:<br />SELECT campo1, campo2, FROM tablaDeArticulos WHERE precio>10;<br />Consultas con subconsultas:<br />SELECT precio FROM tablaDeArticulos WHERE referencia = (SELECT referencia FROM tablaDeReferencias WHERE nombreArticulo =’ patinete ‘)<br />Operadores: +, -, *, /<br />12*(sal+100)<br />Alias: Renombra encabezado, pone nombres a las columnas resultantes de una consulta<br />{SELECT ename “Nombre trabajador”, sal “Salario” FROM trabajadores;}<br />Concatenación: “||” Concatena columnas o cadenas.<br />{SELECT ename||job “Empleados”;}<br />{SELECT ename ||’ es un ‘|| job “Detalles”;}<br />Filas Duplicadas: “distinct” no muestra duplicadas, despues de SELECT<br />{SELECT distinct deptno, job;}<br />Visualizar estructura completa de una tabla: desc<br />{desc dept;}<br />Ficheros:<br />sav[e] guarda consulta<br />{sav archiv.sql}<br />@ ejecuta consultas en fichero / sta[rt] ejecuta consultas en fichero<br />{@ arciv.sql}<br />ed[it] permite editar fichero<br />{ed archiv.sql}<br />Operador WHERE: Restringe la consulta a las filas que cumple una condición<br />FROM emp WHERE job=’CLERK’ (CASE SENSITIVE!!)<br />Operadores comparación: =, >, >=, <, <=, <><br />{SELECT campo FROM table WHERE salario>=200;}<br />{…WHERE hiredate < ’01-01-95′;}<br />{…WHERE hiredate > ’01-JAN-95′;}<br />OPERADORES COMPARACIÓN 2: BETWEEN..AND.., IN(list), LIKE, IS NULL<br />BETWEEN:<br />{… WHERE salario BETWEEN 100 AND 150;}<br />IN:<br />{mgr IN (7902, 7566);} {WHERE ename IN (‘FORD , ‘ALLEN’)}<br />LIKE: Comodin “%” representa 0 o N caracteres. Comodin “_” representa exactamente 1 caracter.<br />{…WHERE ename LIKE ‘_S%’}<br />ESCAPE: Interpreta “_” literal.<br />{…WHERE ename LIKE ‘%%’ ESCAPE ‘;}<br />IS NULL: Si un valor es nulo . Atencion, NULL! =0!!<br />{…WHERE mgr IS NULL;}<br />Operadores Lógicos: AND, OR, NOT<br />{…WHERE job NOT IN (‘CLERK’, ‘MANAGER’); job NOT LIKE ‘%A_’;}<br />Ordenar: “ORDER BY (columna/alias)”. Ordenar de forma ascendente o descendente: “ORDER BY (columna/alias) [ASC/DESC]“<br />ORDER BY hiredate desc; ORDER BY deptno, sal desc;<br />FUNCIONES DE CARACTERES:<br />LOWER/UPPER: Convierte a minusculas/mayúsculas<br />lower(JOB) -> job<br />ename=upper(‘blake’);<br />INITCAP: Primera letra mayusculas resto minusculas<br />Initcap(JOB) -> Job<br />CONCAT: Concatena (como “|”)<br />SUBSTR: Devuelve los caracteres seleccionados de una cadena de la cadena<br />LENGTH: Devuelve número caracteres<br />INSTR: Devuelve posición del caracter en la cadena<br />LPAD: Rellena cadena por la derecha con el car seleccionado<br />TRIM: Elimina caracteres del principio o del final<br />FUNCIONES NUMÉRICAS:<br />Round: Redondea al decimal especificado<br />round(45.926, 2) -> 45.93<br />Trunc: Trunca en le decimal especificado<br />trunc(45.926, 2) -> 45.92<br />Mod: Devuelve el resto de la división<br />Mod(1600, 300) -> 100<br />Mod(sal, comm) -> Calcula el “RATIO”<br />NVL: Convierte un nulo a un valor<br />nvl(comm, 0), nvl(job, ‘No Job’), nvl(hiredate,’01-JAN-97′)<br />{SELECT ename, nvl(to_car(mgr), ‘No Manager’) FROM emp;}<br />DECODE: Función de CASE<br />SELECT job, sal,<br />decode(job, ‘ANALYST’, sal*1.1, ‘CLERK’, sal*2, sal)<br />FROM emp;<br />Fechas:<br />sysdate: devuelve fecha y hora actual<br />num + fecha = fecha<br />fecha – num = fecha<br />fecha – fecha = dias<br />num/24 + fecha = agrega horas<br />{SELECT (sysdate-hiredate)/7 SEMANAS}<br />Conversión:<br />to_char: to_car(date, ‘fmt’), (hiredate, ‘fmDD’)<br />fm: elimina espacios en blanco<br />to_number: to_number(char)<br />to_date: Guarda datos en formato de fecha<br />to_date(char[, 'fmt'])<br />to_date(’07/05/1984′)<br />Elementos:<br />YYYY: Año numérico<br />YEAR: Año letras<br />MM: Mes numérico<br />MONTH: Mes letras<br />DY: Abreviatura 3 letras día<br />DAY: Nombre completo<br />Hora: HH24:MI:SS AM -> 15:45:32 PM<br />Añadir cars: DD “of” MONT -> 12 of October<br />Nº dia en letras: ddspth -> fourteenth<br />Funciones de grupo:<br />AVG: Media<br />COUNT: Cantidad de filas<br />MAX: Valor maximo<br />MIN: Valor mimimo ignorando nulos<br />STDDEV: Desviación ignorando nulos<br />SUM: Suma de valores ignorando nulos<br />VARIANCE: Varianza ignorando nulos<br />NOTA: Se pueden utilizar sin aparecer en SELECT<br />SELECT deptno FROM emp GROUP BY deptno HAVING MAX(sal)>1<br />En esta segunda entrega de Comandos SQL de Oracle vamos a aprender a crear tablas, modificarlas, añadir restricciones (constraints) y comentarios y modificar sus columnas y tipos. Además aprenderemos a crear secuencias las cuales nos ayudaran a insertar valores de forma automática, crearemos y modificaremos claves primerias (PK) y claves foráneas (FK) para poder enlazar valores de diferentes tablas. <br />Insertar registros en una tabla: Caracteres y fechas entre comillas simples<br />{INSERT INTO tabla [] VALUES []}<br />INSERT INTO tab (dnum, depnam, hiredate, usr_actual)<br />VALUES (50, ‘DEVELOPMENT’, SYSDATE, USERID);<br />Insertar registros nulos:<br />INSERT INTO dept VALUES (70, ‘FINANCE’, NULL);<br />Creación de Scripts: Los scripts nos permiten crear sencillas aplicaciones para añadir datos de forma sencilla a nuestra base de datos.<br />{ACCEPT variable PROMPT ‘texto a mostrar’ INSERT INTO tabla [] VALUES[&variable]}<br />ACCEPT id PROMPT ‘Introduce el ID de usuario:’<br />ACCEPT last_name prompt ‘Introduce apellido del usuario:’<br />ACCEPT first_name prompt ‘Introduce nombre del usuario:’<br />INSERT INTO my_employee (id, LAST_NAME, FIRST_NAME, USERID)<br />VALUES (&id, ‘&last_name’, ‘&first_name’, substr(‘&first_name’,1,1) || substr(‘$last_name’,1,7));<br />Insertar registros de otra tabla:<br />{INSERT INTO tabla [] select(…)}<br />INSERT INTO managers(id, name, salary, hiredate)<br />SELECT empno, ename, sal, hiredate FROM emp WHERE job = ‘MANAGER’<br />Modificación de registros:<br />{UPDATE tabla SET column = value where…}<br />UPDATE emp SET deptno = 20 WHERE empno = 7782;<br />UPDATE emp SET (job,deptno) = (SELECT job, deptno from…)<br />Eliminar registros:<br />{DELETE FROM tabla WHERE condición}<br />DELETE FROM department WHERE dname = ‘DEVELOPMENT’<br />DELETE FROM employee WHERE deptno = (SELECT deptno from…)<br />Control transacciones:<br />COMMIT: Confirmar cambios realizados en la base de datos<br />ROLLBACK: Deshacer todos los cambios realizados en la base de datos<br />SAVEPOINT nombre: Crear punto de guardado<br />ROLLBACK TO nombre: Volver a punto de guardado<br />Creación de tablas:<br />{CREATE TABLE tabla (columna tipo(longitud), columna..)}<br />Tipos: NUMBER, VARCHAR2, DATE, NUMBER(dcimal,digit)<br />CREATE TABLE dept (deptno NUMBER(2) NOT NULL, name VARCHAR2(50));<br />Crear tabla a partir de otra (por subconsulta):<br />{CREATE TABLE tabla AS SELECT…}<br />CREATE TABLE departamento AS SELECT empno, ename “Nombre Departamento”, sal FROM dept;<br />Modificar tabla:<br />-Añadir columnas:<br />{ALTER TABLE tabla ADD (columna1 tipo(), columna2 tipo()…);}<br />ALTER TABLE dept add (job VARCHAR2(9));<br />-Modificar columnas existentes:<br />{ALTER TABLE tabla MODIFY (col1 tipo() [DEFAULT expr]);}<br />ALTER TABLE empl modify (name VARCHAR2(50) DEFAULT ‘Nom’);<br />Eliminar columna:<br />{ALTER TABLE tabla DROP COLUMN columna;}<br />ALTER TABLE dept DROP COLUMN dname;<br />Notificar columna como no usada:<br />{ALTER TABLE tabla SET UNUSED (columna)}<br />ALTER TABLE dept SET UNUSED (loc);<br />Eliminar columnas marcadas como no usadas:<br />{ALTER TABLE tabla DROP UNUSED COLUMNS;}<br />ALTER TABLE dept DROP UNUSED COLUMNS;<br />Eliminar tabla:<br />{DROP TABLE table;}<br />DROP TABLE dept;<br />Modificar nombre de objeto (tabla, vista…):<br />{RENAME tabla/vista… TO tabla/vista…}<br />RENAME dept TO departmento;<br />Eliminar todos los registros (TRUNCAR):<br />{TRUNCATE TABLE tabla;}<br />TRUNCATE TABLE dept;<br />Añadir comentarios a una tabla:<br />{COMMENT ON TABLE/COLUMN table/columna IS ‘comentario’;}<br />COMMENT ON TABLE emp IS ‘Employee Infromation’<br />COMMENT ON COLUMN TABLE.column IS ‘comentario’<br />COMMENT ON COLUMN emp.ename IS ‘Nombre trabajador’<br />DEFINICIÓN DE CONSTRAINTS (RESTRICCIONES):<br />{CREATE TABLE tabla<br />(columna tipo() [default expr] CONSTRAINT [nombre] tipo (columna));}<br />-Nivel de tabla:<br />CREATE TABLE emp(<br />(empno NUMBER(4),<br />ename VARCAHR2(10),<br />deptno NUMBER(2),<br />CONSTRAINT emp_empno_pk<br />PRIMARY KEY (empono));<br />- Nivel de columna:<br />CREATE TABLE emp(<br />(empno NUMBER(4) [CONSTRAINT emp_empno_nn] NOT NULL,<br />ename VARCAHR2(10),<br />deptno NUMBER(2) NOT NULL);<br />Constraints (tipos y situación):<br />NOT NULL (Nivel de columna)<br />CREATE TABLE emp(<br />(empno NUMBER(4) [CONSTRAINT emp_empno_nn] NOT NULL,<br />ename VARCAHR2(10),<br />deptno NUMBER(2) NOT NULL);<br />UNIQUE (Columna o tabla)<br />CREATE TABLE dept<br />(dname VARCHAR(14),<br />…<br />CONSTRAINT dept_dname_uk UNIQUE(dname));<br />PRIMARY KEY (Columna o tabla) -> PK lleva implícito UNIQUE<br />CREATE TABLE dept<br />(deptno NUMBER(2),<br />…<br />CONSTRAINT dept_deptno_pk PRIMERY KEY (deptno));<br />FOREIGN KEY (Columna o tabla)<br />CREATE TABLE emp<br />(ename VARCAHR2(10) NOT NULL,<br />deptno NUMBER(7,2) NOT NULL,<br />…<br />CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)<br />REFERENCES dept (deptno));<br />CHECK -Condicion- (Columna o tabla)<br />CREATE TABLE emp<br />(deptno NUMBER(2),<br />CONSTRAINT emp_deptno_ck CHECK (deptno between 10 and 99));<br />Añadir CONSTRAINT (restricción) a tabla existente:<br />{ALTER TABLE tabla add/modify [CONSTRAINT CONSTRAINT] type (col);}<br />Podemos añadir restricción NOT NULL con MODIFY<br />Podemos añadir o borrar CONSTRAINTs pero NO modificar. Para modificar<br />eliminar y volver a crear<br />ALTER TABLE emp add CONSTRAINT emp_mgr_fk<br />FOREING KEY(mgr) REFERENCES emp(empno);<br />Eliminación de restricciones (CONSTRAINTs):<br />{ALTER TABLE tabla DROP CONSTRAINT CONSTRAINT;}<br />ALTER TABLE emp DROP CONSTRAINT emp_mgr_fk;<br />Borrar CONSTRAINT PK y (FK de tabla dependiente de otra usando-CASCADE-)<br />{ALTER TABLE tabla DROP primary key CASCADE;}<br />ALTER TABLE dept DROP primary key cascade;<br />Eliminación de restricciones en cascada: Es usado para eliminar PK u otras con dependencias<br />{ALTER TABLE tabla DROP (constraint) cascade CONSTRAINT;}<br />ALTER TABLE dept DROP (deptno) cascade CONSTRAINTS;<br />Desactivar constraint:<br />{ALTER TABLE tabla DISABLE CONSTRAINT constraint [CASCADE];}<br />ALTER TABLE emp disable CONSTRAINT emp_empno_pk CASCADE;<br />Activar constraints:<br />{ALTER TABLE tabla ENABLE CONSTRAINT CONSTRAINT;}<br />ALTER TABLE emp ENABLE CONSTRAINT emp_empno_pk;<br />Creación de vistas:<br />{CREATE VIEW vista AS SELECT…}<br />[with check option CONSTRAINT CONSTRAINT]<br />[with read only]<br />CREATE view empvu10 as select empno “nº empleado”,<br />job from emp where deptno=10;<br />Modificación de vistas:<br />{CREATE OR REPLACE VIEW vista [(colname, colname, colname)] as select…}<br />Nota: Los alias de columna se puede poner en SELECT o en CREATE<br />CREATE or replace view empvu10<br />(employee_number, employee_name, job_title)<br />as select empno, ename, job from emp where deptno = 10;<br />Creación vistas complejas con funciones de grupo para ver 2 tablas:<br />{CREATE view dept_sum_vu (name, minsal, maxsal, avgsal)<br />as select d.dname, MIN(e.sal), MAX(e.sal), AVG(e.sal)<br />from emp e, dept d where e.deptno = d.deptno group by d.dname}<br />With check option:<br />CREATE or replace view vista as select…<br />with check option CONSTRAINT CONSTRAINT<br />With read only:<br />CREATE or replace view vista as select…<br />with read only;<br />Nota: En este caso no podemos quitar, insertar o modificar la vista<br />Eliminación de vistas:<br />{DROP view vista;}<br />Creación de vistas inline:<br />{SELECT … FROM tabla a(SELECT…) b where…}<br />SELECT tablaA.ename, tablaA.sal, tablaA.deptno, tablaB.maxsal<br />from emp tablaA, (select deptno, max(sal) from emp group by deptno) tablaB<br />where tablaA.deptno = tablaB.deptno and tablaA.sal < tablaB.maxsal<br />Obtener los N primeros/últimos datos de una tabla (Top-N):<br />{SELECT ROWNUM [as alias] FROM (SELECT… FROM tabla WHERE… ORDER BY Top-NCol)<br />where ROWNUM <= N}<br />SELECT ROWNUM as RANKING, ename, sal<br />from (select ename, sal from emp order by sal desc)<br />where rownum <=3;<br />Creación de secuencias:<br />CREATE/ALTER sequence secuencia<br />increment by n<br />start with n (no en ALTER)<br />maxvalue n<br />minvalue n<br />cycle (continua generando despues de max)<br />cache n (memoria oracle)<br />Insertar valores de una secuencia en una tabla:<br />INSERT INTO tabla (valorActual, valorSiguiente)<br />VALUES (secuencia.currval, secuencia.nextval)<br />Eliminar secuencias:<br />{DROP sequence secuencia;}<br />Crear índices:<br />{CREATE index indice on tabla (col, col+10, upper(ename)…)}<br />Eliminar índices:<br />{DROP index índice}<br />Crear sinonimos:<br />{CREATE [public] SYNONYM sinonimo FOR objecto}<br />CREATE public synonym dept for sis228.dept<br />Eliminar sinónimos:<br />{DROP SYNONYM sinónimo}<br />En esta última entrega de comandos Oracle, vamos a aprender a crear usuarios para hacer uso de nuestra base de datos. Para ello, vamos a conocer los diferentes permisos concebibles y a saber cómo asignárselos. Además, aprenderemos a crear diferentes roles que nos van a facilitar la asignación de permisos en el caso de tener diferentes usuarios del mismo nivel.<br /> <br />Crear usuarios de Oracle: {CREATE USER nombre IDENTIFIED BY contraseña DEFAULT TABLESPACE nombreTableSpace TEMPORARY TABLESPACE nombreTemp}<br /> CREATE USER sis2dba<br /> IDENTIFIED BY sis2dbapass / EXTERNALLY<br /> DEFAULT TABLESPACE sis2tabla<br /> TEMPORARY TALESPACE sis2temp<br /> QUOTA INT [K|M] UNLIMITED ON NOMBRETABLESPACE<br /> PASSWORD EXPIRE<br /> ACCOUNT [LOCK | UNLOCK]<br /> <br />Modificar nombre de usuarios Oracle:<br /> {ALTER USER NombreUsuario Modificación;}<br /> ALTER USER sis2dba QUOTA UNLIMITED ON sis2tabla;<br /> <br />Borrar usuarios:<br /> {DROP USER nombre CASCADE}<br /> Nota: CASCADE nos indica que vamos a borrar también TOdos sus objeTOs<br /> <br />Permitir conexión y crear tablas:<br /> {GRANT CONNECT, RESOURCE TO nombre}<br /> Nota: Para que un usuario de Oracle pueda crear objeTOs NECESITA el permiso RESOURCE<br /> <br />Conceder permisos de DBA:<br /> {GRANT DBA TO NombreUsuario}<br /> <br />PERMISOS:<br />Permiso Tabla Vista Secuencia ProcedimienTOalterX X deleteX X execute X insertX X SELECTX X X updateX X <br /> <br />Conceder permisos:<br /> {GRANT permiso1, permiso 2… ON objeTO TO nombreUsuario [ROLE]}<br /> GRANT SELECT ON emp TO sis226<br /> GRANT SELECT, INSERT, UPDATE ON emp TO public<br /> GRANT permiso1, permiso2… ON objeTO TO nombreUsuario WITH GRANT OPTION<br /> Nota: GRANT OPTION nos permite conceder permisos a otros usuarios<br /> <br />Quitar permiso:<br /> {REVOKE permiso1,… ON objeTO TO nombreUsuario}<br /> REVOKE permiso1 ON SELECT TO sis226<br /> Nota: Se quita los permisos a sis226 y a TOdos a los que sis226 he dado permisos<br /> <br />Conceder permisos de Sistema:<br /> {GRANT permiso1, permiso2… ANY TABLE TO NombreUsuario}<br /> GRANT CREATE, SELECT ANY TABLE TO sis226<br /> GRANT permiso1, permiso2… ANY TABLE TO NombreUsuario WITH ADMIN OPTION<br /> Nota: WITH ADMIN OPTION permite dar permisos de sistema a otros usuarios<br /> <br />Quitar permiso de Sistema:<br /> {REVOKE permiso1, permiso2… ANY TABLE FROM NombreUsuario}<br /> REVOKE SELECT ANY TABLE FROM sis226<br /> Nota: Quita los permisos a sis226 pero NO a los que sis226 ha dado<br /> <br />ROLES:<br />Un ROLE es una agrupación de permisos con lo cual podemos juntar ciertos permisos en un rol y dárselo a un usuario o grupo de usuarios.<br />Creación de ROLEs:<br /> {CREATE ROLE nombreRol [IDENTIFIED BY Contraseña];}<br /> CREATE ROLE scott_rol;<br /> <br />Borrar ROLEs:<br /> {DROP ROLE nombreRol;}<br /> <br />Dar permisos a ROLEs:<br /> GRANT SELECT, UPDATE ON scott.emp TO scott_rol;<br /> GRANT SELECT, INSERT, DELETE, UPDATE ON scott.dept TO scott_rol;<br /> GRANT SELECT ON scott.salgrade TO scott_rol;<br /> GRANT SELECT ON scott.bonus TO scott_rol;<br /> <br />Conceder rol a usuario:<br /> {GRANT role TO usuario}<br /> GRANT scott_rol TO sis226<br /> <br />Modificar ROLEs:<br /> {GRANT Permiso1,… ON nombreUsuario TO ROLE;}<br /> GRANT SELECT on scott.dept TO scott_rol ;<br /> Nota: SOLO modifica la linea del scott.dept<br />