Anda di halaman 1dari 5

Introduccin prctica al SQL

La clusula select
El resultado de una consulta SQL es, por supuesto, una relacin. Considrese una
consulta simple, usando la tabla persona, Obtener los nombres de todas las personas en
la relacin persona:
select nombre
from t_persona

El resultado es una relacin consistente en el nico atributo nombre-persona.


Los lenguajes formales de consulta estn basados en la nocin matemtica de que una
relacin es un conjunto. As, nunca aparecen tuplas duplicadas en las relaciones. En la
prctica, la eliminacin de duplicados consume tiempo. Sin embargo, SQL (como la
mayora de los lenguajes de consulta comerciales) permite duplicados en las relaciones,
as como en el resultado de las expresiones SQL. As, la consulta anterior listar cada
nombre una vez por cada tupla en la que aparece en la relacin persona.
En aquellos casos donde se quiera forzar la eliminacin de duplicados, se insertar la
palabra clave distinct despus de select. Por lo tanto, se puede reescribir la consulta
anterior como
select distinct nombre
from t_persona

si se desean eliminar los duplicados.


Es importante resaltar que SQL permite usar la palabra clave all para especificar
explcitamente que no se eliminan los duplicados:
select all nombre
from t_persona

El smbolo asterisco * se puede usar para denotar todos los atributos. As, el uso de
* en la clusula select anterior indicara que todos los atributos de prstamo seran
seleccionados. Una clusula select de la forma select * indica que se deben seleccionar
todos los atributos de todas las relaciones que aparecen en la clusula from.
select *
from t_persona

La clusula select puede contener tambin expresiones aritmticas que contengan los
operadores, +, , * y / operando sobre constantes o atributos de la tuplas. Por ejemplo, la
consulta
select dni+'dni', nombre, edad+10
from t_persona

devolver una relacin que es igual que la relacin persona, salvo que el atributo dni
habr aadido los caracteres dni y edad habr sido sumado en 10.

SQL tambin proporciona tipos de datos especiales, tales como varias formas del tipo
fecha y permite varias funciones aritmticas para operar sobre esos tipos.

La clusula where
A continuacin se ilustra con un ejemplo el uso de la clusula where en SQL.
Considrese la consulta Obtener todos las personas cuyo edad sea mayor que 20. Esta
consulta puede escribirse en SQL como
select dni, nombre, edad
from t_persona
where edad>20

Para aadir ms restricciones SQL usa las conectivas lgicas and, or y not (en lugar de
los smbolos matemticos , y ) en la clusula where. Los operandos de las
conectivas lgicas pueden ser expresiones que contengan los operadores de
comparacin <, <=, >, >=, = y <>. SQL permite usar los operadores de comparacin
para comparar cadenas y expresiones aritmticas, as como tipos especiales, tales como
el tipo fecha.
SQL incluye un operador de comparacin between para simplificar las clusulas where
que especifica que un valor sea menor o igual que un valor y mayor o igual que otro
valor. Si se desea obtener personas cuya edad estn entre 20 y 30, se puede usar la
comparacin between para escribir
select dni, nombre, edad
from t_persona
where edad between 20 and 30

en lugar de
select dni, nombre, edad
from t_persona
where edad >= 20 and edad <= 30

De forma anloga, se puede usar el operador de comparacin not between.

La clusula from
La clusula from es necesaria en todas las instrucciones SELECT en las que se estn
recuperando datos de tablas o vistas. Use la clusula FROM es usada generalmente para
enumerar las tablas y vistas que contienen las columnas a las que se hace referencia en

la lista de seleccin y en la clusula WHERE. Los nombres de las tablas y vistas se


pueden sustituir por alias mediante la clusula AS.
Anexo
Compilar en el SQL Server:
use master
go
-----------------------------------------------------------------------------------if DB_ID('BD_MiProyecto') is not null /* Si existe una BD con el nombre que usar la borro
*/
drop database BD_MiProyecto
go
create database BD_MiProyecto /* Creo la BD */
go
-----------------------------------------------------------------------------------use BD_MiProyecto /* Indica que usar una BD en especfica, en este caso
BD_MiProyecto */
go
-----------------------------------------------------------------------------------if OBJECT_ID('t_persona','U') is not null /* Si existe una tabla con el nombre que usar la
borro */
drop table t_persona
go
create table t_persona
(
dni varchar(8) not null,
nombre varchar (50) not null,
edad int not null,
primary key (dni) /* La llave primaria es aquella que identificar a cada fila, es
irrepetible */
)
go
-----------------------------------------------------------------------------------insert into t_persona Values ('43212345','Karol Ramirez',19)
insert into t_persona values ('12345678','Edgar Pizarro', 25)
insert into t_persona values ('87654321','Raul Suarez', 20)
insert into t_persona values ('87654322','Raul Suarez', 20)

--Base ferretera
use master
go
if DB_ID('BD_Ferreteria') is not null /* Si existe una BD con el nombre que usar la borro
*/
drop database BD_Ferreteria
go
create database BD_Ferreteria /* Creo la BD */
go
------------------------------------------------use BD_Ferreteria
go
-------------------------------------------------

CREATE TABLE t_cliente


(
Cliente_codigo VARCHAR(4) PRIMARY KEY,
Cliente_nombre VARCHAR(30),
Cliente_Nacimiento DATE
)
go
CREATE TABLE t_producto
(
Prod_codigo VARCHAR(4) PRIMARY KEY,
Prod_nombre VARCHAR(40),
Prod_descripcion VARCHAR(40),
Prod_precio int
)
go
CREATE TABLE t_recibo
(
Recibo_numero VARCHAR(5) PRIMARY KEY,
Recibo_fecha DATE,
Cliente_codigo VARCHAR(4),
FOREIGN KEY (Cliente_codigo) REFERENCES t_cliente
)
go
CREATE TABLE t_lineaDeRecibo
(
LineaDeRecibo_numero INT PRIMARY KEY,
LineaDeRecibo_cantidad int,
Prod_codigo VARCHAR(4),
Recibo_numero VARCHAR(5),
FOREIGN KEY (Prod_codigo) REFERENCES t_producto,
FOREIGN KEY (Recibo_numero) REFERENCES t_recibo
)
go
INSERT INTO t_cliente
VALUES('0001','PREZ, JOS','1960-10-04');
INSERT INTO t_cliente
VALUES('0002','TORRES, RINA','1963-12-25');
INSERT INTO t_cliente
VALUES('0003','SALAS, ROSA','1959-10-04');
INSERT INTO t_cliente
VALUES('0004','GAMARRA, OLIVER','1982-12-08');
INSERT INTO t_cliente
VALUES('0005','ROMERO, ALICIA','1981-12-24');
INSERT INTO t_cliente
VALUES('0006','ROJAS, JOAQUN','1980-11-26');
INSERT INTO t_cliente
VALUES('0007','RICALDE, REBECA','1985-04-04');
go
INSERT INTO t_producto
VALUES('P001','FIERRO 3/4','BARRA',20.00);
INSERT INTO t_producto
VALUES('P002','FIERRO 1/2','BARRA',12.00);
INSERT INTO t_producto
VALUES('P003','LAVATORIO TREBOL CLASICO BLANCO ','UNIDAD',200.00);
INSERT INTO t_producto
VALUES('P004','CERROJO FORTE TRIPLE SEGURO','UNIDAD',54.00);
INSERT INTO t_producto
VALUES('P005','CERROJO FORTE SIMPLE','UNIDAD',38.50);
INSERT INTO t_producto
VALUES('P006','MAYOLICA CELIMA 20X15 BLANCA','METRO CUADRADO',20.00);

INSERT INTO t_producto


VALUES('P007','MAYOLICA CELIMA 35X20 COLOR','METRO CUADRADO',30.00);
INSERT INTO t_producto
VALUES('P008','BAERA LOZA COLOR','UNIDAD',500.00);
INSERT INTO t_producto
VALUES('P009','BAERA LOZA BLANCA','UNIDAD',300.00);
INSERT INTO t_producto
VALUES('P010','BAERA LOZA BLANCA MARCA XYZ','UNIDAD',300.00);
go
INSERT INTO t_recibo
VALUES('R0001','2002-07-25','0001');
INSERT INTO t_recibo
VALUES('R0002','2002-07-26','0001');
INSERT INTO t_recibo
VALUES('R0003','2002-07-26','0002');
INSERT INTO t_recibo
VALUES('R0004','2002-07-27','0003');
INSERT INTO t_recibo
VALUES('R0005','2002-07-27','0004');
INSERT INTO t_recibo
VALUES('R0006','2002-07-27','0005');
INSERT INTO t_recibo
VALUES('R0007','2002-07-28','0001');
go
INSERT INTO t_lineaDeRecibo
VALUES(1,5,'P001','R0001');
INSERT INTO t_lineaDeRecibo
VALUES(2,10,'P002','R0001');
INSERT INTO t_lineaDeRecibo
VALUES(3,1,'P003','R0002');
INSERT INTO t_lineaDeRecibo
VALUES(4,12,'P002','R0003');
INSERT INTO t_lineaDeRecibo
VALUES(5,1,'P003','R0003');
INSERT INTO t_lineaDeRecibo
VALUES(6,7,'P006','R0004');
INSERT INTO t_lineaDeRecibo
VALUES(7,1,'P005','R0005');
INSERT INTO t_lineaDeRecibo
VALUES(8,1,'P004','R0006');
INSERT INTO t_lineaDeRecibo
VALUES(9,1,'P003','R0007');

Anda mungkin juga menyukai