 |
|
 |
Lenguaje de manipulación de datos (I)
Consulta de datos.
El proceso más importate que podemos llevar a cabo en una base de datos es la consulta de los datos. De nada serviría una base de datos si no puedieramos consultarla. Es además la operación que efectuaremos con mayor frecuencia.
Para consultar la información SQL pone a nuestra disposición la sentencia SELECT.
[arriba]
La sentencia SELECT
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.
El formato de la sentencia select es:
SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}] FROM <nombre_tabla>|<nombre_vista> [{,<nombre_tabla>|<nombre_vista>}] [WHERE <condicion> [{ AND|OR <condicion>}]] [GROUP BY <nombre_campo> [{,<nombre_campo >}]] [HAVING <condicion>[{ AND|OR <condicion>}]] [ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC] [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]
|
Veamos por partes que quiere decir cada una de las partes que conforman la sentecia.
|
|
Significado |
|
SELECT |
Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección. |
|
ALL |
Indica que queremos seleccionar todos los valores.Es el valor por defecto y no suele especificarse casi nunca. |
|
DISTINCT |
Indica que queremos seleccionar sólo los valores distintos. |
|
FROM |
Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el caso de que exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condición de combinación a través de una cláusula WHERE. |
|
WHERE |
Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Admite los operadores lógicos AND y OR. |
| GROUP BY |
Especifica la agrupación que se da a los datos. Se usa siempre en combinación con funciones agregadas. |
| HAVING |
Especifica una condición que debe cumplirse para los datosEspecifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condicion debe estar referida a los campos contenidos en ella. |
| ORDER BY |
Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC. |
Para formular una consulta a la tabla tCoches (creada en el capítulo de tablas) y recuperar los campos matricula, marca, modelo, color, numero_kilometros, num_plazas debemos ejecutar la siguiente consulta. Los datos seran devueltos ordenados por marca y por modelo en orden ascendente, de menor a mayor.
SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM tCoches ORDER BY marca,modelo;
|
La palabra clave FROM indica que los datos serán recuperados de la tabla tCoches. Podriamos haber especificado mas de una tabla, pero esto se verá en el apartado de consultas combinadas.
Tambien podríamos haber simplicado la consulta a través del uso del comodin de campos, el asterisco "*".
SELECT * FROM tCoches ORDER BY marca,modelo;
|
El uso del asterisco indica que queremos que la consulta devuelva todos los campos que existen en la tabla.
[arriba]
La cláusula WHERE
La cláusula WHERE es la instrucción que nos permite filtrar el resultado de una sentencia SELECT. Habitualmente no deseamos obtener toda la información existente en la tabla, sino que queremos obtener sólo la información que nos resulte util es ese momento. La cláusula WHERE filtra los datos antes de ser devueltos por la consulta.
En nuestro ejemplo, si queremos consultar un coche en concreto debemos agregar una cláusula WHERE. Esta cláusula especifica una o varias condiciones que deben cumplirse para que la sentencia SELECT devuelva los datos. Por ejemplo, para que la consulta devuelva sólo los datos del coche con maricula M-1525-ZA debemos ejecutar la siguiente sentencia:
SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM tCoches WHERE matricula = 'M-1525-ZA';
Cuando en una cláusula where queremos incluir un tipo texto, debemos incluir el valor entre comillas simples.
|
Además, podemos utilizar tantas condiciones como queramos, utilizando los operadores lógicos AND y OR . El siguiente ejemplo muestra una consulta que devolverá los coches cuyas matriculas sean M-1525-ZA o bien M-2566-AA.
SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM tCoches WHERE matricula = 'M-1525-ZA' OR matricula = 'M-2566-AA' ; |
Además una condición WHERE puede ser negada a través del operador lógico NOT. La siguiente consulta devolverá todos los datos de la tabla tCohes menos el que tenga matricula M-1525-ZA.
SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM tCoches WHERE NOT matricula = 'M-1525-ZA' ; |
Podemos tambien obtener las diferentes marcas y modelos de coches ejecutando la consulta.
SELECT DISTINCT marca, modelo FROM tCoches; |
La ver los valores distintos. En el caso anterior se devolveran lpalabra clave DISTINCT indica que sólo queremos os valores distintos del par formado por los campos marca y modelo.
[arriba]
La cláusula ORDER BY
Como ya hemos visto en los ejemplos anteriores podemos especificar el orden en el que serán devueltos los datos a través de la cláusula ORDER BY.
SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM tCoches ORDER BY marca ASC,modelo DESC;
|
Como podemos ver en el ejemplo podemos especificar la ordenación ascendente o descendente a través de las palabras clave ASC y DESC. La ordenación depende del tipo de datos que este definido en la columna, de forma que un campo númerico será ordenado como tal, y un alfanúmerico se ordenará de la A a la Z, aunque su contenido sea númerico. De esta forma el valor 100 se devuelve antes que el 11.
También podemos especificar el en la cláusula ORDER BY el índice númerico del campo dentro del la sentencia SELECT para la ordenación, el siguiente ejemplo ordenaría los datos por el campo marca, ya que aparece en segundo lugar dentro de la lista de campos que componen la SELECT.
SELECT matricula, marca, modelo, color, numero_kilometros, num_plazas FROM tCoches ORDER BY 2;
|
El resto de opciones que podemos especificar al construir sentencias SELECT se irán presentando en los siguientes capitulos de este tutorial.
[arriba]
|
| |
 |
COMO SE HACE LA INSERCIÓN DE U...
por
COMO SE HACE LA INSERCIÓN DE UN CAMPO
Respuesta recibida el [25/05/2007 10:25:46]
|
 |
COMO SE HACE LA INSERCIÓN DE UN CAMPO
|
| |
 |
Que padre
por
Betho
Respuesta recibida el [13/06/2007 02:42:23]
|
 |
Con respecto a SQL creo que esta muy bien su trabajao puesto que esta muy bien explicado Pero quisiera saber mas de C#.NET
|
| |
 |
Joder!¿Te parece malo o corto ...
por
Anónimo
Respuesta recibida el [14/06/2007 02:05:40]
|
 |
Joder!¿Te parece malo o corto el tutorial de c#?
|
| |
 |
Como???
por
Guanxupi
Respuesta recibida el [21/08/2007 05:02:23]
|
 |
Como se introducen los datos????
|
| |
 |
Gracias, Peicion
por
JcCortez
Respuesta recibida el [18/09/2007 01:13:22]
|
 |
Me parece fantastico el tutorial y el sitio , me podrias enviar por correo los tutoriales de T-SQL, SQL, Oracle e introduccion a las bases de datos, Gracias
|
| |
 |
correo peticion anterioir
por
JcCortez
Respuesta recibida el [18/09/2007 01:14:49]
|
 |
mi correo es jccortez@cafegitane.com o jccortezp@hotmail.com Gracias
|
| |
 |
ERROR EN LA SENTENCIA INTERSECT
por
JAIME CASTELLANOS
Respuesta recibida el [01/10/2007 04:05:52]
|
 |
TENGO DOS TABLAS CLIENTESMEXICO Y CLIENTESESPAÑA AMBAS TIENE UN CAMPO EN COMUN NOMBRE COMO PUEDO APLICAR LA INTERSECCION (ALGEBRA RELACIONAL EN ESTE EJEMPLO); HICE: SELECT NOMBRE FROM EMPLEADOSMEXICO INTERSECT SELECT NOMBRE FROM EMPLEADOSESPAÑA; PERO ME MARCA UN ERROR DICE QUE ESTA MAL LA INSTRUCCION SELECT ME PODRIAN AYUDAR GRACIAS
|
| |
 |
sentencia intersec para JAIME CATELLANOS
por
alfonso perez
Respuesta recibida el [15/03/2008 12:32:41]
|
 |
MIRA JAIME PARA CRUZAR LA TABLA SOLO PON ESTO
SELECT * FROM clientesmexico a, clientesespana b WHERE a.nombre=b.nombre
|
| |
 |
SI NO QUEDA ASI, PONLO ASI JAI...
por
alfonso perez
Respuesta recibida el [15/03/2008 12:35:19]
|
 |
SI NO QUEDA ASI, PONLO ASI JAIME CASTELLANOS
SELECT a.* FROM clientesmexico a, clientesespana b WHERE a.nombre=b.nombre
|
| |
 |
Es muy pobre
por
Hacker.eddy
Respuesta recibida el [17/03/2008 02:47:27]
|
 |
Este tutorial es pura bla,bla, porque no pones ejemplos definidos ya. no teoria. porque este tutorial esta hecho para novatos, voy a hackear su pagina con inyecciones sql ok.
|
| |
 |
ayuda en una consulta
por
zulma
Respuesta recibida el [17/03/2008 03:18:23]
|
 |
quiero hacer una consulta de 4 campos en programa esta php la BD en fox, no he podido ayuda porfa // consulta SQL a la tabla "items" que se encuentra en la base de datos $sql="Select * from items";
|
| |
 |
no entendi el DISTINCT
por
zhadown
Respuesta recibida el [20/03/2008 10:46:53]
|
 |
que debuelve esta sentencia los balores no repetidos? o las combinaciones de ambos no repetidos? en tu ejemplo traera marcas y modelos que no se repitan??
|
| |
 |
quizas con join
por
david
Respuesta recibida el [03/04/2008 02:44:18]
|
 |
Quizas debes usar el join, que es lo que yo ando buscando.
inyecciones sql, jajaja
por cierto, insultais mucho, como en muchos otros sitios.habra algo comun en todos estos que insultan?quizas el pais de nacimiento?....volvamos al tema.....
busca "join"
|
| |
 |
AYUDA PLIZ
por
ZHADOWN
Respuesta recibida el [09/04/2008 04:29:10]
|
 |
select crt.codigo_ejecutivo, to_char(cal.fecha_anterior, 'yyyy-mm'), 'NNN' as tipo, '' as cod_eje_sup from vsn_cdi_crt_a_act_tmp crt, vsn_cfg_cal_a_par cal where crt.codigo_ejecutivo not in (select tpe.codigo_ejecutivo from vsn_cdi_tpe_f_par_tmp tpe where tpe.year_month <> to_char(add_months(cal.fecha_anterior, -1), 'yyyy-mm'))); Q SIGNIFICA EL 'NNN' Y '' EN ESTA SENTENCIA ???
|
| |
 |
AYUDA PLIZ
por
ZHADOWN
Respuesta recibida el [09/04/2008 04:29:11]
|
 |
select crt.codigo_ejecutivo, to_char(cal.fecha_anterior, 'yyyy-mm'), 'NNN' as tipo, '' as cod_eje_sup from vsn_cdi_crt_a_act_tmp crt, vsn_cfg_cal_a_par cal where crt.codigo_ejecutivo not in (select tpe.codigo_ejecutivo from vsn_cdi_tpe_f_par_tmp tpe where tpe.year_month <> to_char(add_months(cal.fecha_anterior, -1), 'yyyy-mm'))); Q SIGNIFICA EL 'NNN' Y '' EN ESTA SENTENCIA ???
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Consultar datos. SELECT |
|
Autor:
Pedro Herrarte Sánchez |
|
Visitas:
52536 |
Fecha de publicación:
22/10/2005 |
Pedro Herrarte, es consultor tecnológico en nCapas Software(empresa de la que además es fundador), donde realiza tareas de consultoría, análisis y desarrollo.
Ha trabajado con muchas tecnologías ... SQL Server, T-SQL, ORACLE, PL/SQL, ASP.NET, ASP, CGI , C#, C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...
Es especialista en tecnologías .NET, entornos Web, y bases de datos, especialmente SQL Server y ORACLE.
Es fundador, diseñador y programador de www.devjoker.com. |
|
 |
| Encuesta |
|
¿Cual es tu lenguaje de programación favorito? |
|
|
|
|
|
|
|
|
 |