Cuando necesitamos recuperar información desde una base de datos, utilizaremos el comando SELECT. Este comando, espera que le indiquemos las condiciones de búsqueda que han de cumplir los registros, y a partir de las mismas nos construye una vista con las columnas pedidas.
SELECT FROM [ WHERE ] [ ORDER BY ]
La orden SELECT nos permite indicar una lista de campos a recuperar, o un * si queremos recuperarlos todos, y espera que le indiquemos de que tabla o tablas son esos campos.
Como vemos en la imagen, nos permite especificar la lista de las columnas que queremos devolver, la tabla que deseamos leer, la condición que queremos que cumplan las columnas que queremos seleccionar, y podemos también, indicar el orden en que queremos que se seleccionen las filas , indicando los campos y si ha de ser ascendente o descendente.
Veamos sus posibilidades en detalle:
En la lista de campos, podemos especificar:
- Cualquier/todos los campos de las tablas que figuren en FROM. Si un nombre de columna aparece repetido en mas de una tabla, indicaremos el nombre de la tabla, punto (.) y el nombre del campo.
SELECT cliente.id, pedido.id, nombrecliente, .....
- Podemos especificar funciones aritméticas (suma como +, resta como -, multiplicación como *, división como /)
SELECT id, nombre, sueldo * 12, ....
- Podemos definir alias para los nombres de columna, tanto para que sirvan de identificador en nuestros programas, como para que aparezcan como cabecera de columna en las presentaciones
SELECT id, nombre, sueldo*12 AS Salario_Anual, .....
Tras la clausula FROM podemos especificar:
- las tablas que intervienen en la consulta
SELECT id, nombre, direccion FROM clientes,....
- Les podemos asignar alias, y utilizar dichos alias en vez del nombre de las tablas
SELECT c.id, c.nombre, d.nombre,....FROM cliente c, departamento d, .........
- Si utilizamos mas de una tabla, deberemos especificar las condiciones de relación, que veremos mas adelante.
En la clausula WHERE, deberemos indicar la(s) condición(es) que deberá cumplir una fila, para aparecer en la consulta;
SELECT * FROM clientes WHERE id>10
Por ejemplo, seleccionar todos los clientes que tengan un ID mayor que 10.
Las distintas condiciones, las podemos enlazar con relaciones AND y OR, así como utilizar paréntesis para controlar el orden de ejecución.
En la ultima parte del SELECT podemos indicar si queremos realizar la seleccion ordenada por alguna columna, y en que orden (ascendente/descendente. Para ello, podemos especificar:
SELECT ... FROM ... WHERE ... ORDER BY id DESC
para una selección clasificada por «id», de forma descendente, o
SELECT ... FROM ... WHERE ... ORDER BY nombre
para una selección clasificada por nombre de forma ascendente.
Ejemplos:
Para empezar con las pruebas, deberemos crear una base de datos, unas tablas e insertar algunos registros. Mas adelante explicaremos porque ponemos lo que ponemos, ahora solo abrir SQLDeveloper con una conexión de administración y pegar los scripts:
Creación tabla de clientes
CREATE TABLE "CLIENTES" ( "ID" NUMBER NOT NULL ENABLE, "USUARIO" VARCHAR2(30 BYTE) NOT NULL ENABLE, "PASSWORD" VARCHAR2(30 BYTE) NOT NULL ENABLE, "NOMBRE" VARCHAR2(200 BYTE), "DIRECCION" VARCHAR2(200 BYTE), "POBLACION" VARCHAR2(50 BYTE), "PROVINCIA" NUMBER, "FECHA_ALTA" DATE, CONSTRAINT "CLIENTES_PK" PRIMARY KEY ("ID")); CREATE INDEX "CLIENTES_PROVINCIAS" ON "CLIENTES" ("PROVINCIA");
Creación tabla de provincias
CREATE TABLE "PROVINCIA" ( "ID_PROVINCIA" NUMBER NOT NULL ENABLE, "NOMBRE_PROVINCIA" VARCHAR2(40 BYTE) NOT NULL ENABLE, "ID_PAIS" NUMBER NOT NULL ENABLE, CONSTRAINT "PROVINCIA_PK" PRIMARY KEY ("ID_PROVINCIA")); CREATE OR REPLACE TRIGGER "PROVINCIA_TRG" BEFORE INSERT ON PROVINCIA FOR EACH ROW BEGIN <> BEGIN NULL; END COLUMN_SEQUENCES; END; / ALTER TRIGGER "PROVINCIA_TRG" ENABLE; CREATE OR REPLACE TRIGGER "PROVINCIA_TRG1" BEFORE INSERT ON PROVINCIA FOR EACH ROW BEGIN <> BEGIN IF INSERTING AND :NEW.ID_PROVINCIA IS NULL THEN SELECT PROVINCIA_SEQ1.NEXTVAL INTO :NEW.ID_PROVINCIA FROM SYS.DUAL; END IF; END COLUMN_SEQUENCES; END; / ALTER TRIGGER "MIGARCIA"."PROVINCIA_TRG1" ENABLE;
Creación tabla País:
CREATE TABLE "PAIS" ( "ID_PAIS" NUMBER NOT NULL ENABLE, "NOMBRE_PAIS" VARCHAR2(40 BYTE) NOT NULL ENABLE, CONSTRAINT "PAIS_PK" PRIMARY KEY ("ID_PAIS")); CREATE OR REPLACE TRIGGER "PAIS_TRG" BEFORE INSERT ON PAIS FOR EACH ROW BEGIN <> BEGIN IF INSERTING AND :NEW.ID_PAIS IS NULL THEN SELECT PAIS_SEQ.NEXTVAL INTO :NEW.ID_PAIS FROM SYS.DUAL; END IF; END COLUMN_SEQUENCES; END; / ALTER TRIGGER "PAIS_TRG" ENABLE;
Insertando datos en las tablas
SET DEFINE OFF;
--------------------------------------------------------
-- Tabla de Paises
--------------------------------------------------------
REM INSERTING into PAIS
Insert into PAIS (ID_PAIS,NOMBRE_PAIS) values ('1','España');
--------------------------------------------------------
-- Tabla de provincias
--------------------------------------------------------
REM INSERTING into PROVINCIA
Insert into PROVINCIA (ID_PROVINCIA,NOMBRE_PROVINCIA,ID_PAIS) values ('1','Barcelona','1');
Insert into PROVINCIA (ID_PROVINCIA,NOMBRE_PROVINCIA,ID_PAIS) values ('6','Tarragona','1');
Insert into PROVINCIA (ID_PROVINCIA,NOMBRE_PROVINCIA,ID_PAIS) values ('7','Lerida','1');
Insert into PROVINCIA (ID_PROVINCIA,NOMBRE_PROVINCIA,ID_PAIS) values ('10','Gerona','1');
--------------------------------------------------------
-- Tabla de clientes
--------------------------------------------------------
REM INSERTING into CLIENTES
Insert into CLIENTES (ID,USUARIO,PASSWORD,NOMBRE,DIRECCION,POBLACION,PROVINCIA,FECHA_ALTA) values ('1','miguel','miguel','Miguel Garcia','Pez 5','Barcelona','1',to_date('18/10/95','DD/MM/RR'));
Insert into CLIENTES (ID,USUARIO,PASSWORD,NOMBRE,DIRECCION,POBLACION,PROVINCIA,FECHA_ALTA) values ('2','antonio','antonio','Antonio Perez','Acuario 32 1º','Barcelona','1',to_date('20/03/06','DD/MM/RR'));
Insert into CLIENTES (ID,USUARIO,PASSWORD,NOMBRE,DIRECCION,POBLACION,PROVINCIA,FECHA_ALTA) values ('3','jjose','jjose','Jose Rodriguez','Marsalada 123 ','Barcelona','7',to_date('12/05/14','DD/MM/RR'));
Una vez cargados los datos, podemos empezar con las pruebas
1-Listar las columnas id, usuario, nombre y población de la tabla de clientes
2-Ver en cuantas poblaciones tenemos clientes
Vamos a utilizar la clausula DISTINCT:
3-Presentar nombre de cliente, población y provincia
Indicamos los campos que queremos de las dos tablas, las tablas implicada y como se relacionan, que en este campo se hacen con dos columnas con distinto nombre
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.