Download lenguaje SQL

Document related concepts

SQL wikipedia , lookup

Lenguaje de manipulación de datos wikipedia , lookup

Lenguaje de definición de datos wikipedia , lookup

Optimización de consultas wikipedia , lookup

Base de datos relacional wikipedia , lookup

Transcript
LENGUAJE SQL
Un manejador de base de datos debe de contener lenguajes que permitan definir
el modelos de los datos, este mismo es que permite crear la estructura de la base
de datos.
Lenguaje de Definicion de Datos
En Mysql el Lenguaje de Difinicion de Datos (LDD) es un subconjunto de SQL
(Create Table, create
Index, Create view, create table, drop table, drop database, drop view, etc;).
Lenguaje de Manipulacion de Datos
Este lenguaje es que se utiliza para realizar las operaciones como son: consultas
(Lenguaje de
Consultas), Borrar, insertar y actualizar datos.
En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select,
truncate,etc).
Todos los comandos de manejador Mysql, se deben de terminar con un “;”, si no
se termina con un “;”,
el cursor salta a la siguiente linea para seguir escribiendo mas comandos, es
debido a que pueden existir
sentencias de consulta o creación de tablas muy grandes, y de esta manera se
hace multilinea.
Comandos básicos para el LDD, y visualización de esquemas
CREATE DATABASE <nombreDataBase>;
Este comando crea una nueva base de datos sobre el manejador que se esta
utilizando
USE <nombreDataBase>
Cuando se ha creado una base de datos y se pretende trabajar sobre ella, es
necesario ejecutar
este comando para asignarla al área de trabajo, si se quiere crear alguna tabla,
ocurre un error debido a
que no se ha establecido el área de trabajo, que en este caso sera la base de
datos. Esta sentencia, es la
unica que se puede ejecutar sin un punto y coma para terminar.
SHOW [DATABASES | TABLES];
A veces es necesario verificar si aun no se ha creado una base de datos con algún
nombre
especifico, o tal tal vez verificar que al crear una base de datos, la operación haya
tenido éxito, para
esto, el comando show permite visualizar las bases de datos sobre el manejador o
las tablas sobre una
BD en el área de trabajo.
CREATE TABLE <nombreTabla> ([atributos características] primary key(atributo),
foreign
key(atributo) reference tabla)
Para crear las definiciones y/o esquemas de las entidades que van a formar parte
de la base de
datos, se ejecuta este comando para crear una entidad o tabla de la base de
datos, en esta definición se
especifican también las llaves tanto primaria como foráneas.
Ejemplo:
create table persona (id int(3) not null auto_increment, nombres varchar(50) not
null, apellidos
varchar(30) default '',
primary key(id));
La instruccion anterior crea una tabla llamada persona, estableciendo como llave
primaria el atributo id
que este es auto incrementable.
CREATE VIEW <nombreVista> as (tabla temporal);
Este comando se utliza para crear tablas virtuales en la base de datos, es decir, se
puede utlizar
para crear espejos de tablas, las propiedades que tiene son que cualquier
operacion sobre los datos en
esta tabla virtual, tienen efecto sobre los datos originales, la tabla temporal puede
ser una consulta
simple hasta un consulta compleja.
DROP [DATABASE | TABLE | VIEW] <nombreTabla | nombreDataBase |
nombreView>;
Este comando se utiliza para eliminar tanto bases de datos como tablas, y vistas
(tablas
virtuales).
Ejemplo: si se quiere eliminar una tabla que tiene como nombre “personas”:
DROP TABLE personas;
Estos son los comandos basicos para la definicion de los datos, Algunos comando
marcan errores
cuando se pretende crear tablas, bases de datos, y/o vistas, cuando ya existen,
para evitar este tipo de
errores, el manejador de bases de datos provee unas instrucciones condicionales
para no cometer
errores.
IF EXISTS, IF NOT EXISTS: estos son las clausulas para verificar antes de crear
alguna entidad o DB,
la manera en que se utilizan es la siguiente:
CREATE TABLE IF NOT EXIST <nombre table> (......)
CREATE DATABASE IF NOT EXISTS <nombreDataBAse>;
CREATE VIEW IF NOT EXISTS <nombreVista>;
de la misma manera para crear nuevas entidades o DB's, se utiliza para eliminar
entidades yo DB's;
DROP [VIEW | DATABASE | TABLE] IF EXISTS <nombreVista | nombreBase |
nombreTabla>
Hasta el momento se han definido los comandos para la definicion de datos,
entonces los comandos
demanipulacion de datos, son los que permiten interactuar con la informacion de la
BD, es decir, son
los que permiten insertar, actualizar, eliminar, etc. Los datos de la BD.
Comandos del Lenguaje de Manipulacion de Datos
El lenguaje de manipulacion de datos se puede clasificar en 2 tipos:
Lenguaje de consulta y lenguaje de manipulacion.
El lenguaje de consulta permite obtener la informacion requerida por el usuario, y
el comando utilizado
para crear los reportes(tablas) para un determinado uso es:
SELECT [atributos, ...] FROM [tabla1, tabla2 .....] WHERE [condiciones] ORDER
BY
[atributos, atributos].
Este comando se utiliza de diferentes maneras, y se le conoce como sentencias
de consulta, obtener
datos, y se usan de manera simple hasta de manera compleja.
Simples con una sola tabla:
SELECT * FROM tabla;
Esta sentencia obtiene todos los atributos de todos los registros que existen en
“tabla”.
SELECT atrib1, atrib2, ..., atribn FROM tabla;
Realiza la misma accion que la sentencia anterior, a diferencia de que en la
anterior se muestran
todos los atributos, y en esta se muestran solo algunos atributos especificados.
Cuando se requiere obtener solo los registros que cumplen alguna restriccion o
condicion en algunos de
los atributos de una tabla, se utiliza la clausula WHERE para especificar las
condiciones que deben
cumplir los registros que se desean.
SELECT * FROM tabla WHERE (Atributo='valor');
Cuando se tienen varias condiciones, se pueden utilizar los operadores logicos en
conjunto con los
operadores de comparacion:
Operadores logicos: AND (&), OR ( | ) NOT.
Operadores de comparacion:
= comparador de equidad
< Menor que
> Mayor que
>= Mayor o igual que
<= Menor o igual que
(<>, !=, not) Diferente de
Ejemplo de consulta:
SELECT * FROM tabla WHERE (a=1 AND (B>5 OR C='Mil'));
El comando de consulta tambien se puede utilizar con la clausula LIKE, que
permite manejar patrones,
es decir, se especifica un patron para realizar las comparaiones, y los registros
que tengan ese patron en
el atributo especificado se van a obtener independiente mente mayúscula o
minuscula.
El uso de esta clausula es de la siguiente manera:
('%patron%'), este especifica que no importa en donde aparesca ese patron,
incluso puede no existir,
es decir no importa que tenga atras, ni que tenga delante del patron, se va a
obtener el registro.
('patron%'), Este uso define que todos los registros que empiecen con el patron
especificado se van a
obtener.
(%patron), de la misma manera, que el anterior a diferencia que ente son los que
terminan.
Ejemplo:
SELECT * FROM persona WHERE (Apellidos LIKE 'Perez%');
en este ejemplo se obtienen todos los registros de la tabla persona que empiezan
con Perez, no importa
que tenga después.
Cuando existen varias condiciones sobre un mismo atributo en una sentencia es
tedioso estar
especificando cada condición sobre el atributo, para eliminar esta problematica y
que las sentencias no
se tornen muy grandes, SELECT se combina con la clausula IN que recibe un
conjunto de valores en
los cuales se van a evaluar las condiciones
Ejemplo:
SELECT * FROM tabla WHERE (id [NOT] IN (valor1, valor2, valor3,....,valorn))
en el caso de que sean cadenas de caracteres se meten entre comillas.
En resumen el comando SELECT obtiene registros de una o mas tablas, y como
resultado entrega una
tabla temporal.
El Lenguaje de Manipulacion de datos es el que permite como su nombre lo indica
manipular los datos existentes en la base de datos.
Insertar Registros.INSERT INTO.Este comando permite insertar registros sobre
una tabla en especifico de la base de datos, y existen 3 maneras básicas de
insertar registros.
1.INSER INTO <tabla> ('campo1', 'campo2') VALUES ('valor Campo1', 'valor
Campo2');
2.INSER INTO <tabla> VALUES ('valor Campo1', 'valor Campo2');
3.INSER INTO <tabla> SET campo1='valor Campo1', campo2='valor Campo2';
La manera en que se envian los datos en 1 y 2 es la misma, es decir, en el orden
en que se encuentran los campo en la tabla, de misma manera se le envian los
datos, a diferencia de la 3 no importa en que orden se le envien los datos, ya que
en esta ultima se le especifica el nombre el campo. Asi mismo, cuando no se
tienen datos para determinados campos con valores por default, es necesario
especificar el
espacio del campo en 3 no solo se omite.
Actualizar datos de registros.El
comando para ctualizar datos en una fila determinada se utiliza:
UPDATE <tabla> SET Campo='valor nuevo de Campo' WHERE (condiciones);
si se tienen que actualizar varios campos, se separan con comas, OJO, la
condicion de actualizacion es
necesaria si solo se quiere actualizar en determinadas filas, ya que si no se indica
una condicion, se
actualizan todas las filas de la tabla, y esto puede resultar desagradable si no se
pretendia eso, MySQL
no permite retaurar, a diferencia de otros Manejadores, que si se equivocan, con
solo escribir
ROLLBACK, deshacen todas las operaciones que han hecho sin causar daños en
la BD, como es el caso
de ORACLE, asi que mucho cuidado.
Eliminar Registros.cuando
existen registros inecesarios ne las tablas y no se pretende llevar un historial, o
simplemente se equivocaron y quieren eliminar toda la fila, El lenguaje SQL
permite eliminar registros
mediante el comando DELETE.
DELETE FROM [tabla1, tabla2] WHERE (condiciones tabla1 y tabla 2);
Este comando es muy importante su uso, de igual manera que UPDATE
necesariamente tiene que llevar
las condiciones de eliminacion de filas, ya que si no se especifica la condicion,
elimina todos los
registros de la tabla, y eso puede ser muy desastroso para los Administradores de
DB, asi mucho
cuidado con este comando.
Si se quiere eliminar todos los registros de la tabla n, SQL permite hacerlo con un
comando muh simple
TRUNCATE, y se usa de la siguiente manera:
TRUNCATE <tabla>;
Y el resultado es vaciar la tabla de registros, es muy parecido a la acción de vaciar
la papelera de
reciclaje de Unix.
Hasta el momentos se han esta ejecutando sentencias sobre una sola tabla,
cuando s requiere accedera
los datos de mas de una tabla relacionadas de alguna manera y no relacionadas,
existen las opciones
avanzadas de los comandos mencionados con anterioridad.
Comando SELECT con varias tablas:
SELECT tabla1.*, tabla2.* from tabla1, tabla2 WHERE (condiciones de relacion)
En este tipo de consultas es necesario especificar la condicion de relacion que hay
entre las tablas, esto
debido a que si no se especifican se van a realiza operaciones del algebra
relacional que no se
obtendran resultados satisfactorios.
Este comando permite utilizarse con una clausula que permite distinguir datos de
uno, y la clasusu es
DISTINCT, que permite obtener datos no duplicados, si y solo si todos los
atributos se parecen.
SELECT DSTINCT tabla1.*, tabla2.* FROM tabla1, tabla2 WHERE (Condiciones
de relacion)
Anteriormente se indico que el comando SELECT da como resultado otra tabla,
por lo tanto, si se
quieren obtener solo algunas filas del resultado de una consulta, se puede hacer
de una manera muy
simple, aqui se hace uso de los ALIAS, que permite nombra ya sea una tabla, o un
atributo y se usa de
la siguiente manera:
SELECT * FROM (SELECT * FROM tabla WHERE id>20 and id<50) res WHERE
res.id=30;
este tipo de consultas se le llama consultas recursivas, y se pueden hacer tantan
subconsultas comose
requieran.
La manera en que se muestra los datos puede no ser la que se requiere, ya que si
se quieren obtener los
datos ordenados, el manejador permite hacerlo mediante la clausula de SELECT
conocida como
ORDER BY, y se usa de la siguiente manera:
SELECT tabla1.*, tabla2.* FROM tabla1, tabla2 WHERE tabla1.id=tabla2.id
ORDER BY id;
Esta clasusula permite ordenar los registros de manera descendente ASC o
ascendente DESC, ejemplo:
SELECT tabla1.*, tabla2.* FROM tabla1, tabla2 WHERE tabla1.id=tabla2.id
ORDER BY id
DESC;
Asi como los comandos de consulta, el manejador tiene funciones de utilidad para
el administrador, y
son trigonometricas, aritmeticas, etc..
MAX([campo]) obtiene valor maximo en el campo especificado.
MIN([campo]) obtiene el minimo en el campo especificado.
AVG([campo]) obtiene el promedio en el campo especificados
COUNT(*) obtiene el numero de registros que tiene un tabla
PASSWORD('cadena') Encripta una cadena, muy util para contraseñas
ejemplos:
SELECT [MAX() | MIN() | AVG() | COUNT(*)] from tabla WHERE (condiciones);
Comandos del algebra relacional UNION, MINUS, INERSECT, LEFT JOIN, RIGHT
JOIN, OUTER
JOIN.
EL comando union obtiene la union de una o mas tablas, con los mismos atributos.
SELECT * from tabla1 UNION [ALL] tabla2
El comando Intersect Obtiene la interseccion de 2 tablas, es decir los registros que
estan en tabla1 y que
estan en tabla 2.
SELECT * FROM tabla1 INTERSECT tabla2
El comando MINUS obtiene los registros que no estan en la tabla 2
SELECT * FROM tabla1 MINUS tabla2;
Los comando de equijuntas por asociaciones ya sea a la izquierda o la derecha:
SELECT * from tabla1 JOIN tabla2 on C1=C2;
este tipo de comando entrega como resultado una union de tablas, es decir, se
crea una tabla con los
atributos de tabla1 y tabla2
El IDENTIFICADOR LEFT o RIGHT es por donde se hace la junta, El
IDENTIFICADOR OUTER,
indica si se adieren aun que no cumpla la condicion.
Ejemplos:
SELECT tabla1.*, tabla 2.* from tabla1 RIGHT JOIN tabla2 on C1=C2;
SELECT tabla1.*, tabla 2.* from tabla1 LEFT JOIN tabla2 on C1=C2;
SELECT tabla1.*, tabla 2.* from tabla1 LEFT OUTER JOIN tabla2 on C1=C2;
SELECT tabla1.*, tabla 2.* from tabla1 RIGHT OUTER JOIN tabla2 on C1=C2;
el resultado de las sentencias anteriores son diferentes, ya que la junta se hace en
una direccion y otra,
de la misma manera que las clausulas del algebra relacional, de la manera en que
se especifican se
obtienen resultados diferentes.
El uso de los comandos del lenguaje de manipulacion de datos pueder ser de
muchas maneras, como
por ejemplo, si se pretende insertar registros de una tabla temporal a paratir de los
registros de una o
mas tablas, se procede de la siguiente manera.
INSERT INTO tabla AS (SELECT * FROM tablas WHERE (condiciones) ).
EJERCICIOS:
De la base de datos porporcionada, realizar las siguiente consultas:
1.Muestre
todos los profesores que tienen por lo menos una publicacion
2.Muestre
los profesores que tienen nivel SNI
3.Muestre
los profesores que tengan perfil promep
4.Si
forma parte del grupo de docentes de ala Fim, actualice su Grado academico, no
importa que no
lo tenga, solo actualice ese campo para su persona;
5.Obtenga
los usuarios que no pertenecen al grupo de docentes y que estan en la BD
6.Liste
los Proyectos que tienen los usuarios ”jpacheco”, “gsolorio”, “mvega”, “ladamex”,
“mvillagomez”
7.Obtenga
la cantidad de registros obtenidos para el patron “admin” dentro de la tabla
usuarios y
personas
8.Obtenga
un lista con todos los profesores con el nivel de acceso y el ordenados por Grado;
la
manera queda a criterio