Está en la página 1de 18

SIS 302 BASE DE DATOS I 28/11/2023

FACULTAD DE TECNOLOGÍA
Ingeniería de Sistemas

Capitulo Vi

LENGUAJE SQL
(Structured Query Language)
Departamento de Lenguajes y Sistemas Informáticos

Ing. Edgar T. Espinoza R.

Lenguaje SQL
1. Introducción
2. LMD- Operaciones de Recuperación
3. LMD – Operaciones de Actualización
4. Lenguaje de Definición de Datos
5. Lenguaje de Control de Datos
6. SQL Inmerso

Ing. Edgar Espinoza R. 1


SIS 302 BASE DE DATOS I 28/11/2023

Introducción
SQL (Structured Query Language)
Lenguaje de Consulta Estructurado, para bases de datos
relacionales
Es mucho más que un lenguaje de consulta puesto que
permite además funciones de definición y control de
datos

La estandarización ha sido crucial para su difusión


Prácticamente la mayoría de los sistemas relacionales
soportan las bases de SQL estándar y suelen incluir
aportaciones propias

Historia

1974, IBM construye un prototipo de sistema relacional


llamado SYSTEMR que incluía el lenguaje SEQUEL,
posteriormente llamado SQL
1979, ORACLE aparece como primer gestor relacional
comercial, incluyendo lenguaje SQL
1981, primera implementación de IBM con el sistema
SQL/DS
Desde 1983, fue el estándar de facto
1986, aparece el primer estándar (SQL-86)
1989, revisión del estándar anterior (SQL-89)
1992, se publica el segundo estándar (SQL-2 o SQL-92)
1999, aparece el tercer estándar (SQL -3 o SQL -99)

Ing. Edgar Espinoza R. 2


SIS 302 BASE DE DATOS I 28/11/2023

Varias otras versiones surgieron posteriormente,


expandiendo a SQL con conceptos de
Orientación Objetos y XML.
SQL es un lenguaje de consulta que posee
recursos para:
➢ Definición de estructuras de datos
➢ Actualización de datos en la Base de Datos
➢ Definición de vistas
➢ Especificaciones de seguridad y autorizaciones
➢ Definición de restricciones de integridad
➢ Especificación de controles de transacciones.

Escribir sentencias o comandos SQL


– Las sentencias SQL tienen
• Palabras reservadas, que forman parte del lenguaje
• Palabras definidas por el usuario, tales como, nombres de
bases de datos, tablas, atributos, etc.
– Total independencia al escribir las sentencias
• En SQL es indiferente escribir las palabras en mayúsculas o
minúsculas, salvo para los literales
• Cada cláusula o palabra puede aparecer en líneas
diferentes, lo que no se puede hacer es separar una misma
palabra
• Se puede utilizar la identación que se quiera
• Una sentencia o comando SQL finaliza con la aparición del
símbolo “;” (no suele ser necesario para un único comando)

Ing. Edgar Espinoza R. 3


SIS 302 BASE DE DATOS I 28/11/2023

Escribir sentencias o comandos SQL


– Se utiliza una extensión de la notación BNF
• Las palabras en mayúsculas representan palabras reservadas
• Las palabras en minúsculas representan palabras definidas por
el usuario
• El símbolo | indica una elección entre alternativas
• Las llaves representan elementos requeridos
• Los corchetes representan elementos opcionales
• Los ... Indican repetición opcional (0 ó más)
– Literales
• Son constantes utilizadas en las sentencias SQL
• Todos los literales no numéricos deben ir entrecomillados

Definiciones y Tipos de Datos en SQL

SQL usa los términos TABLA, FILA, COLUMNA para los


términos formales RELACION, TUPLA y ATRIBUTO
respectivamente
CREATE – comando para la ¡definición de datos. Usado
para crear:
✓ Esquemas
✓ Tablas
✓ Tipos de dominios
✓ Vistas
✓ Asserciones
✓ Triggers

Ing. Edgar Espinoza R. 4


SIS 302 BASE DE DATOS I 28/11/2023

-- CREAR BASE DE DATOS CON SCRIPT


USE master;
GO
CREATE DATABASE Curso -- Nombre de la base de datos
ON
( NAME = Curso_dat, -- Nombre de la referencia del archivo del motor de la base de
datos
FILENAME = 'C:\CURSO\cursodat.mdf’, -- Ubicación y nombre del archivo de la data
size = 10, -- Tamaño inicial del archivo
MAXSIZE = UNLIMITED, -- Tamaño máximo que puede alcanzar la base de datos.
FILEGROWTH = 5% ) -- Crecimiento proyectado del archivo cuando SQL requiera hacerlo
crecer
LOG ON
( NAME = Curso_log,
FILENAME = 'C:\CURSO\cursolog.ldf’,
size = 5MB,
MAXSIZE = 25MB
FILEGROWTH = 5MB )
COLLATE SQL_Latin1_General_CP1_CI_AI; -- Reglas de información que se aplicaran a la
base de datos
GO

Collation

Permiten configurar la sensibilidad entre minúsculas y


MAYUSCULAS, así como el acento de los campos.

• SQL_Latin1_General_CP1_CP1_AS

o _CI = No es sensible a mayúsculas y minúsculas.


o _CS = Sensible a las mayúsculas y minúsculas.
o _AI = No reconoce os acentos.
o _AS = Reconoce los acentos.

Ing. Edgar Espinoza R. 5


SIS 302 BASE DE DATOS I 28/11/2023

Operaciones de recuperación
Sintaxis de la sentencia
SELECT [DISTINCT | ALL] { * | expresión [AS alias] [,...] }
FROM tabla [AS alias] [, ...]
[WHERE condición]
[GROUP BY lista_de_atributos ]
[HAVING condición_de_grupo ]
[ORDER BY lista_de_atributos [ASC/DESC] ];

SELECT: indica que información se desea obtener


FROM: especifica las tablas en las que se encuentran los atributos
implicados en la consulta
WHERE: especifica la condición de búsqueda
GROUP BY: permite agrupar el resultado
HAVING: especifica una condición de grupo
ORDER BY: permite ordenar el resultado

Operaciones de consulta
Operadores
Los siguientes operadores se pueden
utilizar para expresar condiciones de fila
(cláusula WHERE) o de grupo (cláusula
HAVING):
• De comparación (<, <=, >, >=, <>, =)
• Lógicos (AND, OR, NOT)
• BETWEEN ...AND ...
• LIKE
• IN
• IS NULL, IS NOT NULL
• Cuantificadores (ANY, SOME, ALL)
• Existencial (EXISTS) (NOT EXISTS)

Ing. Edgar Espinoza R. 6


SIS 302 BASE DE DATOS I 28/11/2023

BD EMPRESA

Consultas sobre una tabla


Recuperación simple
1.» Obtener todos los datos de todos los
FUNCIONARIOS

2.» Obtener el nombre y salario de todos los


funcionarios.

3.» Obtener el nombre y salario de los


funcionarios de sexo femenino que ganan mas
de Bs. 5000

Ing. Edgar Espinoza R. 7


SIS 302 BASE DE DATOS I 28/11/2023

La clausula WHERE contiene una condición


simple o compuesta, mediante operadores
lógicos

4.» Obtener los nombres y salarios de los


funcionarios que gana entre Bs. 8000 y Bs 9000
inclusive.

Base de Datos I SIS-302 15

Operador Like
Establece una comparación entre cadenas de
caracteres. Comodines:
%: sustituye de cero o mas caracteres (a veces
se utiliza *)
_ (subrayado): sustituye a un unico carácter (a
veces se utiliza ?)

5.» Obtener los nombres y salario de los


funcionarios que tienen la letra “a” como segundo
carácter del nombre. 16

Ing. Edgar Espinoza R. 8


SIS 302 BASE DE DATOS I 28/11/2023

5.» Obtener los nombres y el nuevo salario


de los funcionarios del Departamento 2 a
los que se les ha concedido un aumento
del 10%.

DISTINCT palabra clave usada en el SELECT para especificar la


eliminación de duplicados.
ALL palabra clave usada en el SELECT para especificar que las
duplicadas no deben ser eliminadas.

6.» Obtener los salarios de todos los


funcionarios.
7.» Obtener los distintos salarios de todos
los funcionarios. 17

8.» Obtener los nombres y salarios de


todos los funcionarios mostrando el
resultado en orden alfabético por nombre.
SELECT nombreFunc, salario
FROM funcionario
ORDER BY nombreFunc;

9.» Obtener los nombres y salarios de todos los


funcionarios, mostrando el resultado en orden
creciente por numero de Departamento y en
orden descendente el salario dentro el mismo
departamento.
SELECT nombreFunc, salario
FROM funcionario
ORDER BY idDepto ASC, salario DESC;
18

Ing. Edgar Espinoza R. 9


SIS 302 BASE DE DATOS I 28/11/2023

10. Listar los ids y nombres de los


funcionarios que tienen dependientes.
SELECT Funcionario.idFunc, nombreFunc
FROM Funcionario, Dependiente
WHERE Funcionario.idFunc = Dependiente.idFunc;

SELECT idFunc, nombreFunc


FROM Funcionario
WHERE idFunc IN (SELECT idFunc
FROM Dependiente);

SELECT nombreFunc
FROM Funcionario F
WHERE EXISTS (SELECT idFunc
FROM Dependiente D
19
WHERE F.idFunc=D.idFunc);

11.» Obtener los nombres de los funcionarios y


los nombres de sus respectivos departamentos

SELECT nombreFunc, nombreDepto


FROM Funcionario, Departamento
WHERE Funcionario.idDepto=Departamento.idDepto;

SELECT nombreFunc, nombreDepto


FROM Funcionario INNER JOIN Departamento
ON Funcionario.idDepto=Departamento.idDepto;

20

Ing. Edgar Espinoza R. 10


SIS 302 BASE DE DATOS I 28/11/2023

12.» Obtener los nombres de los Proyectos en


los que trabaja el funcionario ‘Joao B Silva’

SELECT nombreProy
FROM Funcionario F, Trabaja T, Proyecto P
WHERE nombreFunc='Joao B. Silva’
AND F.idFunc=T.idFunc
AND T.idProy=P.idProy;

SELECT nombreProy
FROM Funcionario F JOIN Trabaja T
ON F.idFunc=T.idFunc JOIN Proyecto P
ON T.idProy=P.idProy
WHERE nombreFunc='Joao B. Silva’;

21

13.» Obtener los nombres de funcionarios y


quien los supervisa

SELECT F.nombreFunc,S.nombreFunc AS nombreSuperv


FROM Funcionario F JOIN Funcionario S
ON F.idSuperv=S.idFunc;

22

Ing. Edgar Espinoza R. 11


SIS 302 BASE DE DATOS I 28/11/2023

14.» Listar los nombres y salario de los


Funcionarios que ganan mas que algún
funcionario de sexo femenino
SELECT nombreFunc, salario
FROM Funcionario
WHERE salario> SOME (SELECT salario
FROM Funcionario
WHERE sexo='F’);
15.» Listar los nombres y salario de los Funcionarios
que ganan mas que todos los funcionario de sexo
femenino SELECT nombreFunc, salario
FROM Funcionario
WHERE salario> ALL(SELECT salario
FROM Funcionario
WHERE sexo='F'); 23

Operador IS NULL
Comprueba si un valor determinado es nulo
Un valor nulo no participa en ninguna
comparación, solo se puede comprobar si es o no
nulo
16» Litar los funcionarios que no poseen
supervisores..
SELECT *
FROM Funcionario
WHERE idSuperv IS NULL
TAMBIEN SE PUEDE UTILIZAR IS NOT NULL 24

Ing. Edgar Espinoza R. 12


SIS 302 BASE DE DATOS I 28/11/2023

Funciones Agregadas

25

28/11/2023 Base de Datos I SIS-302

Funciones Agregadas

26

28/11/2023 Base de Datos I SIS-302

Ing. Edgar Espinoza R. 13


SIS 302 BASE DE DATOS I 28/11/2023

Ejemplos:
17.» Obtener el numero total de funcionarios, el mayor,
salario, menor salario, la media de los salarios y la
suma de salarios

SELECT COUNT(*),MAX(salario),MIN(salario),AVG(salario),SUM(salario)
FROM Funcionario;

18.» Obtener el numero de tuplas de los funcionarios,


numero de valores no nulos de idSuperv y el numero
de supervisores distintos.

SELECT COUNT(*),COUNT(idSuperv),COUNT(DISTINCT idSuperv)


FROM Funcionario;

27

19.» Obtener el nombre y salario de los funcionarios


que ganan mas que cualquier funcionario del
departamento 2

SELECT nombreFunc, salario


FROM Funcionario
WHERE--+**** salario > (SELECTMAX(salario)
FROM Funcionario
WHERE idDepto=2);
<

28

Ing. Edgar Espinoza R. 14


SIS 302 BASE DE DATOS I 28/11/2023

Clausula GROUP BY
GROUP BY <lista_de_atributos>
 Agrupa el resultado, devolviendo una única
fila por grupo
 Los atributos que aparezcan en GROUP BY,
deben aparecer en la clausula SELECT
20.» Obtener por cada departamento su id, cantidad
de funcionarios y su salario medio.

SELECT idDepto, COUNT(*) AS TOTAL FUNCIONARIOS,


AVG(salario) AS SALARIO MEDIO
FROM Funcionario 29

GROUP BY idDepto; Base de Datos I SIS-302

21.» Obtener los id, nombre y cantidad de los


proyectos de los funcionarios de sexo femenino que
trabajan

SELECT F.idFunc, nombreFunc, COUNT(*) AS


CANTPROYECTOS
FROM Funcionario F INNER JOIN Trabaja T
ON F.idFunc=T.idFunc
WHERE sexo='F'
GROUP BY F.idFunc, nombreFunc;
30

Base de Datos I SIS-302

Ing. Edgar Espinoza R. 15


SIS 302 BASE DE DATOS I 28/11/2023

Clausula HAVING

▪ Clausula usada junto con GROUP BY para


seleccionar agrupamientos que satisfacen
determinada condición.
▪ La condición de selección usada en funciones de
agregación aplicadas a cada grupo.
▪ Las condiciones de selección de la clausula
WHERE se aplican a tuplas, y pueden ser usadas
junto con HAVING.
▪ Las condiciones de la clausula WHERE son aplicadas
primero para seleccionar cada tupla.
▪ Las condiciones de la clausula HAVING son aplicadas
31
después para seleccionar grupos de tuplas
Base de Datos I SIS-302

Clausula HAVING

22» Listar el numero de funcionarios, la suma de sus


salarios para departamentos con mas de 2 funcionarios

SELECT idDepto, COUNT(*), SUM(salario)


FROM Funcionario
GROUP BY idDepto
Having COUNT(*) > 2;

32

Base de Datos I SIS-302

Ing. Edgar Espinoza R. 16


SIS 302 BASE DE DATOS I 28/11/2023

23» Obtener para cada departamento su id, la


cantidad de funcionarios, su salario medio. Obtener
solamente para los departamentos con salario medio
encima de Bs. 500

SELECT idDepto, COUNT(*) AS CANTFUNCIONARIOS,


AVG(salario) AS SALARIOMEDIO
FROM Funcionario
GROUP BY idDepto
HAVING AVG(salario) > 500;
33

Base de Datos I SIS-302

24.» Obtener sus ids, nombre y la cantidad total de


los proyectos que los funcionarios de sexo femenino
trabajan, solamente para los funcionarios que trabajan
en mas de un proyecto.

SELECT F.idFunc, nombreFunc, COUNT(*) AS


TOTALPROYECTOS
FROM Funcionario F INNER JOIN Trabaja T
ON F.idFunc=T.idFunc
WHERE sexo='F'
GROUP BY F.idFunc, nombreFunc
34
HAVING COUNT(*)>1;
Base de Datos I SIS-302

Ing. Edgar Espinoza R. 17


SIS 302 BASE DE DATOS I 28/11/2023

Preguntas ????

Ing. Edgar Espinoza R. 35

Ing. Edgar Espinoza R. 18

También podría gustarte