You are on page 1of 123

UNIDAD IV

INTRODUCCIN AL SQL

Componentes del SQL


El lenguaje SQL est compuesto por comandos, clusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.

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

Creando Base de Datos y Tablas


Creamos la base de datos Create database prueba Checamos que tablas existen: sp_tables @table_owner='dbo'; Creamos una nueva tabla: create table usuarios ( nombre varchar(30), clave varchar(10) ); Checamos el contenido de la estructura de la tabla: sp_columns usuarios;

Creando Base de Datos y Tablas


Volvemos a crear la tabla: create table usuarios ( nombre varchar(30), clave varchar(10) ); Eliminamos la tabla: drop table usuarios; Checamos si se elimin la tabla: sp_tables @table_owner='dbo';

Creando Base de Datos y Tablas


Creamos la tabla: create table usuarios ( nombre varchar(30), clave varchar(10) ) Agregamos un registro a la tabla: insert into usuarios (nombre, clave) values ('Mariano',trenes)

Checamos si el registro se guard: select * from usuarios;

Creando Base de Datos y Tablas

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;

Otro tipos de datos


Para almacenar informacin de los libros de una librera necesitamos los siguientes campos: -titulo, cadena de caracteres de 20 de longitud, -autor, cadena de caracteres de 15 de longitud, -editorial, caracteres de 10 de longitud, -precio, valor numrico con decimales y -cantidad, valor numrico entero Creamos la tabla create table libros ( titulo varchar(20), autor varchar(15), editorial varchar(10), precio float, cantidad integer );

Otro tipos de datos


Vemos la estructura de la tabla: sp_columns libros; Ingresamos algunos registros: insert into libros (titulo,autor,editorial,precio,cantidad) values ('El aleph','Borges','Emece',25.50,100); insert into libros (titulo,autor,editorial,precio,cantidad) values ('Matematica estas ahi','Paenza','Siglo XXI',18.8,200); Veamos los registros cargados: select * from libros;

Otro tipos de datos


Veamos lo que sucede si intentamos ingresar para el campo "titulo" una cadena de ms de 20 caracteres: insert into libros (titulo,autor,editorial,precio,cantidad) values ('Alicia en el pais de las maravillas','Lewis Carroll','Atlantida',10,200); Aparece un mensaje de error y la sentencia no se ejecuta. Ahora vamos a cortar la cadena para que SQL Server acepte el ingreso del registro: insert into libros (titulo,autor,editorial,precio,cantidad) values ('Alicia en el pais','Lewis Carroll','Atlantida',10,200); Veamos los registros cargados: select * from libros;

Recuperar algunos campos (select)


Veamos todos los campos la tabla: select * from libros; Veamos solamente el ttulo, autor y editorial de todos los libros especificando los nombres de los campos separados por comas: select titulo,autor,editorial from libros; Con la siguiente sentencia seleccionamos los ttulos y precios de todos los libros: select titulo,precio from libros; Veamos solamente la editorial y la cantidad de libros: select editorial,cantidad from libros;

Recuperar algunos registros (where)


Creamos la tabla: create table usuarios ( nombre varchar(30), clave varchar(10) ); Ingresamos algunos registros: insert into usuarios (nombre, clave) values ('Marcelo','Boss'); insert into usuarios (nombre, clave) values ('JuanPerez','Juancito'); insert into usuarios (nombre, clave) values ('Susana',Rino'); insert into usuarios (nombre, clave) values ('Luis','Rino'); .

Recuperar algunos registros (where)


Realizamos una consulta especificando una condicin, queremos ver el usuario cuyo nombre es "Luis": select * from usuarios where nombre='Luis'; Queremos ver el nombre de los usuarios cuya clave es "Rino": select nombre from usuarios where clave='Rino'; Realizamos un "select" de los nombres de los usuarios cuya clave es "Santi": select nombre from usuarios where clave='Santi';

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;

Borrar registros (delete)


Creamos la tabla usuarios con la siguiente estructura: create table usuarios ( nombre varchar(30), clave varchar(10) ); Agregamos registros a la tabla: insert into usuarios (nombre,clave) values ('Marcelo',leones'); insert into usuarios (nombre,clave) values ('Susana','chapita'); insert into usuarios (nombre,clave) values ('CarlosFuentes',Mexico'); insert into usuarios (nombre,clave) values ('FedericoLopez',Mexico');

Borrar registros (delete)


Seleccionamos todos los registros: select * from usuarios; Vamos a eliminar el registro cuyo nombre de usuario es "Marcelo": delete from usuarios where nombre='Marcelo'; Veamos el contenido de la tabla: select * from usuarios; Intentamos eliminarlo nuevamente: delete from usuarios where nombre='Marcelo';

Borrar registros (delete)


Veamos el contenido de la tabla: select * from usuarios; Como ningn registro cumple con la condicin no se borran registros. Eliminamos todos los registros cuya clave es Mexico': delete from usuarios where clave=Mexico'; Veamos el contenido de la tabla: select * from usuarios; Eliminemos todos los registros: delete from usuarios; Veamos el contenido de la tabla: select * from usuarios;

Actualizar registros (update)


Creamos la tabla usuarios con la siguiente estructura: create table usuarios ( nombre varchar(30), clave varchar(10) ); Agregamos registros a la tabla: insert into usuarios (nombre,clave) values ('Marcelo',leones'); insert into usuarios (nombre,clave) values ('Susana','chapita'); insert into usuarios (nombre,clave) values ('CarlosFuentes',Mexico'); insert into usuarios (nombre,clave) values ('FedericoLopez',Mexico');

Actualizar registros (update)


Cambiaremos los valores de todas las claves, por la cadena Torreon": update usuarios set clave=Torreon'; El cambio afect a todos los registros: select * from usuarios; Necesitamos cambiar el valor de la clave del usuario llamado Federicolopez por Cancun": update usuarios set clave=Cancun' where nombre='Federicolopez'; Verifiquemos que la actualizacin se realiz: select * from usuarios;

Actualizar registros (update)


Para actualizar varios campos en una sola instruccin empleamos: update usuarios set nombre=Marcelino', clave='Marce' where nombre='Marcelo'; Veamos la tabla: select * from usuarios;

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;

Valores null (is null)


Creamos la tabla especificando que los campos "titulo" y "autor" no admitan valores nulos: create table libros ( titulo varchar(30) not null, autor varchar(30) not null, editorial varchar(15) null, precio float ); Los campos "editorial" y "precio" si permiten valores nulos; el primero, porque lo especificamos colocando "null" en la definicin del campo, el segundo lo asume por defecto.

Valores null (is null)


Agregamos un registro a la tabla con valor nulo para el campo "precio": insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',null); Recuerde que el valor "null" no es una cadena de caracteres, por lo tanto no se coloca entre comillas. Ingresamos otro registro, con valor nulo para el campo "editorial", campo que admite valores "null": insert into libros (titulo,autor,editorial,precio) values('Alicia en el pais','Lewis Carroll',null,0);

Valores null (is null)


Veamos lo que sucede si intentamos ingresar el valor "null" en campos que no lo admiten, como "titulo": insert into libros (titulo,autor,editorial,precio) values(null,'Borges','Siglo XXI',25); Aparece un mensaje y la sentencia no se ejecuta. Para ver cules campos admiten valores nulos y cules no, empleamos el procedimiento almacenado "sp_columns": sp_columns libros;

Valores null (is null)


Como el valor "null" no es lo mismo que una cadena vaca. Vamos a ingresar un registro con cadena vaca para el campo "editorial": insert into libros (titulo,autor,editorial,precio) values('Uno','Richard Bach',' ',18.50); Ingresamos otro registro, ahora cargamos una cadena vaca en el campo "titulo": insert into libros (titulo,autor,editorial,precio) values(' ','Richard Bach','Planeta',22);

Valores null (is null)


Recuperemos los libros cuyo nombre de editorial es "null": select *from libros where editorial is null; Ahora veamos los libros cuya editorial almacena una cadena vaca: select *from libros where editorial = ' '; Para recuperar los libros cuyo precio no sea nulo: select *from libros where precio is not null;

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;

Valores por defecto (default)


Creamos la tabla definiendo un valor por defecto para el campo "autor" y otro para el campo "cantidad": create table libros ( codigo int identity, titulo varchar(40), autor varchar(30) not null default 'Desconocido', editorial varchar(20), precio decimal(5,2), cantidad tinyint default 0 ); Ingresamos un registro omitiendo los valores para el campo "autor" y "cantidad": insert into libros (titulo,editorial,precio) values('Java en 10 minutos','Paidos',50.40);

Valores por defecto (default)


Si ingresamos un registro sin valor para el campo "precio", que admite valores nulos, se ingresar "null" en ese campo: insert into libros (titulo,editorial) values('Aprenda PHP','Siglo XXI'); select *from libros; Visualicemos la estructura de la tabla: sp_columns libros; La columna "COLUMN_DEF", muestra el valor por defecto de cada campo. Podemos emplear "default" para dar el valor por defecto a algunos campos: insert into libros (titulo,autor,precio,cantidad) values ('El gato con botas',default,default,100); select *from libros;

Columnas calculadas (operadores aritmticos y de concatenacin)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), cantidad tinyint default 0, primary key (codigo) ); Ingresamos algunos registros: insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',25); insert into libros values('Java en 10 minutos','Mario Molina','Siglo XXI',50.40,100); insert into libros (titulo,autor,editorial,precio,cantidad) values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',15,50);

Columnas calculadas (operadores aritmticos y de concatenacin)


Queremos saber el monto total en dinero de cada libro: select titulo, precio,cantidad, precio*cantidad from libros; Queremos saber el precio de cada libro con un 10% de descuento: select titulo,precio, precio-(precio*0.1) from libros; Actualizamos los precios con un 10% de descuento y vemos el resultado: update libros set precio=precio-(precio*0.1); select *f rom libros; Queremos una columna con el ttulo, el autor y la editorial de cada libro: select titulo+'-'+autor+'-'+editorial from libros; 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;

Ordenar registros (order by)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), primary key (codigo) ); Ingresamos algunos registros: insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',25.33); insert into libros values('Java en 10 minutos','Mario Molina','Siglo XXI',50.65); insert into libros (titulo,autor,editorial,precio) values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',19.95); insert into libros (titulo,autor,editorial,precio) values('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',15);

Ordenar registros (order by)


Recuperamos los registros ordenados por el ttulo: select * from libros order by titulo; Ordenamos los registros por el campo "precio", referenciando el campo por su posicin en la lista de seleccin: select titulo,autor,precio from libros order by 3; Los ordenamos por "editorial", de mayor a menor empleando "desc": select * from libros order by editorial desc; Ordenamos por dos campos: select * from libros order by titulo,editorial;

Ordenar registros (order by)


Ordenamos en distintos sentidos: select * from libros order by titulo asc, editorial desc; Podemos ordenar por un campo que no se lista en la seleccin: select titulo, autor from libros order by precio; Est permitido ordenar por valores calculados: select titulo, autor, editorial, precio+(precio*0.1) as 'precio con descuento' from libros order by 4;

Operadores lgicos ( and - or - not)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Emece',15.90); insert into libros values('Antologa potica','Borges','Planeta',39.50); insert into libros values('Java en 10 minutos','Mario Molina','Planeta',50.50);

Operadores lgicos ( and - or - not)


insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',19.90); insert into libros values('Martin Fierro','Jose Hernandez','Emece',25.90); insert into libros values('Martin Fierro','Jose Hernandez','Paidos',16.80); insert into libros values('Aprenda PHP','Mario Molina','Emece',19.50); insert into libros values('Cervantes y el quijote','Borges','Paidos',18.40);

Operadores lgicos ( and - or - not)


Recuperamos los libros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos: select * from libros where (autor='Borges') and (precio<=20); Seleccionamos los libros cuyo autor es "Borges" y/o cuya editorial es "Planeta": select * from libros where autor='Borges' or editorial='Planeta'; Recuperamos los libros cuya editorial NO es "Planeta": select * from libros where not editorial='Planeta'; Veamos cmo el uso de parntesis hace que SQL Server evale en forma diferente ciertas consultas aparentemente iguales: Select * from libros where (autor='Borges') or (editorial='Paidos' and precio<20); select * from libros where (autor='Borges' or editorial='Paidos') and (precio<20);

Otros operadores relacionales (is null)


Creamos la tabla: Create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Emece',15.90); insert into libros values('Cervantes y el quijote','Borges','Paidos',null); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll',null,19.90); insert into libros values('Martin Fierro','Jose Hernandez','Emece',25.90);

Otros operadores relacionales (is null)


insert into libros (titulo,autor,precio) values('Antologa potica','Borges',25.50); insert into libros (titulo,autor,precio) values('Java en 10 minutos','Mario Molina',45.80); insert into libros (titulo,autor) values('Martin Fierro','Jose Hernandez'); insert into libros (titulo,autor) values('Aprenda PHP','Mario Molina'); Recuperamos los registros en los cuales est almacenado el valor "null" en el campo "editorial": select * from libros where editorial is null; Seleccionamos los libros que no contiene "null" en "editorial": select * from libros where editorial is not null;

Otros operadores relacionales (between)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Emece',15.90); insert into libros values('Cervantes y el quijote','Borges','Paidos',null); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll',null,19.90); insert into libros values('Martin Fierro','Jose Hernandez','Emece',25.90);

Otros operadores relacionales (between)


insert into libros (titulo,autor,precio) values('Antologa potica','Borges',32); insert into libros (titulo,autor,precio) values('Java en 10 minutos','Mario Molina',45.80); insert into libros (titulo,autor,precio) values('Martin Fierro','Jose Hernandez',40); insert into libros (titulo,autor,precio) values('Aprenda PHP','Mario Molina',56.50); Recuperamos los registros cuyo precio est entre 20 y 40 empleando "between": select * from libros where precio between 20 and 40; Note que si el campo tiene el valor "null", no aparece en la seleccin. Para seleccionar los libros cuyo precio NO est entre un intervalo de valores antecedemos "not" al "between": select * from libros where precio not between 20 and 35;

Otros operadores relacionales (in)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20), editorial varchar(20), precio decimal(6,2), ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Emece',15.90); insert into libros values('Cervantes y el quijote','Borges','Paidos',null); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll',null,19.90); insert into libros values('Matematica estas ahi','Paenza','Siglo XXI',15);

Otros operadores relacionales (in)


insert into libros (titulo,precio) values('Antologa potica',32); insert into libros (titulo,autor,precio) values('Martin Fierro','Jose Hernandez',40); insert into libros (titulo,autor,precio) values('Aprenda PHP','Mario Molina',56.50); Recuperamos los libros cuyo autor es "Paenza" o "Borges": select * from libros where autor in('Borges','Paenza'); Recuperamos los libros cuyo autor NO es "Paenza" ni "Borges": select * from libros where autor not in ('Borges','Paenza');

Otros operadores relacionales (like)


Creamos la tabla create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), primary key(codigo) ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Emece',15.90); insert into libros values('Antologa potica','J. L. Borges','Planeta',null); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll',null,19.90); insert into libros values('Matematica estas ahi','Paenza','Siglo XXI',15);

Otros operadores relacionales (like)


insert into libros values('Martin Fierro','Jose Hernandez',default,40); insert into libros values('Aprenda PHP','Mario Molina','Nuevo siglo',56.50); Recuperamos todos los libros que contengan en el campo "autor" la cadena "Borges": select * from libros where autor like '%Borges%'; Seleccionamos los libros cuyos ttulos comienzan con la letra "M": select * from libros where titulo like 'M%'; Seleccionamos todos los ttulos que NO comienzan con "M": select * from libros where titulo not like 'M%';

Otros operadores relacionales (like)


Si queremos ver los libros de "Lewis Carroll" pero no recordamos si se escribe "Carroll" o "Carrolt", podemos emplear el comodn "_" (guin bajo) y establecer la siguiente condicin: select * from libros where autor like '%Carrol_'; Buscamos los libros cuya editorial comienza con las letras entre la "P" y la "S": select titulo,autor,editorial from libros where editorial like '[P-S]%'; Seleccionamos los libros cuya editorial NO comienza con las letras "P" ni "N": select titulo,autor,editorial from libros where editorial like '[^PN]%'; Recuperamos todos los libros cuyo precio se encuentra entre 10.00 y 19.99: select titulo,precio from libros where precio like '1_.%'; Recuperamos los libros que NO incluyen centavos en sus precios: select titulo,precio from libros where precio like '%.00';

Contar registros (count)


Contamos los libros de editorial "Planeta": select count(*) from libros where editorial='Planeta'; Contamos los registros que tienen precio (sin tener en cuenta los que tienen valor nulo), usando la funcin "count(precio)": select count(precio) from libros;

Contar registros (count_big)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), primary key(codigo) ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Emece',15.90); insert into libros values('Antologa potica','Borges','Planeta',null); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll',null,19.90); insert into libros values('Matematica estas ahi','Paenza','Siglo XXI',15); insert into libros values('Martin Fierro','Jose Hernandez',default,40); insert into libros values('Aprenda PHP','Mario Molina','Nuevo siglo',null); insert into libros values('Uno','Richard Bach','Planeta',20);

Contar registros (count_big)


Contamos los libros usando "count_big()": select count_big(*) from libros; Note que incluye todos los libros aunque tengan valor nulo en algn campo. Contamos los libros de editorial "Planeta": select count_big(*) from libros where editorial='Planeta'; Averiguamos la cantidad de libros que tienen precio: select count_big(precio) from libros; Contamos las editoriales (sin repetir): select count_big(distinct editorial) from libros;

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) );

Funciones de agregacin (count - sum - min max - avg)

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);

Funciones de agregacin (count - sum - min max - avg)

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%';

Funciones de agregacin (count - sum - min max - avg)

Agrupar registros (group by)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40), autor varchar(30), editorial varchar(15), precio decimal(5,2), cantidad tinyint, primary key(codigo) );

Agrupar registros (group by)


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);

Agrupar registros (group by)


Ingresamos algunos registros: insert into libros values('Harry Potter y la camara secreta','J.K. Rowling','Emece',null,100); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',22.50,200); insert into libros values('PHP de la A a la Z',null,null,null,0); Queremos saber la cantidad de libros de cada editorial, utilizando la clusula "group by": select editorial, count(*) from libros group by editorial; El resultado muestra los nombres de las editoriales y la cantidad de registros para cada valor del campo. Note que los valores nulos se procesan como otro grupo.

Agrupar registros (group by)


El resultado muestra los nombres de las editoriales y la cantidad de registros para cada valor del campo. Note que los valores nulos se procesan como otro grupo. Obtenemos la cantidad libros con precio no nulo de cada editorial: select editorial, count(precio) from libros group by editorial; La salida muestra los nombres de las editoriales y la cantidad de registros de cada una, sin contar los que tienen precio nulo. Para conocer el total en dinero de los libros agrupados por editorial, tecleamos: select editorial, sum(precio) from libros group by editorial;

Agrupar registros (group by)


Obtenemos el mximo y mnimo valor de los libros agrupados por editorial, en una sola sentencia: select editorial, max(precio) as mayor, min(precio) as menor from libros group by editorial;

Calculamos el promedio del valor de los libros agrupados por editorial: select editorial, avg(precio) from libros group by editorial;

Agrupar registros (group by)


Es posible limitar la consulta con "where". Vamos a contar y agrupar por editorial considerando solamente los libros cuyo precio es menor a 30 pesos: select editorial, count(*) from libros where precio<30 group by editorial; Note que las editoriales que no tienen libros que cumplan la condicin, no aparecen en la salida. Para que aparezcan todos los valores de editorial, incluso los que devuelven cero o "null" en la columna de agregado, debemos emplear la palabra clave "all" al lado de "group by": select editorial, count(*) from libros where precio<30 group by all editorial;

Seleccionar grupos (having)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40), autor varchar(30), editorial varchar(15), precio decimal(5,2), cantidad tinyint, primary key(codigo) );

Seleccionar grupos (having)


Ingresamos algunos registros: insert into libros values('El aleph','Borges','Planeta',35,null); insert into libros values('Martin Fierro','Jose Hernandez','Emece',22.20,200); insert into libros values('Martin Fierro','Jose Hernandez','Planeta',40,200); insert into libros values('Antologia poetica','J.L. Borges','Planeta',null,150); insert into libros values('Aprenda PHP','Mario Molina','Emece',18,null); insert into libros values('Manual de PHP', 'J.C. Paez', 'Siglo XXI',56,120);

Seleccionar grupos (having)


Ingresamos algunos registros: insert into libros values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',null,100); 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',null,100); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',42,80); insert into libros values('PHP de la A a la Z',null,null,110,0); insert into libros values('Uno','Richard Bach','Planeta',25,null);

Seleccionar grupos (having)


Queremos saber la cantidad de libros agrupados por editorial pero considerando slo algunos grupos, por ejemplo, los que devuelvan un valor mayor a 2, usamos la siguiente instruccin: select editorial, count(*) from libros group by editorial having count(*)>2; Queremos el promedio de los precios de los libros agrupados por editorial, pero solamente de aquellos grupos cuyo promedio supere los 25 pesos: select editorial, avg(precio) from libros group by editorial having avg(precio)>25;

Seleccionar grupos (having)


Queremos la cantidad de libros, sin considerar los que tienen precio nulo (where), agrupados por editorial (group by), sin considerar la editorial "Planeta" (having): select editorial, count(*) from libros where precio is not null group by editorial having editorial<>'Planeta'; Necesitamos el promedio de los precios agrupados por editorial, de aquellas editoriales que tienen ms de 2 libros: select editorial, avg(precio) from libros group by editorial having count(*) > 2;

Seleccionar grupos (having)


Buscamos el mayor valor de los libros agrupados y ordenados por editorial y seleccionamos las filas que tienen un valor menor a 100 y mayor a 30: select editorial, max(precio) as 'mayor' from libros group by editorial having max(precio)<100 and max(precio)>30 order by editorial;

Registros duplicados (distinct)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(40), autor varchar(30), editorial varchar(15), primary key(codigo) ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Planeta'); insert into libros values('Martin Fierro','Jose Hernandez','Emece');

Registros duplicados (distinct)


Ingresamos algunos registros: insert into libros values('Martin Fierro','Jose Hernandez','Planeta'); insert into libros values('Antologia poetica','Borges','Planeta'); insert into libros values('Aprenda PHP','Mario Molina','Emece'); insert into libros values('Aprenda PHP','Lopez','Emece'); insert into libros values('Manual de PHP', 'J. Paez', null); insert into libros values('Cervantes y el quijote',null,'Paidos');

Registros duplicados (distinct)


Ingresamos algunos registros: insert into libros values('Harry Potter y la piedra filosofal','J.K. Rowling','Emece'); insert into libros values('Harry Potter y la camara secreta','J.K. Rowling','Emece'); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos'); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Planeta'); insert into libros values('PHP de la A a la Z',null,null); insert into libros values('Uno','Richard Bach','Planeta');

Registros duplicados (distinct)


Para obtener la lista de autores sin repeticin tecleamos: select distinct autor from libros; Note que aparece "null" como un valor para "autor" Para obtener la lista de autores conocidos, es decir, no incluyendo "null" en la lista: select distinct autor from libros where autor is not null; Contamos los distintos autores: select count(distinct autor) from libros;

Registros duplicados (distinct)


Queremos los nombres de las editoriales sin repetir: select distinct editorial from libros; Queremos saber la cantidad de editoriales distintas: select count(distinct editorial) from libros; La combinamos con "where" para obtener los distintos autores de la editorial "Planeta": select distinct autor from libros where editorial='Planeta';

Registros duplicados (distinct)


Contamos los distintos autores que tiene cada editorial empleando "group by": select editorial,count(distinct autor) from libros group by editorial; Mostramos los ttulos y editoriales de los libros sin repetir ttulos ni editoriales: select distinct titulo,editorial from libros order by titulo; Note que los registros no estn duplicados, aparecen ttulos iguales pero con editorial diferente, cada registro es diferente.

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).

Clave primaria compuesta


Creamos la tabla estableciendo dos campos como clave primaria: create table vehiculos ( patente char(6) not null, tipo char(1),--'a'=auto, 'm'=moto horallegada datetime, horasalida datetime, primary key(patente,horallegada) ); Ingresamos algunos registros: insert into vehiculos values('AIC124','a','8:05','12:30'); insert into vehiculos values('CAA258','a','8:05',null);

Clave primaria compuesta


Ingresamos algunos registros: insert into vehiculos values('DSE367','m','8:30','18:00'); insert into vehiculos values('FGT458','a','9:00',null); insert into vehiculos values('AIC124','a','16:00',null); insert into vehiculos values('LOI587','m','18:05','19:55'); Si intentamos ingresar un registro con clave primaria repetida: insert into vehiculos values('LOI587','m','18:05',null); aparece un mensaje de error y la insercin no se realiza.

Clave primaria compuesta


Si ingresamos un registro repitiendo el valor de uno de los campos que forman parte de la clave, si lo acepta: insert into vehiculos values('LOI587','m','21:30',null);

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.

Clave primaria compuesta


Recordemos que los campos que forman parte de la clave primaria no aceptan valores nulos, aunque no se haya aclarado en la definicin de la tabla: insert into vehiculos values('HUO690','m',null,null); Si mostramos la estructura de la tabla: sp_columns vehiculos; vemos que los campos que forman parte de la clave primaria (patente y horallegada) tienen "NO" en la columna "IS_NULLABLE", es decir, no admiten valores nulos.

Agregar y eliminar campos ( alter table - add drop)


Creamos la tabla: create table libros ( titulo varchar(30), editorial varchar(15), edicion datetime, precio decimal(6,2) ); Agregamos un registro: insert into libros (titulo,editorial,precio) values ('El aleph','Emece',25.50);

Agregar y eliminar campos ( alter table - add drop)


Agregamos el campo "cantidad" a la tabla "libros", de tipo tinyint, que acepta valores nulos: alter table libros add cantidad tinyint; Verificamos la estructura de la tabla empleando el procedimiento almacenado "sp_columns": sp_columns libros; aparece el nuevo campo. Agregamos un campo "codigo" a la tabla "libros", de tipo int con el atributo "identity": alter table libros add codigo int identity;

Agregar y eliminar campos ( alter table - add drop)


Intentamos agregar un campo llamado "autor" de tipo varchar(30) que NO acepte valores nulos: alter table libros add autor varchar(30) not null; No es posible, porque SQL Server no permite agregar campos "not null" a menos que se especifique un valor por defecto: alter table libros add autor varchar(20) not null default 'Desconocido'; En el ejemplo anterior, se agreg una restriccin "default" para el nuevo campo, que puede verificarse ejecutando el procedimiento almacenado "sp_helpconstraint".

Agregar y eliminar campos ( alter table - add drop)


En el siguiente ejemplo eliminamos el campo "precio" de la tabla "libros": alter table libros drop column precio; Verificamos la eliminacin: sp_columns libros; el campo "precio" ya no existe. Recuerde que no pueden eliminarse los campos con restricciones, intentmoslo: alter table libros drop column autor; no lo permite. Podemos eliminar varios campos en una sola sentencia: alter table libros drop column editorial,edicion;

Alterar campos (alter table - alter)


Creamos la tabla: create table libros ( codigo int identity, titulo varchar(30), autor varchar(30), editorial varchar(15), precio decimal(6,2) not null default 0 ); Ingresamos algunos registros: insert into libros values('El aleph','Borges','Planeta',20); insert into libros values('Java en 10 minutos',null,'Siglo XXI',30);

Alterar campos (alter table - alter)


Ingresamos algunos registros: insert into libros values('Uno','Richard Bach','Planeta',15); insert into libros values('Martin Fierro','Jose Hernandez',null,30); insert into libros values('Aprenda PHP','Mario Molina','Emece',25); Vamos a efectuar diferentes modificaciones a los campos de esta tabla. Luego de cada una podemos ver la estructura de la tabla para controlar si los cambios se realizaron o no empleando el procedimiento almacenado "sp_columns".

Alterar campos (alter table - alter)


Modificamos el campo "titulo" para que acepte una cadena ms larga y no admita valores nulos: alter table libros alter column titulo varchar(40) not null; Si intentamos modificar el campo "autor" para que no admita valores nulos SQL Server no lo permite porque hay registros con valor nulo en "autor". Eliminamos tal registro y realizamos la modificacin: delete from libros where autor is null; alter table libros alter column autor varchar(30) not null;

Alterar campos (alter table - alter)


Intentamos quitar el atributo "identity" del campo "codigo" y lo redefinimos como "smallint": alter table libros alter column codigo smallint; No aparece mensaje de error pero no se realiz el cambio completo, veamos: sp_columns libros; el campo "codigo" es "smallint pero an es "identity". Aprendimos que no se puede modificar el tipo de dato o atributos de un campo que tiene una restriccin si el cambio afecta a la restriccin; pero si el cambio no afecta a la restriccin, si se realiza: alter table libros alter column precio decimal(6,2) null; El campo "precio" fue alterado para que acepte valores nulos:

Subconsultas como expresin


create table libros ( codigo int identity, titulo varchar(40), autor varchar(30), editorial varchar(20), precio decimal(5,2) ); Ingresamos los siguientes registros: insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',20.00); insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Plaza',35.00); insert into libros values('Aprenda PHP','Mario Molina','Siglo XXI',40.00);

Subconsultas como expresin


Ingresamos los siguientes registros: insert into libros values('El aleph','Borges','Emece',10.00); insert into libros values('Ilusiones','Richard Bach','Planeta',15.00); insert into libros values('Java en 10 minutos','Mario Molina','Siglo XXI',50.00); insert into libros values('Martin Fierro','Jose Hernandez','Planeta',20.00); insert into libros values('Martin Fierro','Jose Hernandez','Emece',30.00); insert into libros values('Uno','Richard Bach','Planeta',10.00);

Subconsultas como expresin


Obtenemos el ttulo, precio de un libro especfico y la diferencia entre su precio y el mximo valor: select titulo,precio, precio-(select max(precio) from libros) as diferencia from libros where titulo='Uno'; Mostramos el ttulo y precio del libro ms costoso: select titulo,autor, precio from libros where precio= (select max(precio) from libros);

Subconsultas como expresin


Actualizamos el precio del libro con mximo valor: update libros set precio=45 where precio= (select max(precio) from libros);

Eliminamos los libros con precio menor: delete from libros where precio= (select min(precio) from libros);

Combinacin interna (inner join)


Creamos las tablas: create table libros ( codigo int identity, titulo varchar(40), autor varchar(30) default 'Desconocido', codigoeditorial tinyint not null, precio decimal(5,2) ); create table editoriales ( codigo tinyint identity, nombre varchar(20), primary key (codigo) ); I

Combinacin interna (inner join)


Ingresamos algunos registros en ambas tablas: insert into editoriales values('Planeta'); insert into editoriales values('Emece'); insert into editoriales values('Siglo XXI'); insert into libros values('El aleph','Borges',2,20); insert into libros values('Martin Fierro','Jose Hernandez',1,30); insert into libros values('Aprenda PHP','Mario Molina',3,50); insert into libros values('Java en 10 minutos',default,3,45); Recuperamos los datos de libros: Select * from libros; Vemos que en el campo "editorial" aparece el cdigo, pero no sabemos el nombre de la editorial.

Combinacin interna (inner join)


Realizamos un join para obtener datos de ambas tablas (titulo, autor y nombre de la editorial): select titulo, autor, nombre from libros join editoriales on codigoeditorial=editoriales.codigo; Mostramos el cdigo del libro, ttulo, autor, nombre de la editorial y el precio realizando un join y empleando alias: select l.codigo,titulo,autor,nombre,precio from libros as l join editoriales as e on codigoeditorial=e.codigo; Note que al listar el campo "codigo" especificamos a qu tabla pertenece; si no lo hacemos SQL Server no sabr si nos referimos al de la tabla "libros" o "editoriales". Los dems campos no tienen referencia a la tabla porque tienen nombres que no se repiten.

Combinacin interna (inner join)


Realizamos la misma consulta anterior agregando un "where" para obtener solamente los libros de la editorial "Siglo XXI": select l.codigo,titulo,autor,nombre,precio from libros as l join editoriales as e on codigoeditorial=e.codigo where e.nombre='Siglo XXI'; Obtenemos ttulo, autor y nombre de la editorial, esta vez ordenados por ttulo: select titulo,autor,nombre from libros as l join editoriales as e on codigoeditorial=e.codigo order by titulo;

Combinacin externa izquierda (left join)


Creamos las tablas create table libros ( codigo int identity, titulo varchar(40), autor varchar(30) default 'Desconocido', codigoeditorial tinyint not null, precio decimal(5,2) ); create table editoriales ( codigo tinyint identity, nombre varchar(20), primary key (codigo) );

Combinacin externa izquierda (left join)


Ingresamos algunos registros en ambas tablas: insert into editoriales values('Planeta'); insert into editoriales values('Emece'); insert into editoriales values('Siglo XXI'); insert into libros values('El aleph','Borges',1,20); insert into libros values('Martin Fierro','Jose Hernandez',1,30); insert into libros values('Aprenda PHP','Mario Molina',2,50); insert into libros values('Java en 10 minutos',default,4,45); Realizamos una combinacin izquierda para obtener los datos de los libros, incluyendo el nombre de la editorial: select titulo,nombre from editoriales as e left join libros as l on codigoeditorial = e.codigo;

Combinacin externa izquierda (left join)


Las editoriales de las cuales no hay libros, es decir, cuyo cdigo de editorial no est presente en "libros" aparece en el resultado, pero con el valor "null" en el campo "titulo". Realizamos la misma consulta anterior pero cambiamos el orden de las tablas: select titulo,nombre from libros as l left join editoriales as e on codigoeditorial = e.codigo; El resultado mostrar el ttulo del libro y el nombre de la editorial; los ttulos cuyo cdigo de editorial no est presente en "editoriales" aparecen en el resultado, pero con el valor "null" en el campo "nombre".

Combinacin externa izquierda (left join)


Restringimos el resultado de una consulta considerando solamente los registros que encuentran coincidencia en la tabla de la derecha, es decir, cuyo valor de cdigo est presente en "libros": select titulo,nombre from editoriales as e left join libros as l on e.codigo=codigoeditorial where codigoeditorial is not null; Mostramos las editoriales que NO estn presentes en "libros", es decir, que NO encuentran coincidencia en la tabla de la derecha: select titulo,nombre from editoriales as e left join libros as l on e.codigo=codigoeditorial where codigoeditorial is null;

Combinacin externa derecha (right join)


Creamos las tablas create table libros ( codigo int identity, titulo varchar(40), autor varchar(30) default 'Desconocido', codigoeditorial tinyint not null, precio decimal(5,2) ); create table editoriales ( codigo tinyint identity, nombre varchar(20), primary key (codigo) );

Combinacin externa derecha (right join)


Ingresamos algunos registros en ambas tablas: insert into editoriales values('Planeta'); insert into editoriales values('Emece'); insert into editoriales values('Siglo XXI'); insert into libros values('El aleph','Borges',1,20); insert into libros values('Martin Fierro','Jose Hernandez',1,30); insert into libros values('Aprenda PHP','Mario Molina',2,50); insert into libros values('Java en 10 minutos',default,4,45); Solicitamos el ttulo y nombre de la editorial de los libros empleando un "right join": select titulo,nombre from libros as l right join editoriales as e on codigoeditorial = e.codigo;

Combinacin externa derecha (right join)


Las editoriales de las cuales no hay libros, es decir, cuyo cdigo de editorial no est presente en "libros" aparece en el resultado, pero con el valor "null" en el campo "titulo". Realizamos la misma consulta anterior agregando un "where" que restringa el resultado considerando solamente los registros que encuentran coincidencia en la tabla izquierda: select titulo,nombre from libros as l right join editoriales as e on e.codigo=codigoeditorial where codigoeditorial is not null; Mostramos las editoriales que NO estn presentes en "libros" (que NO encuentran coincidencia en "editoriales"): select titulo,nombre from libros as l right join editoriales as e on e.codigo=codigoeditorial where codigoeditorial is null;

Combinacin externa completa (full join)


Realizamos una combinacin externa completa para obtener todos los registros de ambas tablas, incluyendo los libros cuyo cdigo de editorial no existe en la tabla "editoriales" y las editoriales de las cuales no hay correspondencia en "libros": select titulo,nombre from editoriales as e full join libros as l on codigoeditorial = e.codigo;