SQL
SQL
INTRODUCCIN AL SQL
Comandos
Existen dos tipos de comandos SQL: Los LDD que permiten crear y definir nuevas bases de datos, campos e ndices. Los LMD que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.
Estructura Bsica
Consiste en tres clusulas Select, From y Where Select: Corresponde a la operacin proyeccin del algebra relacional. From: Corresponde a la operacin producto cartesiano del algebra relacional. Where: Corresponde a la seleccin del algebra relacional.
Comandos LDD
CREATE Utilizado para crear nuevas tablas, campos e ndices DROP Empleado para eliminar tablas e ndices ALTER Utilizado para modificar las tablas agregando campos o cambiando la definicin de los campos.
Comandos LMD
SELECT Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado INSERT Utilizado para cargar lotes de datos en la base de datos en una nica operacin UPDATE Utilizado para modificar los valores de los campos y registros especificados DELETE Utilizado para eliminar registros de una tabla de una base de datos
CLUSULAS
Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular.
FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registros WHERE Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar GROUP BY Utilizada para separar los registros seleccionados en grupos especficos
CLUSULAS(Continuacin)
Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular.
HAVING Utilizada para expresar la condicin que debe satisfacer cada grupo ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden especfico
Operadores Lgicos
AND Es el y lgico. Evala dos condiciones y devuelve un valor de verdad slo si ambas son ciertas OR Es el o lgico. Evala dos condiciones y devuelve un valor de verdad si alguna de las dos es cierta NOT Negacin lgica. Devuelve el valor contrario de la expresin.
Operadores de Comparacin
< > <> <= >= Menor que Mayor que Distinto de Menor Igual que Mayor Igual que
Operadores de Comparacin
BETWEEN Utilizado para especificar un intervalo de valores LIKE Utilizado en la comparacin de un modelo In Utilizado para especificar registros de una base de datos
Funciones de Agregado
AVG Utilizada para calcular el promedio de los valores de un campo determinado COUNT Utilizada para devolver el nmero de registros de la seleccin SUM Utilizada para devolver la suma de todos los valores de un campo determinado
Las funciones de agregado se usan dentro de una clusula SELECT en grupos de registros para devolver un nico valor que se aplica a un grupo de registros.
Funciones de Agregado
Las funciones de agregado se usan dentro de una clusula SELECT en grupos de registros para devolver un nico valor que se aplica a un grupo de registros.
MAX Utilizada para devolver el valor ms alto de un campo especificado MIN Utilizada para devolver el valor ms bajo de un campo especificado
TIPOS DE DATOS
TAREA
Agregamos unos registros ms a la tabla: insert into usuarios (nombre, clave) values ('Juan', 'Rivera'); select * from usuarios; insert into usuarios (nombre,clave) values ('Luis', blog'); select * from usuarios;
Operadores Relacionales
Creamos la tabla libros con la siguiente estructura: create table libros ( titulo varchar(30), autor varchar(30), editorial varchar(15), precio float ); Agregamos los siguientes registros: insert into libros (titulo,autor,editorial,precio) values ('El aleph','Borges','Emece',24.50); insert into libros (titulo,autor,editorial,precio) values ('Martin Fierro','Jose Hernandez','Emece',16.00); insert into libros (titulo,autor,editorial,precio) values ('Aprenda PHP','Mario Molina','Emece',35.40); insert into libros (titulo,autor,editorial,precio) values ('Cervantes y el quijote','Borges','Paidos',50.90);
Operadores Relacionales
Seleccionamos los registros cuyo autor sea diferente de 'Borges': select * from libros where autor <> 'Borges'; Seleccionamos los registros cuyo precio supere los 20 pesos, slo el ttulo y precio: select titulo,precio from libros where precio > 20; Recuperamos aquellos libros cuyo precio es menor o igual a 30: select * from libros where precio <= 30;
Comentarios
Los comentarios los podemos realizar de dos formas: Creamos la tabla: create table libros ( titulo varchar(30), autor varchar(20), editorial varchar(15) ); Agregamos un registro: insert into libros (titulo,autor,editorial) values ('El aleph','Borges','Emece');
Comentarios
Mostramos todos los libros y agregamos un comentario de lnea: select * from libros --mostramos los registros de libros; Mostramos el ttulo y autor de todos los libros y agregamos un bloque de comentarios: select titulo, autor /*mostramos ttulos y nombres de los autores*/ from libros;
Clave Primaria
Creamos la tabla definiendo el campo "nombre" como clave primaria: create table usuarios ( nombre varchar(20), clave varchar(10), primary key(nombre) ); Al campo "nombre" no lo definimos "not null", pero al establecerse como clave primaria, SQL Server lo convierte en "not null", veamos que en la columna "IS_NULLABLE" aparece "NO": sp_columns usuarios;
Clave Primaria
Ingresamos algunos registros: insert into usuarios (nombre, clave) values ('juanperez',juanito'); insert into usuarios (nombre, clave) values ('raulgarcia',raulito'); Cuando un campo es clave primaria, sus valores no se repiten. Ingresemos un valor de clave primaria existente: insert into usuarios (nombre, clave) values ('juanperez,'perez');
Clave Primaria
Cuando un campo es clave primaria, sus valores no pueden ser nulos. Intentamos ingresar el valor "null" en el campo clave primaria: insert into usuarios (nombre, clave) values (null,123456'); Aparece un mensaje de error y la sentencia no se ejecuta. Si realizamos alguna actualizacin, SQL Server controla que los valores para el campo establecido como clave primaria no estn repetidos en la tabla. Intentemos actualizar el nombre de un usuario colocando un nombre existente: update usuarios set nombre='juanperez' where nombre='raulgarcia'; Aparece un mensaje indicando que se viola la clave primaria y la actualizacin no se realiza.
Atributo Identity
Creamos la tabla especificando que el campos "codigo" genere valores secuenciales comenzando en 1 e incrementndose en 1 automticamente: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(30), editorial varchar(15), precio float ) Ingresamos algunos registros, recordando que si un campo tiene el atributo "identity" debemos omitirlo en la insercin: insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',23) Veamos cmo se almacen: select * from libros;
Atributo Identity
Ingresamos mas registros: insert into libros (titulo,autor,editorial,precio) values('Uno','Richard Bach','Planeta',18); insert into libros (titulo,autor,editorial,precio) values('Aprenda PHP','Mario Molina','Siglo XXI',45.60); insert into libros (titulo,autor,editorial,precio) values('Alicia en el pais de maravillas','Lewis Carroll','Paidos',15.50); Veamos cmo se almacenaron: select *from libros; Intentemos ingresar un valor para el campo "codigo": insert into libros (codigo,titulo,autor,editorial,precio) values(5,'Martin Fierro','Jose Hernandez','Paidos',25);
Atributo Identity
Creamos la tabla especificando que el campos "codigo" genere valores secuenciales comenzando en 100 e incrementndose en 2 automticamente: create table libros ( codigo int identity(100,2), titulo varchar(20), autor varchar(30), precio float ); Ingresamos algunos registros, recordando que si un campo tiene el atributo "identity" debemos omitirlo en la insercin: insert into libros (titulo,autor,precio) values('El aleph','Borges',23); insert into libros (titulo,autor,precio) values('Uno','Richard Bach',18); insert into libros (titulo,autor,precio) values('Aprenda PHP','Mario Molina',45.60); Veamos cmo se almacenaron: select *from libros;
Atributo Identity
Para permitir ingresar un valor en un campo de identidad activamos la opcin "identity_insert": set identity_insert libros on; Si "identity_insert" est en ON, la instruccin "insert" DEBE explicitar un valor: insert into libros (codigo,titulo,autor) values (100,'Matematica estas ahi','Paenza'); Ingresamos otro registro: insert into libros (codigo,titulo,autor) values (1,'Ilusiones','Richard Bach'); Veamos los resultados: Select * from libros;
Atributo Identity
Para desactivar la opcin "identity_insert" sera: set identity_insert libros off; Intentemos ingresar un valor para el campo "codigo": insert into libros (codigo,titulo,autor) values (300,'Uno','Richard Bach'); Ahora inseretmos otro registro para ver que nmero le pone al campo identity insert into libros (titulo,autor,precio) values('Aprenda PHP','Mario Molina',45.60); Veamos los resultados: Select * from libros;
Alias
Creamos la tabla: create table agenda( nombre varchar(30), domicilio varchar(30), telefono varchar(11) ); Ingresamos algunos registros: insert into agenda values('Juan Perez','Avellaneda 908','4252525'); insert into agenda values('Marta Lopez','Sucre 34','4556688'); insert into agenda values('Carlos Garcia','Sarmiento 1258',null);
Alias
Mostramos la informacin con el encabezado "NombreyApellido" para el campo "nombre": select nombre as NombreyApellido, domicilio,telefono from agenda; Mostramos la informacin con el encabezado "Nombre y apellido" para el campo "nombre", necesitamos emplear comillas: select nombre as 'Nombre y apellido', domicilio,telefono from agenda; La palabra clave "as" es opcional, podemos obviarla: select nombre 'Nombre y apellido', domicilio,telefono from agenda;
Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(30) default 'Desconocido', editorial varchar(15), precio decimal(5,2), cantidad tinyint, primary key(codigo) );
Ingresamos algunos registros: insert into libros values('El aleph','Borges','Planeta',15,null); insert into libros values('Martin Fierro','Jose Hernandez','Emece',22.20,200); insert into libros values('Antologia poetica','J.L. Borges','Planeta',null,150);
insert into libros values('Aprenda PHP','Mario Molina','Emece',18.20,null); insert into libros values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',null,100); insert into libros values('Manual de PHP', 'J.C. Paez', 'Siglo XXI',31.80,120); insert into libros values('Harry Potter y la piedra filosofal','J.K. Rowling',default,45.00,90); insert into libros values('Harry Potter y la camara secreta','J.K. Rowling','Emece',46.00,100); insert into libros (titulo,autor,cantidad) values('Alicia en el pais de las maravillas','Lewis Carroll',220); insert into libros (titulo,autor,cantidad) values('PHP de la A a la Z',default,0);
Para conocer la cantidad total de libros, sumamos las cantidades de cada uno: select sum(cantidad) from libros; Retorna 980; verifique la suma, sumando los valores de todos los registros del campo "cantidad". Queremos saber cuntos libros tenemos de la editorial "Emece": select sum(cantidad) from libros where editorial='Emece'; retorna 300. Queremos saber cul es el libro ms costoso; usamos la funcin "max()": select max(precio) from libros; retorna 46.00. Para conocer el precio mnimo de los libros de "Rowling" tecleamos: select min(precio) from libros where autor like '%Rowling%'; retorna 45.00. Queremos saber el promedio del precio de los libros referentes a "PHP": select avg(precio) from libros where titulo like '%PHP%';
Calculamos el promedio del valor de los libros agrupados por editorial: select editorial, avg(precio) from libros group by editorial;
Clusula top
Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40), autor varchar(20), editorial varchar(20) ); Ingresamos algunos registros: insert into libros values ('Uno','Richard Bach','Planeta'); insert into libros values ('El aleph','Borges','Emece'); insert into libros values ('Alicia en el pais...','Carroll','Planeta');
Clusula top
Ingresamos algunos registros: insert into libros values ('Aprenda PHP','Mario Molina','Siglo XXI'); insert into libros values ('Java en 10 minutos','Mario Molina','Siglo XXI'); insert into libros values ('Java desde cero','Mario Molina','Emece'); insert into libros values ('Ilusiones','Richard Bach','Planeta'); Obtenemos todos los datos de los primeros 2 libros de la tabla: select top 2 * from libros;
Clusula top
Mostramos los ttulos y autores de los 3 primeros libros ordenados por autor: select top 3 titulo,autor from libros order by autor; Realizamos la misma consulta anterior pero empleamos la clusula "with ties", con lo cual incluiremos en la seleccin, todos los registros que tengan el mismo autor que el ltimo registro retornado, aunque pasemos de 3: select top 3 with ties titulo,autor from libros order by autor; Note que retorna los 5 primeros registros porque incluye los dos siguientes que tienen el mismo valor que el ltimo en el campo "autor" (por el cual se ordena).
Si intentamos actualizar un registro repitiendo la clave primaria: update vehiculos set horallegada='8:05' where patente='AIC124' and horallegada='16:00'; aparece un mensaje de error y la actualizacin no se realiza.
Eliminamos los libros con precio menor: delete from libros where precio= (select min(precio) from libros);