trabajando con sql (parte 2)
TRANSCRIPT
Ayudantía de base de datos.
Consultas a la Base de Datos
La sentencia select es usada para consultar la base de datos y recibir los datos seleccionados que se igualan al criterio que usted haya especificado. He aquí el formato de una instrucción simple de selección:
select "columna1"[,"columna2",etc] from "Nombre_Tabla"[where "condición"]; [] = opcional
*El nombre de la Columna que sigue a la palabra clave Select determina qué columnas serán retornadas en los resultados. Se puede seleccionar tantos Nombres de columna como quiera, o puede usar un "*" para seleccionar todas las columnas. *El Nombre_Tabla que sigue a la palabra clave from especifica la tabla que será consultada para recuperar los resultados deseados. *La cláusula where (opcional) especifica qué valores de datos o filas serán retornados o desplegados, basado en el criterio descrito después de la palabra clave where. Las selecciones condicionales usadas en la cláusula where son:
= Igual> Mayor que< Menor que>= Mayor o igual a<= Menor o igual a<> No igual a (Distinto de)LIKE *Vea la nota siguiente
El operador de emparejado de patrones LIKE también puede ser usado en selecciones condicionales con cláusula Where. Like es un operador muy poderoso que le premite seleccionar sólo las filas que son "tal como" las que usted especificó. El símbolo porcentaje "%" puede ser usado como un comodín para igualar algún posible carácter que pueda aparecer después o antes de los caracteres especificados. Por ejemplo:
select first, last, cityfrom empinfowhere first LIKE 'Er%';
La sentencia SQL igualará cualquier nombre inicial (first name) que comience con 'Er'. Las cadenas sólo deberán incluir comilla simple (p.e.:'Hola').
Otro Ejemplo:
select first, last from empinfowhere last LIKE '%s';
Esta sentencia igualará cualquier apellido (last name) que finalice en 's'.
Ayudantía de base de datos.
select * from empinfowhere first = 'Eric';
Esto sólo seleccionará las filas donde el primer nombre (firt name) sea exactamente igual a 'Eric'.
Contenido de las Tablas Students y Courses
Tabla STUDENTS
SQL> select * from students;
STUDENTID
NAME MAJOR GPA TUTORID
102 Mary CIS 3,1103 Sue Marketing 2,95 102104 Tom Finance 3,5 106105 Alex CIS 2,75 106106 Sam Marketing 3,25 103107 Jane Finance 2,9 102101 Bill CIS 3,45 102
Tabla COURSES
SQL> select * from courses;
STUDENTID COURSENUMBER COURSENAME SEMESTER YEAR GR101 CIS3400 DBMS I FALL 1997 B+101 CIS3100 OOP I SPRING 1999 A-101 MKT3000 Marketing FALL 1997 A102 CIS3400 DBMS I SPRING 1997 A-102 CIS3500 Network I SUMMER 1997 B102 CIS4500 Network II FALL 1997 B+103 MKT3100 Advertizing SPRING 1998 A103 MKT3000 Marketing FALL 1997 A
Ayudantía de base de datos.
Remueva filas duplicadas, antes que los resultados de la sentencia de selección los retorne, con DISTINCT.
Sintaxis
Selelect DISTINCT columna1[,columna2, columna3, ...]From Tabla;
Ejemplo
Select DISTINCT CourseName From courses;Resultado:
coursenameAdvertizing DBMS I Marketing Marketing II Network I Network II OOP I
Si se da cuenta, sólo han aparecido una vez los nombres y no el listado completo que los incluye n veces y además desordenados.
Definición de Alias o cabeceras de columnas sustitutas, en una sentencia Select
Ejemplo:Select DISTINCT CourseName "Nombre Curso"From Courses;
Resultado:Nombre CursoAdvertizing DBMS I Marketing Marketing II Network I Network II OOP I
Ayudantía de base de datos.
Uso de la Cláusula WHERE y sus operadores
Operadores de Comparación
Operador Descripción= Igual a!= <> ^= No igual a> Mayor que>= Mayor o Igual que< Menor que<= Menor o Igual queBetween... And... Entre dos valoresIN(lista) Igual a algún elemento de
la siguiente listaIS NULL Es el valor NULLLIKE Iguala un patrón de
caracteres usando caracteres comodines
EjemplosSelect CourseName from Courses where Year <= 1997;
Resultado
CourseNameDBMS I Marketing DBMS I Network I Network II Marketing
Select Name from Students where StudentID=101;
Resultado
studentID name major gpa tutorID101 Bill CIS 3.45 102
Select StudentID, Coursename from courses where semester <> 'FALL';
Resultado
Ayudantía de base de datos.
StudentID Coursename101 OOP I 102 DBMS I 102 Network I 103 Advertizing 103 Marketing II
Uso de Between... And...
Ejemplo
SELECT StudentID, CoursenameFROM coursesWHERE StudentID BETWEEN 101 and 102;
ResultadoStudentID Coursename101 DBMS I 101 OOP I 101 Marketing 102 DBMS I 102 Network I 102 Network II
Antes de continuar, vamos a agregar la columna BirthDate a la tabla Students, para almacenar la fecha de nacimiento de nuestros estudiantes.
Alter table StudentsAdd (BirthDate DATE)
Luego agregamos los datos:
Update Students Set birthDate = TO_DATE('14-11-1960', 'DD-MM-YYYY') Where StudentID = 101;Update Students Set birthDate = TO_DATE('20-10-1964', 'DD-MM-YYYY') Where StudentID = 102;Update Students Set birthDate = TO_DATE('16-04-1970', 'DD-MM-YYYY') Where StudentID = 103;Update Students Set birthDate = TO_DATE('28-02-1969', 'DD-MM-YYYY') Where StudentID = 104;Update Students Set birthDate = TO_DATE('23-05-1975', 'DD-MM-YYYY') Where StudentID = 105;Update Students Set birthDate = TO_DATE('18-01-1977', 'DD-MM-YYYY') Where StudentID = 106;Update Students Set birthDate = TO_DATE('25-12-1967', 'DD-MM-YYYY') Where StudentID = 107;
Un ejemplo clásico de selección utilizando la cláusula BETWEEN... AND... es para buscar tuplas que están entre determindas fechas. Por ejemplo:
Select Name, Major
Ayudantía de base de datos.
from StudentsWhere BirthDate Between '01-01-1965' And '31-12-1975';
ResultadoName MajorSue Marketing Tom Finance Alex CIS Jane Finance
Uso del Operador IN
Ejemplo
Select * from StudentsWhere StudentID IN (101, 102);
Resultado
studentID name major gpa TutorID BirthDate101 Bill CIS 3.45 102 14/11/60102 Mary CIS 3.1 20/10/64
Seleccionar información usando caracteres comodines con el operador LIKE
Caracteres comodines% iguala algún número de caracteres_ iguala un único carácter Ejemplos:
Select StudentID, Name from StudentsWhere Name Like 'S%';
Resultado:StudentID Name103 Sue 106 Sam
Select StudentID, Name from StudentsWhere Name Like '%a%';
ResultadoStudentID Name102 Mary
Ayudantía de base de datos.
105 Alex 106 Sam 107 Jane
Select StudentID, Name from StudentsWhere StudentID Like '10_';
Resultado StudentID Name101 Bill 102 Mary 103 Sue 104 Tom 105 Alex 106 Sam 107 Jane
Operador NOT se puede usar para anteponerlo antes de los operadores antes mencionados para invertir el resultado de una consulta.
Utilizando Operador NOT
Select StudentID, Name from StudentsWhere Name NOT Like '%a%';
ResultadoStudentID Name101 Bill 103 Sue 104 Tom
Sin Operador NOT
Select StudentID, Name from StudentsWhere Name Like '%a%';Resultado
StudentID Name102 Mary 105 Alex 106 Sam 107 Jane
Cláusula ORDER BY
Ejemplo:Select *
Ayudantía de base de datos.
From StudentsOrder by BirthDate;
ResultadostudentID name major gpa tutorID BirthDate101 Bill CIS 3.45 102 14/11/1960102 Mary CIS 3.1 20/10/1964107 Jane Finance 2.9 102 25/12/1967104 Tom Finance 3.5 106 28/02/1969103 Sue Marketing 2.95 102 16/04/1970105 Alex CIS 2.75 106 23/05/1975106 Sam Marketing 3.25 103 18/01/1977
El resultado por defecto es ordenado en forma Ascendente. (De Menor a Mayor)En orden Descendente (de mayor a menor) se realiza con la siguiente instrucción:
Select * From StudentsOrder by BirthDate DESC;
ResultadostudentID name major gpa tutorID BirthDate106 Sam Marketing 3.25 103 18/01/1977105 Alex CIS 2.75 106 23/05/1975103 Sue Marketing 2.95 102 16/04/1970104 Tom Finance 3.5 106 28/02/1969107 Jane Finance 2.9 102 25/12/1967102 Mary CIS 3.1 20/10/1964101 Bill CIS 3.45 102 14/11/1960
Ayudantía de base de datos.
Operadores Lógicos utilizados comúnmente en consultas
ANDORNOT
Operadores Aritméticos para consultas
+-*/
Funciones Utilizadas
NVL: Convierte un valor NULO en otro NO NULO para propósitos de realizar cálculos con campos que puedan tener valores NULOS.Sintaxis:
NVL(expr1, expr2)
NVL evalúa expr1, si es NOT NULL se retorna dicha expresión, en caso contrario se retorna el valor contenido en expr2.
Ejemplo de Uso:
Select NombreEmpleado, Cargo, Sueldo, Comision, NVL (SUELDO, 0) + NVL(Comision, 0)From EmpleadosWhere NumDepto = 30;
NombreEmpleado Cargo Sueldo Comision NVL(Sueldo,0) + NVL(Comision,0)
ALLEN VENDEDOR 1600 300 1900WARD VENDEDOR 1250 500 1750JONES VENDEDOR 2975 2975MARTIN VENDEDOR 1250 1400 2650BLAKE ADMINISTRATIVO 2850 2850SCOTT VENDEDOR 3150 3150TURNER VENDEDOR 1500 0 1500
Ayudantía de base de datos.
Funciones Numéricas
Función Ejemplo ResultadoMOD MOD(7,5) El resto de dividir 7 en 5,
o sea 2SQRT SQRT(25) Raíz Cuadrada de 25, es
decir 5ROUND ROUND(SUELDO, 2) Se redondea la Columna
SUELDO en el digito 2. Ejemplo ROUND(3.25, 1) da como resultado 3.3
TRUNC TRUNC(SUELDO, 2) Se trunca SUELDO en el dígito 2 después de la coma. Ejemplo, TRUNC(3.25,1) da como resultado 3.2
POWER POWER(SUELDO,3) Sueldo al Cubo
Más Funciones en SQL
SUMSe utiliza para realizar una sumatoria sobre una cierta columna determinada dentro de una instrucción como SELECT.Sintaxis
SUM([DISTINCT|ALL] n)
Ejemplo SELECT SUM(sueldo) "Total" FROM empleados
Resultado
Total----------29081
AVG
Se utiliza para obtener el promedio (AVERAGE) sobre una determinada columna dentro de una instrucción como SELECT.
Sintaxis
AVG([DISTINCT|ALL] n)
Ejemplo
SELECT AVG(sueldo) "Sueldo Promedio"FROM empleados;
Ayudantía de base de datos.
Resultado:Sueldo Promedio------------------2077.21429
COUNT
Permite realizar el conteo de filas resultantes en una consulta.Sintaxis
COUNT({* | [DISTINCT|ALL] expr})
Ejemplos
SELECT COUNT(*) "Total" FROM empleados
Resultado: Total---------- 18
SELECT COUNT(Trabajo) "Cuantos Empleados" FROM empleados;
Resultado: Cuantos Empleados------------------ 14
SELECT COUNT(DISTINCT Trabajo) "Trabajos" FROM empleados;
Resultado: Trabajos---------------- 5
INITCAP
Regresa la primera letra del parámetro en mayúscula y el resto de la palabra en minúsculas.
Sintaxis
INITCAP (expr)
Ayudantía de base de datos.
Ejemplo
SELECT INITCAP(nombre_empl) "Nombre Empleado", trabajoFROM empleados;
Resultado:Nombre Empleado Trabajo----------------------------------------------Juan administrativo
UPPER
Retorna el contenido del parámetro con todas sus letras en Mayúscula.
SintaxisUPPER(expr)
EjemploSELECT UPPER(nombre_empl) "Nombre Empleado", UPPER (trabajo)FROM empleados;
Resultado:Nombre Empleado Trabajo-------------------------------------------------------JUAN ADMINISTRATIVO
LOWER
Retorna todos los caracteres de una cadena en minúscula.
SintaxisLOWER(expr)
EjemploSELECT LOWER(nombre_empl) "Nombre Empleado", LOWER (trabajo)FROM empleados;
Resultado:Nombre Empleado Trabajo----------------------------------------------juan administrativo
Ayudantía de base de datos.
SUBSTR
Retorna una subcadena indicada por un carácter de inicio y la cantidad de caracteres que se copiarán a partir de dicho carácter. En pocas palabras trabaja como la función COPY de PASCAL o la instrucción MID de VISUAL BASIC.Sintaxis
SUBSTR(cadena, carácter_inicio, cuántos_se_copian)
EjemploSELECT INITCAP(nombre_empl) "Nombre Empleado", SUBSTR(INITCAP(trabajo),1,5)FROM empleados;
Resultado:Nombre Empleado Trabajo----------------------------------------------Juan Admin
LENGTH
Entrega el número de caracteres de una cadena. Funciona tal como lo hace LENGTH de PASCAL, STRLEN de C o LEN de VISUAL BASIC.
EjemploSELECT LENGTH(nombre_empl) "Numero de Caracteres"FROM empleados;
Resultado:Numero de Caracteres--------------------4
CLAUSULA GROUP BY
La cláusula GROUP BY se utiliza dentro de instrucciones SELECT y permite realizar agrupamientos, generalmente con cálculos.
Ejemplo: Se quiere saber cuántos empleados trabajan en cada departamento de la empresa.
SELECT Depto, COUNT(*) "Numero de Trabajadores"FROM EMPLEADOSGROUP By Depto;
Ayudantía de base de datos.
Resultado:DEPTO NUMERO DE TRABAJADORES-------------------------------------------------------------
101 3
102 15
450 13
Ejemplo: Se quiere conocer el promedio de notas por alumno de la carrera de COMPUTACION.
Esta es toda la tabla:
Nombre NOTA Carrera-------------------- --------- --------------------CLAUDIO 5 ComputacionCLAUDIO 4 ComputacionCLAUDIO 6 ComputacionANDREA 6 ComputacionANDREA 3 ComputacionANDREA 7 Computacion
Esta la instrucción de selección:
SELECT SUBSTR(nombre,1,20) "Alumno" , avg(nota) "Promedio"FROM notasGROUP BY nombre;
y el siguiente el resultado:
Alumno Promedio-------------------- ---------ANDREA 5,3333333CLAUDIO 5
CLAUSULA HAVING
La cláusula Having sirve para condicionar consultas que utilizan GROUP BY.Por ejemplo, supongamos que queremos saber el promedio anual del sueldo para todas los cargos en los cuales hay más de dos empleados.
SELECT cargo, 12*AVG(sueldo)FROM empleadosGROUP BY cargoHAVING COUNT(*) > 2;
Ayudantía de base de datos.
Resultado:Cargo 12 * AVG(sueldo)------------------------ -----------------------------SECRETARIA 124500VENDEDOR 234500
Dentro de este Tipo de consultas se puede condicionar algunas operaciones como la sumatoria o incluso el promedio.Ejemplo:
SELECT NumDEPTO, SUM(sueldo)FROM empleadosWHERE cargo <> ‘SECRETARIA’GROUP BY NumDEPTOHAVING SUM(sueldo) > 80000ORDER BY SUM(sueldo);
SECUENCIAS
Las secuencias se utilizan para generar números sucesivos. Su uso más común es con las claves primarias o foráneas cuyos valores requieren ser generados en sucesión y automáticamente. El caso más común es el tipo de dato AUTONUMERICO de ACCESS.
EJEMPLO:
CREATE SEQUENCE seq_notaINCREMENT BY 1START 1;