<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Maestros del Web &#187; Claudio Casares</title>
	<atom:link href="http://www.maestrosdelweb.com/author/claudio-casares/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maestrosdelweb.com</link>
	<description>Un espacio para los entusiastas del web</description>
	<pubDate>Fri, 05 Sep 2008 14:24:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Introducción a SQL</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql1/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql1/#comments</comments>
		<pubDate>Tue, 07 Sep 2004 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por el motor de base de datos de Microsoft Jet.


Introducci&#243;n
Consultas
      de Selecci&#243;n
Criterios
      de Selecci&#243;n
Agrupamiento
      de Registros y Funciones Agregadas
Consultas
      de [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por el motor de base de datos de Microsoft Jet.</span><span id="more-266"></span></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
<h3>1. Introducci&oacute;n</h3>
<p> El<br />
  lenguaje de consulta estructurado (<strong><strong>SQL</strong></strong>)<br />
  es un lenguaje de base de datos normalizado, utilizado por el motor de base<br />
  de datos de Microsoft Jet. <strong>SQL</strong><br />
  se utiliza para crear objetos QueryDef, como el argumento de origen del m&eacute;todo<br />
  OpenRecordSet y como la propiedad RecordSource del control de datos. Tambi&eacute;n<br />
  se puede utilizar con el m&eacute;todo Execute para crear y manipular directamente<br />
  las bases de datos Jet y crear consultas <strong>SQL</strong><br />
  de paso a trav&eacute;s para manipular bases de datos remotas cliente - servidor.
</p>
<h4>
  1.1. Componentes del SQL </h4>
<p>El<br />
  lenguaje <strong>SQL</strong> est&aacute; compuesto por comandos, cl&aacute;usulas, operadores<br />
  y funciones de agregado. Estos elementos se combinan en las instrucciones para<br />
  crear, actualizar y manipular las bases de datos. </p>
<h4>1.2<br />
  Comandos </h4>
<p>Existen<br />
  dos tipos de comandos <strong>SQL</strong>: </p>
<ul>
<li>Los<br />
    DLL que permiten crear y definir nuevas bases de datos, campos e &iacute;ndices.
  </li>
<li>
    Los DML que permiten generar consultas para ordenar, filtrar y extraer datos<br />
    de la base de datos. </li>
</ul>
<h4>
  Comandos DLL </h4>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=90%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr style="border-color:#F0F0F0">
<td>
              <strong>Comando<br />
              </strong></td>
<td>
              <strong>Descripci&oacute;n<br />
              </strong></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>CREATE</strong></td>
<td>Utilizado para crear nuevas tablas, campos<br />
            e &iacute;ndices</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>DROP</strong></td>
<td>Empleado para eliminar tablas e &iacute;ndices</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>ALTER</strong></td>
<td>Utilizado para modificar las tablas agregando<br />
            campos o cambiando la definici&oacute;n de los campos.</td>
</tr>
</table>
</td>
</tr>
</table>
<h4>Comandos DML</h4>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=90%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr>
<td style="border-color:#F0F0F0"><strong>Comando</strong></td>
<td style="border-color:#F0F0F0"><strong>Descripci&oacute;n</strong></td>
</tr>
<tr>
<td  style="border-color:#F0F0F0;width=10%"><strong>SELECT</strong></td>
<td  style="border-color:#F0F0F0;width=90%">Utilizado<br />
            para consultar registros de la base de datos que satisfagan un criterio<br />
            determinado</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>INSERT</strong></td>
<td style="border-color:#F0F0F0">Utilizado<br />
            para cargar lotes de datos en la base de datos en una &uacute;nica<br />
            operaci&oacute;n.</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>UPDATE</strong></td>
<td style="border-color:#F0F0F0">Utilizado<br />
            para modificar los valores de los campos y registros especificados</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>DELETE</strong></td>
<td style="border-color:#F0F0F0">Utilizado<br />
            para eliminar registros de una tabla de una base de datos</td>
</tr>
</table>
</td>
</tr>
</table>
<h4>   1.3 Cl&aacute;usulas</h4>
<p>
  Las cl&aacute;usulas son condiciones de modificaci&oacute;n utilizadas para<br />
  definir los datos que desea seleccionar o manipular.</p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=90%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr>
<td style="border-color:#F0F0F0"><strong>Comando</strong></td>
<td style="border-color:#F0F0F0"><strong>Descripci&oacute;n</strong></td>
</tr>
<tr>
<td  style="border-color:#F0F0F0;width=10%"><strong>FROM</strong></td>
<td  style="border-color:#F0F0F0;width=90%">Utilizada<br />
            para especificar la tabla de la cual se van a seleccionar los registros</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>WHERE</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para especificar las condiciones que deben reunir los registros que<br />
            se van a seleccionar</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>GROUP<br />
            BY</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para separar los registros seleccionados en grupos espec&iacute;ficos</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>HAVING</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para expresar la condici&oacute;n que debe satisfacer cada grupo</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>ORDER<br />
            BY</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para ordenar los registros seleccionados de acuerdo con un orden espec&iacute;fico</td>
</tr>
</table>
</td>
</tr>
</table>
<h4>1.4 Operadores L&oacute;gicos </h4>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=90%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr>
<td style="border-color:#F0F0F0"><strong>Operador</strong></td>
<td style="border-color:#F0F0F0"><strong>Uso</strong></td>
</tr>
<tr>
<td style="border-color:#F0F0F0;width=10%"><strong>AND</strong></td>
<td style="border-color:#F0F0F0;width=90%">Es<br />
            el &#8220;y&#8221; l&oacute;gico. Eval&uacute;a dos condiciones y devuelve un<br />
            valor de verdad s&oacute;lo si ambas son ciertas.</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>OR</strong></td>
<td style="border-color:#F0F0F0">Es<br />
            el &#8220;o&#8221; l&oacute;gico. Eval&uacute;a dos condiciones y devuelve un<br />
            valor de verdad si alguna de las dos es cierta.</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>NOT</strong></td>
<td style="border-color:#F0F0F0">Negaci&oacute;n<br />
            l&oacute;gica. Devuelve el valor contrario de la expresi&oacute;n.</td>
</tr>
</table>
</td>
</tr>
</table>
<h4>
  1.5<br />
  Operadores de Comparaci&oacute;n </h4>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=90%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr>
<td style="border-color:#F0F0F0"><strong>Operador</strong></td>
<td style="border-color:#F0F0F0"><strong>Uso</strong></td>
</tr>
<tr>
<td style="border-color:#F0F0F0;width=10%"><strong>&lt;</strong></td>
<td style="border-color:#F0F0F0;width=90%">Menor<br />
            que</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>&gt;</strong></td>
<td style="border-color:#F0F0F0">Mayor<br />
            que</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>&lt;&gt;</strong></td>
<td style="border-color:#F0F0F0">Distinto<br />
            de</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>&lt;=</strong></td>
<td style="border-color:#F0F0F0">Menor<br />
            &oacute; Igual que</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>&gt;=</strong></td>
<td style="border-color:#F0F0F0">Mayor<br />
            &oacute; Igual que</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>BETWEEN</strong></td>
<td style="border-color:#F0F0F0">Utilizado<br />
            para especificar un intervalo de valores.</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>LIKE</strong></td>
<td style="border-color:#F0F0F0">Utilizado<br />
            en la comparaci&oacute;n de un modelo</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>In</strong></td>
<td style="border-color:#F0F0F0">Utilizado<br />
            para especificar registros de una base de datos&nbsp; </td>
</tr>
</table>
</td>
</tr>
</table>
<h4>  1.6 Funciones de Agregado </h4>
<p>Las<br />
  funciones de agregado se usan dentro de una cl&aacute;usula <strong>SELECT</strong><br />
  en grupos de registros para devolver un &uacute;nico valor que se aplica a un<br />
  grupo de registros.</p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=90%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr>
<td style="border-color:#F0F0F0"><strong>Comando</strong></td>
<td style="border-color:#F0F0F0;center"><strong>Descripci&oacute;n</strong></td>
</tr>
<tr>
<td style="border-color:#F0F0F0;width=10%"><strong>AVG</strong></td>
<td style="border-color:#F0F0F0;width=90%">Utilizada<br />
            para calcular el promedio de los valores de un campo determinado&nbsp;</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>COUNT</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para devolver el n&uacute;mero de registros de la selecci&oacute;n&nbsp;</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>SUM</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para devolver la suma de todos los valores de un campo determinado&nbsp;</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>MAX</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para devolver el valor m&aacute;s alto de un campo especificado&nbsp;</td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>MIN</strong></td>
<td style="border-color:#F0F0F0">Utilizada<br />
            para devolver el valor m&aacute;s bajo de un campo especificado&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Siguiente capítulo: <a href="/editorial/tutsql2/">Consultas<br />
de Selecci&oacute;n</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Consultas de Selección</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql2/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql2/#comments</comments>
		<pubDate>Fri, 15 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset.
2. Consultas de Selecci&#243;n
 Las consultas de selecci&#243;n se utilizan para
    indicar al motor de [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros que se pueden almacenar en un objeto recordset.</span><span id="more-263"></span></p>
<h3>2. Consultas de Selecci&oacute;n</h3>
<p> Las consultas de selecci&oacute;n se utilizan para<br />
    indicar al motor de datos que devuelva informaci&oacute;n de las bases de<br />
    datos, esta informaci&oacute;n es devuelta en forma de conjunto de registros<br />
    que se pueden almacenar en un objeto recordset. Este conjunto de registros<br />
    es modificable. </p>
<h4>2.1 Consultas b&aacute;sicas </h4>
<p>La sintaxis b&aacute;sica de una consulta<br />
  de selecci&oacute;n es la siguiente: </p>
<div class="codigo">
<pre>SELECT Campos FROM Tabla; </pre>
</div>
<p>En donde campos es la lista de campos<br />
  que se deseen recuperar y tabla es el origen de los mismos, por ejemplo: </p>
<div class="codigo">
<pre>SELECT Nombre, Telefono FROM Clientes;</pre>
</div>
<p>Esta consulta devuelve un recordset con<br />
  el campo nombre y tel&eacute;fono de la tabla clientes. </p>
<h4>2.2 Ordenar los registros </h4>
<p>Adicionalmente se puede especificar el<br />
  orden en que se desean recuperar los registros de las tablas mediante la cla&uacute;sula<br />
  ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar.<br />
  Ejemplo: </p>
<div class="codigo">
<pre>SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY Nombre;</pre>
</div>
<p>Esta consulta devuelve los campos CodigoPostal,<br />
  Nombre, Telefono de la tabla Clientes ordenados por el campo Nombre. </p>
<p>Se pueden ordenar los registros por mas<br />
  de un campo, como por ejemplo: </p>
<div class="codigo">
<pre>SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY
CodigoPostal, Nombre;</pre>
</div>
<p>Incluso se puede especificar el orden<br />
  de los registros: ascendente mediante la cla&uacute;sula (<strong>ASC</strong> -se toma este valor por defecto) &oacute; descendente (<strong>DESC</strong>)  </p>
<div class="codigo">
<pre>SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY
CodigoPostal DESC , Nombre ASC;</pre>
</div>
<h4>2.3 Consultas con Predicado </h4>
<p>El predicado se incluye entre la cla&uacute;sula<br />
  y el primer nombre del campo a recuperar, los posibles predicados son:</p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=90%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="2" cellspacing="1" style="border-color:#666666;width=100%">
<tr>
<td style="border-color:#F0F0F0"><strong>Predicado</strong></td>
<td style="border-color:#F0F0F0"><strong>Descripci&oacute;n</strong></td>
</tr>
<tr>
<td style="border-color:#F0F0F0;width=10%"><strong>ALL</strong></td>
<td style="border-color:#F0F0F0;width=90%">Devuelve todos<br />
            los campos de la tabla </td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>TOP</strong></td>
<td style="border-color:#F0F0F0">Devuelve un determinado n&uacute;mero<br />
            de registros de la tabla </td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>DISTINCT</strong></td>
<td style="border-color:#F0F0F0">Omite los registros cuyos<br />
            campos seleccionados coincidan totalmente </td>
</tr>
<tr>
<td style="border-color:#F0F0F0"><strong>DISTINCROW</strong></td>
<td style="border-color:#F0F0F0">Omite los registros duplicados<br />
            basandose en la totalidad del registro y no s&oacute;lo en los campos<br />
            seleccionados. </td>
</tr>
</table>
</td>
</tr>
</table>
<p> <strong>ALL:</strong></p>
<p>Si no se incluye ninguno<br />
  de los predicados se asume<strong> ALL</strong>.<br />
  El Motor de base de datos selecciona todos los registros que cumplen las condiciones<br />
  de la instrucci&oacute;n SQL. No se conveniente abusar de este predicado ya<br />
  que obligamos al motor de la base de datos a analizar la estructura de la tabla<br />
  para averiguar los campos que contiene, es mucho m&aacute;s r&aacute;pido indicar<br />
  el listado de campos deseados. </p>
<div class="codigo">
<pre>SELECT ALL FROM Empleados;
SELECT * FROM Empleados;</pre>
</div>
<p> <strong>TOP:</strong></p>
<p> Devuelve un cierto n&uacute;mero de registros que entran entre al principio<br />
  o al final de un rango especificado por una cl&aacute;usula <strong>ORDER<br />
  BY</strong>. Supongamos que queremos recuperar los nombres de los 25<br />
  primeros estudiantes del curso 1994: </p>
<div class="codigo">
<pre>SELECT TOP 25 Nombre, Apellido FROM
Estudiantes
ORDER BY Nota DESC;</pre>
</div>
<p>Si no se incluye la cl&aacute;usula <strong>ORDER<br />
  BY</strong>, la consulta devolver&aacute; un conjunto arbitrario de 25<br />
  registros de la tabla Estudiantes .El predicado <strong>TOP</strong> no elige entre valores iguales. En el ejemplo anterior, si la nota media n&uacute;mero<br />
  25 y la 26 son iguales, la consulta devolver&aacute; 26 registros. Se puede<br />
  utilizar la palabra reservada <strong>PERCENT</strong> para devolver un cierto porcentaje de registros que caen al principio o al final<br />
  de un rango especificado por la cl&aacute;usula <strong>ORDER<br />
  BY</strong>. Supongamos que en lugar de los 25 primeros estudiantes deseamos<br />
  el 10 por ciento del curso: </p>
<div class="codigo">
<pre>SELECT TOP 10 PERCENT Nombre, Apellido
FROM Estudiantes
ORDER BY Nota DESC; </pre>
</div>
<p>El valor que va a continuaci&oacute;n<br />
  de TOP debe ser un Integer sin signo.TOP no afecta a la posible actualizaci&oacute;n<br />
  de la consulta. </p>
<p><strong>DISTINCT:</strong></p>
<p>Omite<br />
  los registros que contienen datos duplicados en los campos seleccionados. Para<br />
  que los valores de cada campo listado en la instrucci&oacute;n <strong>SELECT</strong> se incluyan en la consulta deben ser &uacute;nicos. </p>
<p>Por ejemplo, varios empleados listados<br />
  en la tabla Empleados pueden tener el mismo apellido. Si dos registros contienen<br />
  L&oacute;pez en el campo Apellido, la siguiente instrucci&oacute;n SQL devuelve<br />
  un &uacute;nico registro: </p>
<div class="codigo">
<pre>SELECT DISTINCT Apellido FROM Empleados;
    </pre>
</div>
<p>Con otras palabras el predicado <strong>DISTINCT</strong> devuelve aquellos registros cuyos campos indicados en la cl&aacute;usula <strong>SELECT</strong><br />
  posean un contenido diferente. El resultado de una consulta que utiliza <strong>DISTINCT</strong><br />
  no es actualizable y no refleja los cambios subsiguientes realizados por otros<br />
  usuarios. </p>
<p><strong>DISTINCTROW:</strong></p>
<p>Devuelve los registros diferentes<br />
  de una tabla; a diferencia del predicado anterior que s&oacute;lo se fijaba<br />
  en el contenido de los campos seleccionados, &eacute;ste lo hace en el contenido<br />
  del registro completo independientemente de los campo indicados en la cl&aacute;usula <strong>SELECT</strong>.  </p>
<div class="codigo">
<pre>SELECT DISTINCTROW Apellido FROM Empleados;</pre>
</div>
<p>Si la tabla empleados contiene dos registros:<br />
  Antonio L&oacute;pez y Marta L&oacute;pez el ejemplo del predicado <strong>DISTINCT</strong> devuleve un &uacute;nico registro con el valor L&oacute;pez en el campo Apellido<br />
  ya que busca no duplicados en dicho campo. Este &uacute;ltimo ejemplo devuelve<br />
  dos registros con el valor L&oacute;pez en el apellido ya que se buscan no duplicados<br />
  en el registro completo.
</p>
<h4>2.4 Alias </h4>
<p>En determinadas circunstancias es necesario<br />
  asignar un nombre a alguna columna determinada de un conjunto devuelto, otras<br />
  veces por simple capricho o por otras circunstancias. Para resolver todas ellas<br />
  tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos<br />
  a la columna deseada. Tomado como referencia el ejemplo anterior podemos hacer<br />
  que la columna devuelta por la consulta, en lugar de llamarse apellido (igual<br />
  que el campo devuelto) se llame Empleado. En este caso proceder&iacute;amos<br />
  de la siguiente forma: </p>
<div class="codigo">
<pre>SELECT DISTINCTROW Apellido AS Empleado
FROM Empleados;</pre>
</div>
<h4>2.5 Recuperar Informaci&oacute;n de una<br />
  base de Datos Externa </h4>
<p>Para concluir este cap&iacute;tulo se<br />
  debe hacer referencia a la recuperaci&oacute;n de registros de bases de datos<br />
  externa. Es ocasiones es necesario la recuperaci&oacute;n de informaci&oacute;n<br />
  que se encuentra contenida en una tabla que no se encuentra en la base de datos<br />
  que ejecutar&aacute; la consulta o que en ese momento no se encuentra abierta,<br />
  esta situaci&oacute;n la podemos salvar con la palabra reservada IN de la siguiente<br />
  forma: </p>
<div class="codigo">
<pre>SELECT DISTINCTROW Apellido AS Empleado
FROM Empleados
IN 'c:\databases\gestion.mdb';</pre>
</div>
<p>En donde c:\databases\gestion.mdb es la<br />
base de datos que contiene la tabla Empleados.</p>
<p>Siguiente capítulo: <a href="/editorial/tutsql3/">Criterios<br />
de Selecci&oacute;n</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Criterios de Selección</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql3/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql3/#comments</comments>
		<pubDate>Thu, 14 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[A lo largo de este capítulo se estudiarán las posibilidades de filtrar los registros con el fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas.
3. Criterios de Selecci&#243;n
 En el cap&#237;tulo anterior se vio la forma de recuperar
    los registros de las tablas, las formas empleadas devolv&#237;an todos los
   [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">A lo largo de este capítulo se estudiarán las posibilidades de filtrar los registros con el fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas.</span><span id="more-262"></span></p>
<h3>3. Criterios de Selecci&oacute;n</h3>
<p> En el cap&iacute;tulo anterior se vio la forma de recuperar<br />
    los registros de las tablas, las formas empleadas devolv&iacute;an todos los<br />
    registros de la mencionada tabla. A lo largo de este cap&iacute;tulo se estudiar&aacute;n<br />
    las posibilidades de filtrar los registros con el fin de recuperar solamente<br />
    aquellos que cumplan unas condiciones preestablecidas. </p>
<p> Antes de comenzar el desarrollo de este cap&iacute;tulo<br />
    hay que recalcar tres detalles de vital importancia. El primero de ellos es<br />
    que cada vez que se desee establecer una condici&oacute;n referida a un campo<br />
    de texto la condici&oacute;n de b&uacute;squeda debe ir encerrada entre comillas<br />
    simples; la segunda es que no se posible establecer condiciones de b&uacute;squeda<br />
    en los campos memo y; la tercera y &uacute;ltima hace referencia a las fechas.<br />
    Las fechas se deben escribir siempre en formato mm-dd-aa en donde mm representa<br />
    el mes, dd el d&iacute;a y aa el a&ntilde;o, hay que prestar atenci&oacute;n<br />
    a los separadores -no sirve la separaci&oacute;n habitual de la barra (/),<br />
    hay que utilizar el gui&oacute;n (-) y adem&aacute;s la fecha debe ir encerrada<br />
    entre almohadillas (#). Por ejemplo si deseamos referirnos al d&iacute;a 3<br />
    de Septiembre de 1995 deberemos hacerlo de la siguiente forma; #09-03-95#<br />
    &oacute; #9-3-95#. </p>
<h3>3.1<br />
  Operadores L&oacute;gicos </h3>
<p>Los operadores l&oacute;gicos soportados<br />
  por <strong>SQL</strong> son:<strong><br />
  AND</strong>,<strong><br />
  OR, XOR</strong>,<strong><br />
  Eqv</strong>,<strong><br />
  Imp</strong>,<strong><br />
  Is </strong>y<strong> Not</strong>. A excepci&oacute;n<br />
  de los dos &uacute;ltimos todos poseen la siguiente sintaxis: </p>
<p> <strong>&lt;expresi&oacute;n1&gt; operador<br />
  &lt;expresi&oacute;n2&gt; </strong></p>
<p>En donde <strong>expresi&oacute;n1</strong><br />
  y <strong>expresi&oacute;n2</strong> son las condiciones<br />
  a evaluar, el resultado de la operaci&oacute;n var&iacute;a en funci&oacute;n<br />
  del operador l&oacute;gico. La tabla adjunta muestra los diferentes posibles<br />
  resultados:</p>
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr style="border-color:#F0F0F0">
<td><strong>&lt;expresi&oacute;n1&gt;</strong></td>
<td>
              <strong>Operador</strong>
            </td>
<td>
              <strong>&lt;expresi&oacute;n2&gt;</strong>
            </td>
<td>
              <strong>Resultado</strong>
            </td>
</tr>
<tr style="border-color:#F0F0F0">
<td>
              Verdad </td>
<td>
              <strong>AND</strong>
            </td>
<td>
              Falso </td>
<td>
              Falso </td>
</tr>
<tr style="border-color:#F0F0F0">
<td>
              Verdad </td>
<td><strong>AND</strong>
            </td>
<td>
              Verdad </td>
<td>
              Verdad </td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>AND</strong></td>
<td>Verdad</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>AND</strong></td>
<td>Falso</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>OR</strong></td>
<td>Falso</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>OR</strong></td>
<td>Verdad</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>OR</strong></td>
<td>Verdad</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>OR</strong></td>
<td>Falso</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>XOR</strong></td>
<td>Verdad</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>XOR</strong></td>
<td>Falso</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>XOR</strong></td>
<td>Verdad</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>XOR</strong></td>
<td>Falso</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>Eqv</strong></td>
<td>Verdad</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>Eqv</strong></td>
<td>Falso</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>Eqv</strong></td>
<td>Verdad</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>Eqv</strong></td>
<td>Falso</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>Imp</strong></td>
<td>Verdad</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>Imp</strong></td>
<td>Falso</td>
<td>Falso</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Verdad</td>
<td><strong>Imp</strong></td>
<td>Null</td>
<td>Null</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>Imp</strong></td>
<td>Verdad</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>Imp</strong></td>
<td>Falso</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Falso</td>
<td><strong>Imp</strong></td>
<td>Null</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Null</td>
<td><strong>Imp</strong></td>
<td>Verdad</td>
<td>Verdad</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Null</td>
<td><strong>Imp</strong></td>
<td>Falso</td>
<td>Null</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Null</td>
<td style="border-color:#F0F0F0"><strong>Imp</strong></td>
<td>Null</td>
<td>Null</td>
</tr>
</table>
</td>
</tr>
</table>
<p> Si a cualquiera de las anteriores condiciones<br />
  le anteponemos el operador <strong>NOT</strong> el resultado de la operaci&oacute;n ser&aacute; el contrario al devuelto sin<br />
  el operador <strong>NOT</strong>.</p>
<p> El &uacute;ltimo operador denominado <strong>Is</strong> se emplea para comparar dos variables de tipo objeto<strong> &lt;Objeto1&gt; Is &lt;Objeto2&gt;</strong>. Este operador devuelve verdad<br />
  si los dos objetos son iguales. </p>
<div class="codigo">
<pre>SELECT * FROM Empleados WHERE Edad &gt;
25 AND Edad &lt; 50;
SELECT * FROM Empleados WHERE (Edad &gt; 25 AND Edad &lt; 50) OR Sueldo
= 100;
SELECT * FROM Empleados WHERE NOT Estado = 'Soltero';
SELECT * FROM Empleados WHERE (Sueldo &gt; 100 AND Sueldo &lt; 500) OR
(Provincia = 'Madrid' AND Estado = 'Casado');</pre>
</div>
<h3>3.2 Intervalos de Valores </h3>
<p>Para indicar que deseamos recuperar los<br />
  registros seg&uacute;n el intervalo de valores de un campo emplearemos el operador<strong><br />
  Between</strong> cuya sintaxis es: </p>
<p><strong> (campo<br />
  [Not] Between valor1 And valor2 (la condici&oacute;n Not es opcional)</strong></p>
<p>En este caso la consulta devolver&iacute;a<br />
  los registros que contengan en <strong>&quot;campo&quot;</strong><br />
  un valor incluido en el intervalo <strong>valor1, valor2</strong> (ambos inclusive). Si anteponemos la condici&oacute;n<strong><br />
  Not </strong>devolver&aacute; aquellos valores no incluidos en el intervalo. </p>
<div class="codigo">
<pre>SELECT * FROM Pedidos WHERE CodPostal Between 28000 And 28999;
(Devuelve los pedidos realizados en la provincia de Madrid) 

SELECT IIf(CodPostal Between 28000 And 28999, 'Provincial', 'Nacional') FROM Editores;
(Devuelve el valor 'Provincial' si el código postal se encuentra en el intervalo,
'Nacional' en caso contrario)</pre>
</div>
<h3>3.3 El Operador Like </h3>
<p>Se<br />
  utiliza para comparar una expresi&oacute;n de cadena con un modelo en una expresi&oacute;n<br />
  SQL. Su sintaxis es: </p>
<p><strong>expresi&oacute;n<br />
  Like modelo</strong></p>
<p>En donde <strong>expresi&oacute;n</strong> es una cadena modelo o campo contra el que se compara expresi&oacute;n. Se puede<br />
  utilizar el operador<strong> Like</strong> para<br />
  encontrar valores en los campos que coincidan con el modelo especificado. Por<br />
  modelo puede especificar un valor completo (Ana Mar&iacute;a), o se pueden utilizar<br />
  caracteres comod&iacute;n como los reconocidos por el sistema operativo para<br />
  encontrar un rango de valores (Like An*). </p>
<p>El operador <strong>Like</strong> se puede utilizar en una expresi&oacute;n para comparar un valor de un campo<br />
  con una expresi&oacute;n de cadena. Por ejemplo, si introduce <strong>Like<br />
  C*</strong> en una consulta <strong>SQL</strong>,<br />
  la consulta devuelve todos los valores de campo que comiencen por la letra C.<br />
  En una consulta con par&aacute;metros, puede hacer que el usuario escriba el<br />
  modelo que se va a utilizar. </p>
<p>El<br />
  ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de<br />
  cualquier letra entre A y F y de tres d&iacute;gitos: </p>
<p> <strong>Like &#8216;P[A-F]###&#8217;</strong></p>
<p>Este<br />
  ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la<br />
  D seguidas de cualquier cadena. </p>
<p> <strong>Like &#8216;[A-D]*&#8217;</strong></p>
<p>En la tabla siguiente se muestra c&oacute;mo<br />
  utilizar el operador <strong>Like </strong>para<br />
  comprobar expresiones con diferentes modelos. </p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=98%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr style="border-color:#F0F0F0">
<td><strong>Tipo<br />
              de coincidencia</strong></td>
<td> <strong>Modelo<br />
              Planteado</strong></td>
<td> <strong>Coincide</strong></td>
<td><strong>No<br />
              Coincide</strong></td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Varios caracteres</td>
<td>&#8216;a*a&#8217;</td>
<td>&#8216;aa&#8217;, &#8216;aBa&#8217;, &#8216;aBBBa&#8217;</td>
<td>&#8216;aBC&#8217;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Car&aacute;cter especial</td>
<td>&nbsp;&#8217;a[*]a&#8217;</td>
<td>&#8216;a*a&#8217;</td>
<td>&#8216;aaa&#8217;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Varios caracteres</td>
<td>&#8216;ab*&#8217;</td>
<td>&#8216;abcdefg&#8217;, &#8216;abc&#8217;</td>
<td>&#8216;cab&#8217;, &#8216;aab&#8217;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Un solo car&aacute;cter</td>
<td>&#8216;a?a&#8217;</td>
<td>&#8216;aaa&#8217;, &#8216;a3a&#8217;, &#8216;aBa&#8217;</td>
<td>&#8216;aBBBa&#8217;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Un solo d&iacute;gito</td>
<td>&#8216;a#a&#8217;</td>
<td>&#8216;a0a&#8217;, &#8216;a1a&#8217;, &#8216;a2a&#8217;</td>
<td>&#8216;aaa&#8217;, &#8216;a10a&#8217;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Rango de caracteres</td>
<td>&#8216;[a-z]&#8216;</td>
<td>&#8216;f&#8217;, &#8216;p&#8217;, &#8216;j&#8217;</td>
<td>&#8216;2&#8242;, &#8216;&amp;&#8217;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Fuera de un rango</td>
<td>&#8216;[!a-z]&#8216;</td>
<td>&#8216;9&#8242;, &#8216;&amp;&#8217;, &#8216;%&#8217;</td>
<td>&#8216;b&#8217;, &#8216;a&#8217;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Distinto de un d&iacute;gito</td>
<td>&#8216;[!0-9]&#8216;</td>
<td>&#8216;A&#8217;, &#8216;a&#8217;, &#8216;&amp;&#8217;, &#8216;~&#8217;</td>
<td>&#8216;0&#8242;, &#8216;1&#8242;, &#8216;9&#8242;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Combinada</td>
<td>&#8216;a[!b-m]#&#8217;</td>
<td>&#8216;An9&#8242;, &#8216;az0&#8242;, &#8216;a99&#8242;</td>
<td>&#8216;abc&#8217;, &#8216;aj0&#8242;</td>
</tr>
</table>
</td>
</tr>
</table>
<h3>3.4 El Operador In </h3>
<p>Este operador devuelve aquellos registros<br />
  cuyo campo indicado coincide con alguno de los indicados en una lista. Su sintaxis<br />
  es: </p>
<p> <strong>expresi&oacute;n<br />
  [Not] In(valor1, valor2, . . .)</strong></p>
<div class="codigo">
<pre>
SELECT * FROM Pedidos WHERE Provincia
In ('Madrid', 'Barcelona', 'Sevilla');</pre>
</div>
<h3>3.5 La cl&aacute;usula WHERE </h3>
<p> La cl&aacute;usula <strong>WHERE</strong> puede usarse para determinar qu&eacute; registros de las tablas enumeradas en<br />
  la cl&aacute;usula <strong>FROM</strong> aparecer&aacute;n<br />
  en los resultados de la instrucci&oacute;n <strong>SELECT</strong>.<br />
  Despu&eacute;s de escribir esta cl&aacute;usula se deben especificar las condiciones<br />
  expuestas en los apartados 3.1 y 3.2. Si no se emplea esta cl&aacute;usula,<br />
  la consulta devolver&aacute; todas las filas de la tabla. <strong>WHERE</strong> es opcional, pero cuando aparece debe ir a continuaci&oacute;n de <strong>FROM</strong>.  </p>
<div class="codigo">
<pre>SELECT Apellidos, Salario FROM Empleados
WHERE Salario &gt; 21000;
SELECT Id_Producto, Existencias FROM Productos
WHERE Existencias &lt;= Nuevo_Pedido;
SELECT * FROM Pedidos WHERE Fecha_Envio = #5/10/94#;
SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos = 'King';
SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos Like 'S*';
SELECT Apellidos, Salario FROM Empleados WHERE Salario Between 200 And
300;
SELECT Apellidos, Salario FROM Empl WHERE Apellidos Between 'Lon' And
'Tol';
SELECT Id_Pedido, Fecha_Pedido FROM Pedidos WHERE Fecha_Pedido
Between #1-1-94# And #30-6-94#;
SELECT Apellidos, Nombre, Ciudad FROM Empleados WHERE Ciudad
In ('Sevilla', 'Los Angeles', 'Barcelona');</pre>
<p>&nbsp;</p>
</div>
<p> Siguiente capítulo: <a href="/editorial/tutsql4/">Agrupamiento<br />
                  de Registros y Funciones Agregadas</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Agrupamiento de Registros</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql4/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql4/#comments</comments>
		<pubDate>Wed, 13 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aprenderemos a combinar los registros con valores idénticos, en la lista de campos especificados, en un único registro.
4. Agrupamiento de Registros
4.1 GROUP BY 
 Combina los registros con valores id&#233;nticos,
  en la lista de campos especificados, en un &#250;nico registro. Para cada
  registro se crea un valor sumario si se incluye una funci&#243;n [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Aprenderemos a combinar los registros con valores idénticos, en la lista de campos especificados, en un único registro.</span><span id="more-260"></span></p>
<h3>4. Agrupamiento de Registros</h3>
<h4>4.1 GROUP BY </h4>
<p> Combina los registros con valores id&eacute;nticos,<br />
  en la lista de campos especificados, en un &uacute;nico registro. Para cada<br />
  registro se crea un valor sumario si se incluye una funci&oacute;n SQL agregada,<br />
  como por ejemplo Sum o Count, en la instrucci&oacute;n <strong>SELECT</strong>.<br />
  Su sintaxis es: </p>
<div class="codigo">
<pre>SELECT campos FROM tabla WHERE criterio
 GROUP BY campos del grupo
</pre>
</div>
<p><strong>GROUP BY</strong> es opcional. Los valores de resumen se omiten si no existe una funci&oacute;n <strong>SQL</strong> agregada en la instrucci&oacute;n <strong>SELECT</strong>. Los valores <strong>Null</strong><br />
  en los campos <strong>GROUP BY</strong> se agrupan<br />
  y no se omiten. No obstante, los valores <strong>Null</strong> no se eval&uacute;an en ninguna de las funciones <strong>SQL</strong><br />
  agregadas. </p>
<p>Se utiliza la cl&aacute;usula <strong>WHERE</strong> para excluir aquellas filas que no desea agrupar, y la cl&aacute;usula <strong>HAVING<br />
  </strong>para filtrar los registros una vez agrupados. </p>
<p>A menos que contenga un dato Memo u Objeto<br />
  OLE , un campo de la lista de campos <strong>GROUP BY</strong> puede referirse a cualquier campo de las tablas que aparecen en la cl&aacute;usula <strong>FROM</strong>, incluso si el campo no<br />
  esta incluido en la instrucci&oacute;n<strong> SELECT</strong>,<br />
  siempre y cuando la instrucci&oacute;n <strong>SELECT</strong> incluya al menos una funci&oacute;n <strong>SQL</strong><br />
  agregada. </p>
<p>Todos los campos de la lista de campos<br />
  de <strong>SELECT</strong> deben o bien incluirse<br />
  en la cl&aacute;usula <strong>GROUP BY</strong> o como argumentos de una funci&oacute;n <strong>SQL</strong><br />
  agregada. </p>
<div class="codigo">
<pre>SELECT Id_Familia, Sum(Stock) FROM
Productos GROUP BY Id_Familia;</pre>
</div>
<p>Una vez que <strong>GROUP<br />
  BY</strong> ha combinado los registros, <strong>HAVING</strong> muestra cualquier registro agrupado por la cl&aacute;usula <strong>GROUP<br />
  BY</strong> que satisfaga las condiciones de la cl&aacute;usula <strong>HAVING</strong>.
</p>
<p><strong>HAVING</strong><br />
  es similar a <strong>WHERE</strong>, determina<br />
  qu&eacute; registros se seleccionan. Una vez que los registros se han agrupado<br />
  utilizando <strong>GROUP BY</strong>, <strong>HAVING</strong><br />
  determina cuales de ellos se van a mostrar. </p>
<div class="codigo">
<pre>SELECT Id_Familia Sum(Stock) FROM Productos
GROUP BY Id_Familia
HAVING Sum(Stock) > 100 AND NombreProducto Like BOS*;</pre>
</div>
<h4>4.2 AVG </h4>
<p>Calcula<br />
  la media aritm&eacute;tica de un conjunto de valores contenidos en un campo<br />
  especificado de una consulta. Su sintaxis es la siguiente </p>
<p><strong>Avg(expr)</strong></p>
<p>En donde <strong>expr</strong> representa el campo que contiene los datos num&eacute;ricos para los que se<br />
  desea calcular la media o una expresi&oacute;n que realiza un c&aacute;lculo<br />
  utilizando los datos de dicho campo. La media calculada por <strong>Avg</strong> es la media aritm&eacute;tica (la suma de los valores dividido por el n&uacute;mero<br />
  de valores). La funci&oacute;n <strong>Avg</strong> no incluye ning&uacute;n campo <strong>Null</strong> en el c&aacute;lculo. </p>
<div class="codigo">
<pre>SELECT Avg(Gastos) AS Promedio FROM
Pedidos WHERE Gastos &gt; 100;</pre>
</div>
<h4>4.3 Count </h4>
<p>Calcula<br />
  el n&uacute;mero de registros devueltos por una consulta. Su sintaxis es la<br />
  siguiente </p>
<p> <strong>Count(expr)</strong></p>
<p>En donde <strong>expr</strong><br />
  contiene el nombre del campo que desea contar. Los operandos de <strong>expr</strong> pueden incluir el nombre de un campo de una tabla, una constante o una funci&oacute;n<br />
  (la cual puede ser intr&iacute;nseca o definida por el usuario pero no otras<br />
  de las funciones agregadas de <strong>SQL</strong>).<br />
  Puede contar cualquier tipo de datos incluso texto. </p>
<p>Aunque <strong>expr<br />
  </strong>puede realizar un c&aacute;lculo sobre un campo, <strong>Count</strong> simplemente cuenta el n&uacute;mero de registros sin tener en cuenta qu&eacute;<br />
  valores se almacenan en los registros. La funci&oacute;n <strong>Count</strong><br />
  no cuenta los registros que tienen campos null a menos que <strong>expr</strong> sea el car&aacute;cter comod&iacute;n asterisco <strong>(*)</strong>.<br />
  Si utiliza un asterisco, <strong>Count</strong> calcula el n&uacute;mero total de registros, incluyendo aquellos que contienen<br />
  campos null. <strong>Count(*)</strong> es considerablemente<br />
  m&aacute;s r&aacute;pida que <strong>Count(Campo)</strong>.<br />
  No se debe poner el asterisco entre dobles comillas <strong>(&#8217;*')</strong>.  </p>
<div class="codigo">
<pre>SELECT Count(*) AS Total FROM Pedidos;</pre>
</div>
<p>Si <strong>expr</strong><br />
  identifica a m&uacute;ltiples campos, la funci&oacute;n <strong>Count</strong> cuenta un registro s&oacute;lo si al menos uno de los campos no es <strong>Null</strong>.<br />
  Si todos los campos especificados son <strong>Null</strong>,<br />
  no se cuenta el registro. Hay que separar los nombres de los campos con ampersand<strong> (&amp;)</strong>. </p>
<div class="codigo">
<pre>SELECT Count(FechaEnv&iacute;o &amp; Transporte) AS Total FROM Pedidos;</pre>
</div>
<h4>4.4 Max, Min </h4>
<p>Devuelven<br />
  el m&iacute;nimo o el m&aacute;ximo de un conjunto de valores contenidos en<br />
  un campo especifico de una consulta. Su sintaxis es: </p>
<p>
  <strong>Min(expr)</strong></p>
<p><strong> Max(expr)</strong></p>
<p>En donde <strong>expr</strong> es el campo sobre el que se desea realizar el c&aacute;lculo. <strong>Expr</strong> pueden incluir el nombre de un campo de una tabla, una constante o una funci&oacute;n<br />
  (la cual puede ser intr&iacute;nseca o definida por el usuario pero no otras<br />
  de las funciones agregadas de <strong>SQL</strong>).  </p>
<div class="codigo">
<pre>SELECT Min(Gastos) AS ElMin FROM Pedidos
WHERE Pais = 'España';
SELECT Max(Gastos) AS ElMax FROM Pedidos WHERE Pais = 'España';</pre>
</div>
<h4>4.5 StDev, StDevP </h4>
<p>Devuelve<br />
  estimaciones de la desviaci&oacute;n est&aacute;ndar para la poblaci&oacute;n<br />
  (el total de los registros de la tabla) o una muestra de la poblaci&oacute;n<br />
  representada (muestra aleatoria) . Su sintaxis es: </p>
<p> <strong>StDev(expr)</strong></p>
<p><strong> StDevP(expr)</strong></p>
<p>En donde<strong><br />
  expr</strong> representa el nombre del campo que contiene los datos que<br />
  desean evaluarse o una expresi&oacute;n que realiza un c&aacute;lculo utilizando<br />
  los datos de dichos campos. Los operandos de <strong>expr</strong> pueden incluir el nombre de un campo de una tabla, una constante o una funci&oacute;n<br />
  (la cual puede ser intr&iacute;nseca o definida por el usuario pero no otras<br />
  de las funciones agregadas de<strong> SQL</strong>)
</p>
<p><strong>StDevP</strong> eval&uacute;a una poblaci&oacute;n, y <strong>StDev </strong>eval&uacute;a<br />
  una muestra de la poblaci&oacute;n. Si la consulta contiene menos de dos registros<br />
  (o ning&uacute;n registro para <strong>StDevP</strong>),<br />
  estas funciones devuelven un valor <strong>Null </strong>(el<br />
  cual indica que la desviaci&oacute;n est&aacute;ndar no puede calcularse).  </p>
<div class="codigo">
<pre>SELECT StDev(Gastos) AS Desviacion
FROM Pedidos WHERE Pais = 'España';
SELECT StDevP(Gastos) AS Desviacion FROM Pedidos WHERE Pais= 'España';</pre>
</div>
<h4>4.6 Sum</h4>
<p>Devuelve<br />
  la suma del conjunto de valores contenido en un campo especifico de una consulta.<br />
  Su sintaxis es: </p>
<p> <strong>SumP(expr)</strong></p>
<p>En donde <strong>expr</strong> representa el nombre del campo que contiene los datos que desean sumarse o una<br />
  expresi&oacute;n que realiza un c&aacute;lculo utilizando los datos de dichos<br />
  campos. Los operandos de <strong>expr</strong> pueden incluir el nombre de un campo de una tabla, una constante o una funci&oacute;n<br />
  (la cual puede ser intr&iacute;nseca o definida por el usuario pero no otras<br />
  de las funciones agregadas de <strong>SQL</strong>).  </p>
<div class="codigo">
<pre>SELECT Sum(PrecioUnidad * Cantidad)
AS Total FROM DetallePedido;</pre>
</div>
<h4>4.7 Var, VarP </h4>
<p> Devuelve una estimaci&oacute;n de la<br />
  varianza de una poblaci&oacute;n (sobre el total de los registros) o una muestra<br />
  de la poblaci&oacute;n (muestra aleatoria de registros) sobre los valores de<br />
  un campo. Su sintaxis es: </p>
<p> <strong>Var(expr)</strong></p>
<p><strong> VarP(expr)</strong></p>
<p><strong>VarP</strong> eval&uacute;a una poblaci&oacute;n, y Var eval&uacute;a una muestra de la poblaci&oacute;n. <strong>Expr</strong> el nombre del campo que<br />
  contiene los datos que desean evaluarse o una expresi&oacute;n que realiza un<br />
  c&aacute;lculo utilizando los datos de dichos campos. Los operandos de expr<br />
  pueden incluir el nombre de un campo de una tabla, una constante o una funci&oacute;n<br />
  (la cual puede ser intr&iacute;nseca o definida por el usuario pero no otras<br />
  de las funciones agregadas de <strong>SQL</strong>)
</p>
<p>Si la consulta contiene menos de dos registros,<br />
    <strong>Var</strong> y <strong>VarP</strong><br />
  devuelven <strong>Null</strong> (esto indica que<br />
  la varianza no puede calcularse). Puede utilizar <strong>Var</strong><br />
  y <strong>VarP</strong> en una expresi&oacute;n<br />
  de consulta o en una Instrucci&oacute;n <strong>SQL</strong>.  </p>
<div class="codigo">
<pre>SELECT Var(Gastos) AS Varianza FROM
Pedidos WHERE Pais = 'España';
SELECT VarP(Gastos) AS Varianza FROM Pedidos WHERE Pais = 'España';</pre>
</div>
<p>Siguiente capítulo: <a href="/editorial/tutsql5/">Consultas<br />
de Actualizaci&oacute;n</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
     de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
     de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
     de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
     de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
     de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
     y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
     de Uni&oacute;n Interna</a></li>
<li>C<a href="/editorial/tutsql10/">onsultas<br />
     de Uni&oacute;n Externas</a></li>
<li>E<a href="/editorial/tutsql11/">structuras<br />
     de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
     con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
     a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
     Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql4/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Consultas de Actualización</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql5/#comments</comments>
		<pubDate>Tue, 12 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Las consultas de acción son aquellas que no devuelven ningún registro, son las encargadas de acciones como añadir y borrar y modificar registros.
5. Consultas de Actualizaci&#243;n
 Las consultas de actualizaci&#243;n son aquellas que no devuelven ning&#250;n registro,
  son las encargadas de acciones como a&#241;adir y borrar y modificar registros. 

  5.1 DELETE 
Crea [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Las consultas de acción son aquellas que no devuelven ningún registro, son las encargadas de acciones como añadir y borrar y modificar registros.</span><span id="more-259"></span></p>
<h3>5. Consultas de Actualizaci&oacute;n</h3>
<p> Las consultas de actualizaci&oacute;n son aquellas que no devuelven ning&uacute;n registro,<br />
  son las encargadas de acciones como a&ntilde;adir y borrar y modificar registros. </p>
<h4>
  5.1 DELETE </h4>
<p>Crea una consulta de eliminaci&oacute;n<br />
  que elimina los registros de una o m&aacute;s de las tablas listadas en la cl&aacute;usula <strong>FROM</strong> que satisfagan la cl&aacute;usula <strong>WHERE</strong>. Esta consulta elimina<br />
  los registros completos, no es posible eliminar el contenido de alg&uacute;n<br />
  campo en concreto. Su sintaxis es: </p>
<div class="codigo">
<pre>DELETE Tabla.* FROM Tabla WHERE criterio</pre>
</div>
<p><strong>DELETE</strong> es especialmente &uacute;til cuando se desea eliminar varios registros. En una<br />
  instrucci&oacute;n<strong> DELETE</strong> con<br />
  m&uacute;ltiples tablas, debe incluir el nombre de tabla (Tabla.*). Si especifica<br />
  m&aacute;s de una tabla desde la que eliminar registros, todas deben ser tablas<br />
  de muchos a uno. Si desea eliminar todos los registros de una tabla, eliminar<br />
  la propia tabla es m&aacute;s eficiente que ejecutar una consulta de borrado. </p>
<p>Se puede utilizar <strong>DELETE<br />
  </strong>para eliminar registros de una &uacute;nica tabla o desde varios<br />
  lados de una relaci&oacute;n uno a muchos. Las operaciones de eliminaci&oacute;n<br />
  en cascada en una consulta &uacute;nicamente eliminan desde varios lados de<br />
  una relaci&oacute;n. Por ejemplo, en la relaci&oacute;n entre las tablas Clientes<br />
  y Pedidos, la tabla Pedidos es la parte de muchos por lo que las operaciones<br />
  en cascada solo afectaran a la tabla Pedidos. Una consulta de borrado elimina<br />
  los registros completos, no &uacute;nicamente los datos en campos espec&iacute;ficos.<br />
  Si desea eliminar valores en un campo especificado, crear una consulta de actualizaci&oacute;n<br />
  que cambie los valores a <strong>Null</strong>.
</p>
<p>Una vez que se han eliminado los registros<br />
  utilizando una consulta de borrado, no puede deshacer la operaci&oacute;n. Si<br />
  desea saber qu&eacute; registros se eliminar&aacute;n, primero examine los resultados<br />
  de una consulta de selecci&oacute;n que utilice el mismo criterio y despu&eacute;s<br />
  ejecute la consulta de borrado. Mantenga copias de seguridad de sus datos en<br />
  todo momento. Si elimina los registros equivocados podr&aacute; recuperarlos<br />
  desde las copias de seguridad. </p>
<div class="codigo">
<pre>DELETE * FROM Empleados WHERE Cargo
= 'Vendedor';</pre>
</div>
<h4>5.2 INSERT INTO </h4>
<p>Agrega un registro en una tabla. Se la<br />
  conoce como una consulta de datos a&ntilde;adidos. Esta consulta puede ser de<br />
  dos tipos: Insertar un &uacute;nico registro &oacute; Insertar en una tabla<br />
  los registros contenidos en otra tabla. </p>
<h5>5.2.1<br />
  Para insertar un &uacute;nico Registro: </h5>
<p>En este caso la sintaxis es la siguiente:  </p>
<div class="codigo">
<pre>INSERT INTO Tabla (campo1, campo2, ..,
campoN)
VALUES (valor1, valor2, ..., valorN)</pre>
</div>
<p>Esta consulta graba en el campo1 el valor1,<br />
  en el campo2 y valor2 y as&iacute; sucesivamente. Hay que prestar especial atenci&oacute;n<br />
  a acotar entre comillas simples (&#8217;) los valores literales (cadenas de caracteres)<br />
  y las fechas indicarlas en formato mm-dd-aa y entre caracteres de almohadillas<br />
  (#). </p>
<h5>5.2.2<br />
  Para insertar Registros de otra Tabla: </h5>
<p>En este caso la sintaxis es: </p>
<div class="codigo">
<pre>INSERT INTO Tabla [IN base_externa]
(campo1, campo2, &#8230;, campoN)
SELECT TablaOrigen.campo1, TablaOrigen.campo2, &#8230;, TablaOrigen.campoN
FROM TablaOrigen</pre>
</div>
<p>En este caso se seleccionar&aacute;n los<br />
  campos 1,2, &#8230;, n de la tabla origen y se grabar&aacute;n en los campos 1,2,..,<br />
  n de la Tabla. La condici&oacute;n <strong>SELECT</strong> puede incluir la cl&aacute;usula <strong>WHERE</strong><br />
  para filtrar los registros a copiar. Si Tabla y TablaOrigen poseen la misma<br />
  estructura podemos simplificar la sintaxis a: </p>
<div class="codigo">
<pre>INSERT INTO Tabla SELECT TablaOrigen.*
FROM TablaOrigen</pre>
</div>
<p>De esta forma los campos de <strong>TablaOrigen</strong> se grabar&aacute;n en <strong>Tabla</strong>, para<br />
  realizar esta operaci&oacute;n es necesario que todos los campos de <strong>TablaOrigen</strong> est&eacute;n contenidos con igual nombre en <strong>Tabla</strong>.<br />
  Con otras palabras que <strong>Tabla</strong> posea<br />
  todos los campos de <strong>TablaOrigen</strong><br />
  (igual nombre e igual tipo). </p>
<p>En este tipo de consulta hay que tener<br />
  especial atenci&oacute;n con los campos contadores o autonum&eacute;ricos puesto<br />
  que al insertar un valor en un campo de este tipo se escribe el valor que contenga<br />
  su campo hom&oacute;logo en la tabla origen, no increment&aacute;ndose como<br />
  le corresponde. </p>
<p>Se puede utilizar la instrucci&oacute;n <strong>INSERT INTO</strong> para agregar un registro &uacute;nico a una tabla, utilizando la sintaxis de la consulta de adici&oacute;n<br />
  de registro &uacute;nico tal y como se mostr&oacute; anteriormente. En este<br />
  caso, su c&oacute;digo espec&iacute;fica el nombre y el valor de cada campo<br />
  del registro. Debe especificar cada uno de los campos del registro al que se<br />
  le va a asignar un valor as&iacute; como el valor para dicho campo. Cuando no<br />
  se especifica dicho campo, se inserta el valor predeterminado o <strong>Null</strong>.<br />
  Los registros se agregan al final de la tabla. </p>
<p>Tambi&eacute;n se puede utilizar <strong>INSERT<br />
  INTO</strong> para agregar un conjunto de registros pertenecientes a<br />
  otra tabla o consulta utilizando la cl&aacute;usula <strong>SELECT<br />
  &#8230; FROM</strong> como se mostr&oacute; anteriormente en la sintaxis<br />
  de la consulta de adici&oacute;n de m&uacute;ltiples registros. En este caso<br />
  la cl&aacute;usula <strong>SELECT</strong> especifica<br />
  los campos que se van a agregar en la tabla destino especificada. </p>
<p>La<br />
  tabla destino u origen puede especificar una tabla o una consulta. </p>
<p>Si la tabla destino contiene una clave<br />
  principal, hay que asegurarse que es &uacute;nica, y con valores <strong>no-Null</strong> ; si no es as&iacute;, no se agregar&aacute;n los registros. Si se agregan registros<br />
  a una tabla con un campo Contador, no se debe incluir el campo Contador en la<br />
  consulta. Se puede emplear la cl&aacute;usula <strong>IN</strong><br />
  para agregar registros a una tabla en otra base de datos. </p>
<p>Se pueden averiguar los registros que<br />
  se agregar&aacute;n en la consulta ejecutando primero una consulta de selecci&oacute;n<br />
  que utilice el mismo criterio de selecci&oacute;n y ver el resultado. Una consulta<br />
  de adici&oacute;n copia los registros de una o m&aacute;s tablas en otra. Las<br />
  tablas que contienen los registros que se van a agregar no se ver&aacute;n afectadas<br />
  por la consulta de adici&oacute;n. En lugar de agregar registros existentes<br />
  en otra tabla, se puede especificar los valores de cada campo en un nuevo registro<br />
  utilizando la cl&aacute;usula <strong>VALUES</strong>.<br />
  Si se omite la lista de campos, la cl&aacute;usula<strong><br />
  VALUES</strong> debe incluir un valor para cada campo de la tabla, de<br />
  otra forma fallar&aacute;<strong> INSERT</strong>.  </p>
<div class="codigo">
<pre>INSERT INTO Clientes SELECT Clientes_Viejos.*
FROM Clientes_Nuevos;
INSERT INTO Empleados (Nombre, Apellido, Cargo)
VALUES ('Luis', 'S&aacute;nchez', 'Becario');

INSERT INTO Empleados SELECT Vendedores.* FROM Vendedores
WHERE Fecha_Contratacion &lt; Now() - 30;</pre>
</div>
<h4>
  5.3 UPDATE </h4>
<p>Crea una consulta de actualizaci&oacute;n<br />
  que cambia los valores de los campos de una tabla especificada bas&aacute;ndose<br />
  en un criterio espec&iacute;fico. Su sintaxis es:  </p>
<div class="codigo">
<pre>UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2,
... CampoN=ValorN
WHERE Criterio;</pre>
</div>
<p><strong>UPDATE</strong> es especialmente &uacute;til cuando se desea cambiar un gran n&uacute;mero de<br />
  registros o cuando &eacute;stos se encuentran en m&uacute;ltiples tablas. Puede<br />
  cambiar varios campos a la vez. El ejemplo siguiente incrementa los valores <strong>Cantidad</strong> pedidos en un 10 por<br />
  ciento y los valores <strong>Transporte</strong><br />
  en un 3 por ciento para aquellos que se hayan enviado al <strong>Reino<br />
  Unido</strong>.: </p>
<div class="codigo">
<pre>UPDATE Pedidos SET Pedido = Pedidos
* 1.1, Transporte = Transporte * 1.03
WHERE PaisEnv&iacute;o = 'ES';</pre>
</div>
<p><strong>UPDATE</strong> no genera ning&uacute;n resultado. Para saber qu&eacute; registros se van a<br />
  cambiar, hay que examinar primero el resultado de una consulta de selecci&oacute;n<br />
  que utilice el mismo criterio y despu&eacute;s ejecutar la consulta de actualizaci&oacute;n.  </p>
<div class="codigo">
<pre>UPDATE Empleados SET Grado = 5 WHERE
Grado = 2;
UPDATE Productos SET Precio = Precio * 1.1 WHERE Proveedor = 8 AND Familia
= 3;</pre>
</div>
<p>Si en una consulta de actualizaci&oacute;n<br />
  suprimimos la cl&aacute;usula <strong>WHERE </strong>todos<br />
  los registros de la tabla se&ntilde;alada ser&aacute;n actualizados. </p>
<div class="codigo">
<pre>UPDATE Empleados SET Salario = Salario
* 1.1</pre>
</div>
<p>Siguiente capítulo: <a href="/editorial/tutsql6/">Tipos<br />
                  de Datos</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tipos de Datos</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql6/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql6/#comments</comments>
		<pubDate>Mon, 11 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinónimos válidos reconocidos por dichos tipos de datos.
6. Tipos de Datos
 Los tipos de datos SQL se clasifican en 13 tipos de datos
  primarios y de varios sin&#243;nimos v&#225;lidos reconocidos por dichos
  tipos de datos.
 Tipos de [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinónimos válidos reconocidos por dichos tipos de datos.</span><span id="more-258"></span></p>
<h3>6. Tipos de Datos</h3>
<p> Los tipos de datos SQL se clasifican en 13 tipos de datos<br />
  primarios y de varios sin&oacute;nimos v&aacute;lidos reconocidos por dichos<br />
  tipos de datos.</p>
<p> Tipos de datos primarios: </p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=450%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="3" cellspacing="1" style="border-color:#FFFFFF;width=450%">
<tr style="border-color:#F0F0F0">
<td><strong>Tipo<br />
              de Datos</strong></td>
<td><strong>Longitud</strong></td>
<td><strong>Descripci&oacute;n</strong></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>BINARY</strong></td>
<td>1 byte</td>
<td>Para consultas sobre tabla adjunta de productos<br />
            de bases de datos que definen un tipo de datos Binario.&nbsp;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>BIT</strong></td>
<td>1 byte</td>
<td>Valores Si/No &oacute; True/False&nbsp;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>BYTE</strong></td>
<td>1 byte</td>
<td>Un valor entero entre 0 y 255.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>COUNTER</strong></td>
<td>4 bytes</td>
<td>Un n&uacute;mero incrementado autom&aacute;ticamente<br />
            (de tipo Long)</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>CURRENCY</strong></td>
<td>8 bytes</td>
<td>Un entero escalable entre 922.337.203.685.477,5808<br />
            y 922.337.203.685.477,5807.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>DATETIME</strong></td>
<td>8 bytes</td>
<td>Un valor de fecha u hora entre los a&ntilde;os<br />
            100 y 9999.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>SINGLE</strong></td>
<td>4 bytes</td>
<td>Un valor en punto flotante de precisi&oacute;n<br />
            simple con un rango de -3.402823*10<sup>38</sup> a -1.401298*10<sup>-45</sup><br />
            para valores negativos, 1.401298*10<sup>-45</sup> a 3.402823*10<sup>38</sup><br />
            para valores positivos, y 0.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>DOUBLE</strong></td>
<td>8 bytes</td>
<td>Un valor en punto flotante de doble precisi&oacute;n<br />
            con un rango de -1.79769313486232*10<sup>308</sup> a -4.94065645841247*10<sup>-324</sup><br />
            para valores negativos, 4.94065645841247*10<sup>-324</sup> a 1.79769313486232*10<sup>308</sup><br />
            para valores positivos, y 0.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>SHORT</strong></td>
<td>2 bytes</td>
<td>Un entero corto entre -32,768 y 32,767.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>LONG</strong></td>
<td>4 bytes</td>
<td>Un entero largo entre -2,147,483,648 y 2,147,483,647.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>LONGTEXT</strong></td>
<td>1 byte por car&aacute;cter</td>
<td>De cero a un m&aacute;ximo de 1.2 gigabytes.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>LONGBYNARY</strong></td>
<td>Seg&uacute;n se necesite</td>
<td>De cero 1 gigabyte.&nbsp; Utilizado para objetos<br />
            OLE.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>TEXT</strong></td>
<td>1 byte por caracter</td>
<td>De cero a 255 caracteres.&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Siguiente capítulo: <a href="/editorial/tutsql7/">SubConsultas</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SubConsultas</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql7/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql7/#comments</comments>
		<pubDate>Sun, 10 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Una subconsulta es una instrucción SELECT anidada dentro de una instrucción SELECT, SELECT&#8230;INTO, INSERT&#8230;INTO, DELETE, o UPDATE o dentro de otra subconsulta.
7. SubConsultas
 Una subconsulta es una instrucci&#243;n
  SELECT anidada dentro de una instrucci&#243;n SELECT,
  SELECT&#8230;INTO, INSERT&#8230;INTO, DELETE, o UPDATE o dentro de otra
  subconsulta.
 Puede utilizar tres formas de sintaxis para [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Una subconsulta es una instrucción SELECT anidada dentro de una instrucción SELECT, SELECT&#8230;INTO, INSERT&#8230;INTO, DELETE, o UPDATE o dentro de otra subconsulta.</span><span id="more-257"></span></p>
<h3>7. SubConsultas</h3>
<p> Una subconsulta es una instrucci&oacute;n<strong><br />
  SELECT </strong>anidada dentro de una instrucci&oacute;n <strong>SELECT,<br />
  SELECT&#8230;INTO, INSERT&#8230;INTO, DELETE, o UPDATE</strong> o dentro de otra<br />
  subconsulta.</p>
<p> Puede utilizar tres formas de sintaxis para crear una subconsulta: </p>
<div class="codigo">
<pre>comparaci&oacute;n [ANY | ALL | SOME]
(instrucci&oacute;n sql)
expresi&oacute;n [NOT] IN (instrucci&oacute;n sql)
[NOT] EXISTS (instrucci&oacute;n sql)</pre>
</div>
<p>En donde:</p>
<p><strong>comparaci&oacute;n: </strong>Es una expresi&oacute;n y un operador<br />
  de comparaci&oacute;n que compara la expresi&oacute;n con el resultado de la<br />
  subconsulta. </p>
<p><strong>expresi&oacute;n: </strong>Es una expresi&oacute;n por la<br />
  que se busca el conjunto resultante de la subconsulta. </p>
<p><strong>instrucci&oacute;n<br />
  sql : </strong>Es una instrucci&oacute;n<strong><br />
  SELECT</strong>, que sigue el mismo formato y reglas que cualquier otra<br />
  instrucci&oacute;n <strong>SELECT</strong>. Debe<br />
  ir entre par&eacute;ntesis. </p>
<p>Se puede utilizar una subconsulta<br />
  en lugar de una expresi&oacute;n en la lista de campos de una instrucci&oacute;n <strong>SELECT</strong> o en una cl&aacute;usula <strong>WHERE </strong>o<br />
  <strong>HAVING</strong>. En una subconsulta, se utiliza una instrucci&oacute;n <strong>SELECT</strong> para proporcionar un conjunto<br />
  de uno o m&aacute;s valores especificados para evaluar en la expresi&oacute;n<br />
  de la cl&aacute;usula <strong>WHERE</strong> o<br />
  <strong>HAVING</strong>. </p>
<p>Se puede utilizar el predicado<br />
    <strong>ANY</strong> o <strong>SOME</strong>,<br />
  los cuales son sin&oacute;nimos, para recuperar registros de la consulta principal,<br />
  que satisfagan la comparaci&oacute;n con cualquier otro registro recuperado<br />
  en la subconsulta. El ejemplo siguiente devuelve todos los productos cuyo precio<br />
  unitario es mayor que el de cualquier producto vendido con un descuento igual<br />
  o mayor al 25 por ciento.: </p>
<div class="codigo">
<pre>SELECT * FROM Productos WHERE PrecioUnidad &gt; ANY
(SELECT PrecioUnidad FROM DetallePedido WHERE Descuento &gt;= 0 .25);</pre>
</div>
<p>El predicado <strong>ALL</strong> se utiliza para recuperar &uacute;nicamente aquellos registros de la consulta<br />
  principal que satisfacen la comparaci&oacute;n con todos los registros recuperados<br />
  en la subconsulta. Si se cambia <strong>ANY</strong><br />
  por <strong>ALL</strong> en el ejemplo anterior,<br />
  la consulta devolver&aacute; &uacute;nicamente aquellos productos cuyo precio<br />
  unitario sea mayor que el de todos los productos vendidos con un descuento igual<br />
  o mayor al 25 por ciento. Esto es mucho m&aacute;s restrictivo. </p>
<p>El predicado <strong>IN</strong> se emplea para recuperar &uacute;nicamente aquellos registros de la consulta<br />
  principal para los que algunos registros de la subconsulta contienen un valor<br />
  igual. El ejemplo siguiente devuelve todos los productos vendidos con un descuento<br />
  igual o mayor al 25 por ciento.: </p>
<div class="codigo">
<pre>SELECT * FROM Productos WHERE IDProducto
IN
(SELECT IDProducto FROM DetallePedido WHERE Descuento &gt;= 0.25);</pre>
</div>
<p>Inversamente se puede utilizar<br />
    <strong>NOT IN</strong> para recuperar &uacute;nicamente aquellos registros de<br />
  la consulta principal para los que no hay ning&uacute;n registro de la subconsulta<br />
  que contenga un valor igual. El predicado<strong><br />
  EXISTS</strong> (con la palabra reservada <strong>NOT</strong> opcional) se utiliza en comparaciones de verdad/falso para determinar si la<br />
  subconsulta devuelve alg&uacute;n registro. </p>
<p>Se puede utilizar tambi&eacute;n<br />
  alias del nombre de la tabla en una subconsulta para referirse a tablas listadas<br />
  en la cl&aacute;usula <strong>FROM</strong> fuera<br />
  de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados<br />
  cuyo salario es igual o mayor que el salario<br />
  medio de todos los empleados con el mismo t&iacute;tulo. A la<br />
  tabla <strong>Empleados</strong> se le ha dado<br />
  el alias <strong>T1</strong>::  </p>
<div class="codigo">
<pre>SELECT Apellido, Nombre, Titulo, Salario
FROM Empleados AS T1
WHERE Salario &gt;= (SELECT Avg(Salario) FROM Empleados
WHERE T1.Titulo = Empleados.Titulo) ORDER BY Titulo;</pre>
</div>
<p>En el ejemplo anterior , la palabra<br />
  reservada <strong>AS</strong> es opcional.  </p>
<div class="codigo">
<pre>SELECT Apellidos, Nombre, Cargo, Salario
FROM Empleados
WHERE Cargo LIKE &quot;Agente Ven*&quot; AND Salario &gt; ALL (SELECT Salario
FROM
Empleados WHERE (Cargo LIKE &quot;*Jefe*&quot;) OR (Cargo LIKE &quot;*Director*&quot;));</pre>
</div>
<p><em>Obtiene una lista con el<br />
  nombre, cargo y salario de todos los agentes de ventas cuyo salario es mayor<br />
  que el de todos los jefes y directores.</em>
</p>
<div class="codigo">
<pre>SELECT DISTINCTROW NombreProducto, Precio_Unidad
FROM Productos
WHERE (Precio_Unidad = (SELECT Precio_Unidad FROM Productos WHERE
Nombre_Producto = &quot;Alm&iacute;bar anisado&quot;);</pre>
</div>
<p><em> Obtiene una lista con el<br />
  nombre y el precio unitario de todos los productos con el mismo precio que el<br />
  alm&iacute;bar anisado.</em> </p>
<div class="codigo">
<pre>SELECT DISTINCTROW Nombre_Contacto,
Nombre_Compa&ntilde;ia, Cargo_Contacto,
Telefono FROM Clientes WHERE (ID_Cliente IN (SELECT DISTINCTROW
ID_Cliente FROM Pedidos WHERE Fecha_Pedido &gt;= #04/1/93# &lt;#07/1/93#);</pre>
</div>
<p><em> Obtiene una lista de las<br />
  compa&ntilde;&iacute;as y los contactos de todos los clientes que han realizado<br />
  un pedido en el segundo trimestre de 1993. </em></p>
<div class="codigo">
<pre>SELECT Nombre, Apellidos FROM Empleados
AS E WHERE EXISTS
(SELECT * FROM Pedidos AS O WHERE O.ID_Empleado = E.ID_Empleado);</pre>
</div>
<p> <em>Selecciona el nombre de<br />
  todos los empleados que han reservado al menos un pedido.</em>  </p>
<div class="codigo">
<pre>SELECT DISTINCTROW Pedidos.Id_Producto,
Pedidos.Cantidad,
(SELECT DISTINCTROW Productos.Nombre FROM Productos WHERE
Productos.Id_Producto = Pedidos.Id_Producto) AS ElProducto FROM
Pedidos WHERE Pedidos.Cantidad &gt; 150 ORDER BY Pedidos.Id_Producto;</pre>
</div>
<p><em> Recupera el C&oacute;digo<br />
  del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el nombre<br />
  del producto de la tabla de productos. </em></p>
<p></p>
<p>Siguiente capítulo: <a href="/editorial/tutsql8/">Consultas<br />
                  y Referencias Cruzadas</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql7/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Consultas de Referencias Cruzadas</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql8/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql8/#comments</comments>
		<pubDate>Sat, 09 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Una consulta de referencias cruzadas es aquella que nos permite visualizar los datos en filas y en columnas, estilo tabla.
8. Consultas de Referencias Cruzadas
 Una consulta
  de referencias cruzadas es aquella que nos permite visualizar los datos en filas
  y en columnas, estilo tabla, por ejemplo: 






       [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Una consulta de referencias cruzadas es aquella que nos permite visualizar los datos en filas y en columnas, estilo tabla.</span><span id="more-256"></span></p>
<h3>8. Consultas de Referencias Cruzadas</h3>
<p> Una consulta<br />
  de referencias cruzadas es aquella que nos permite visualizar los datos en filas<br />
  y en columnas, estilo tabla, por ejemplo: </p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=300%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="3" cellspacing="1" style="border-color:#FFFFFF;width=300%" >
<tr style="border-color:#F0F0F0">
<td style="48%">
                <b>Producto / A&ntilde;o</b> </p>
</td>
<td style="22%">
                <b>1996</b> </p>
</td>
<td style="30%">
                <b>1997</b>
            </td>
</tr>
<tr style="border-color:#F0F0F0">
<td  style="border-color:#F0F0F0;width=48%">Pantalones</td>
<td  style="border-color:#F0F0F0;width=22%">1.250</td>
<td style="30%">3.000</td>
</tr>
<tr style="border-color:#F0F0F0">
<td style="48%">Camisas</td>
<td style="22%">8.560</td>
<td style="30%">1.253</td>
</tr>
<tr style="border-color:#F0F0F0">
<td style="48%">Zapatos</td>
<td style="22%">4.369</td>
<td style="30%">2.563</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Si tenemos<br />
  una tabla de productos y otra tabla de pedidos, podemos visualizar en total<br />
  de productos pedidos por a&ntilde;o para un art&iacute;culo determinado, tal<br />
  y como se visualiza en la tabla anterior. </p>
<p>La sintaxis para este tipo de consulta<br />
  es la siguiente: </p>
<div class="codigo">
<pre>TRANSFORM funci&oacute;n agregada instrucci&oacute;n
select PIVOT campo pivot
[IN (valor1[, valor2[, ...]])]</pre>
</div>
<p>En donde: </p>
<p><strong>funci&oacute;n<br />
  agregada</strong>: Es una funci&oacute;n<strong> SQL</strong><br />
  agregada que opera sobre los datos seleccionados. </p>
<p><strong>instrucci&oacute;n<br />
  select</strong>: Es una instrucci&oacute;n <strong>SELECT</strong>.
</p>
<p><strong>campo pivot</strong>:<br />
  Es el campo o expresi&oacute;n que desea utilizar para crear las cabeceras de<br />
  la columna en el resultado de la consulta. </p>
<p><strong>valor1,<br />
  valor2</strong>: Son valores fijos utilizados para crear las cabeceras<br />
  de la columna. </p>
<p>Para resumir<br />
  datos utilizando una consulta de referencia cruzada, se seleccionan los valores<br />
  de los campos o expresiones especificadas como cabeceras de columnas de tal<br />
  forma que pueden verse los datos en un formato m&aacute;s compacto que con una<br />
  consulta de selecci&oacute;n. </p>
<p><strong>TRANSFORM</strong> es opcional pero si se incluye es la primera instrucci&oacute;n de una cadena <strong>SQL</strong>. Precede a la instrucci&oacute;n <strong>SELECT</strong> que especifica los campos<br />
  utilizados como encabezados de fila y una cl&aacute;usula <strong>GROUP<br />
  BY</strong> que especifica el agrupamiento de las filas. Opcionalmente<br />
  puede incluir otras cl&aacute;usulas como por ejemplo <strong>WHERE</strong>,<br />
  que especifica una selecci&oacute;n adicional o un criterio de ordenaci&oacute;n<br />
  . </p>
<p>Los valores devueltos en campo pivot se<br />
  utilizan como encabezados de columna en el resultado de la consulta. Por ejemplo,<br />
  al utilizar las cifras de ventas en el mes de la venta como pivot en una consulta<br />
  de referencia cruzada se crear&iacute;an 12 columnas. Puede restringir el campo<br />
  pivot para crear encabezados a partir de los valores fijos (<strong>valor1,<br />
  valor2</strong>) listados en la cl&aacute;usula opcional <strong>IN</strong>.
</p>
<p>Tambi&eacute;n<br />
  puede incluir valores fijos, para los que no existen datos, para crear columnas<br />
  adicionales. </p>
<p>Ejemplos:</p>
<div class="codigo">
<pre>TRANSFORM Sum(Cantidad) AS Ventas SELECT
Producto, Cantidad FROM
Pedidos WHERE Fecha Between #01-01-98# And #12-31-98# GROUP BY Producto
ORDER BY Producto PIVOT DatePart(&quot;m&quot;, Fecha);</pre>
</div>
<p>Crea una consulta de tabla de referencias<br />
  cruzadas que muestra las ventas de productos por mes para un a&ntilde;o espec&iacute;fico.<br />
  Los meses aparecen de izquierda a derecha como columnas y los nombres de los<br />
  productos aparecen de arriba hacia abajo como filas.  </p>
<div class="codigo">
<pre>TRANSFORM Sum(Cantidad) AS Ventas SELECT
Compania FROM Pedidos
WHERE Fecha Between #01-01-98# And #12-31-98# GROUP BY Compania
ORDER BY Compania PIVOT &quot;Trimestre &quot; &amp; DatePart(&quot;q&quot;,Fecha) In ('Trimestre1',
'Trimestre2', 'Trimestre 3', 'Trimestre 4');</pre>
</div>
<p>Crea una consulta de tabla de referencias<br />
  cruzadas que muestra las ventas de productos por trimestre de cada proveedor<br />
  en el a&ntilde;o indicado. Los trimestres aparecen de izquierda a derecha como<br />
  columnas y los nombres de los proveedores aparecen de arriba hacia abajo como<br />
  filas. </p>
<h4> Un caso<br />
  pr&aacute;ctico:</h4>
<p> Se trata de resolver el siguiente problema: tenemos una tabla de productos con<br />
  dos campos, el c&oacute;digo y el nombre del producto, tenemos otra tabla de<br />
  pedidos en la que anotamos el c&oacute;digo del producto, la fecha del pedido<br />
  y la cantidad pedida. Deseamos consultar los totales de producto por a&ntilde;o,<br />
  calculando la media anual de ventas. </p>
<h3>Estructura<br />
  y datos de las tablas: </h3>
<h4>1. Art&iacute;culos:</h4>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=300%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="3" cellspacing="1" style="border-color:#FFFFFF;width=100%" >
<tr style="border-color:#F0F0F0">
<td>ID</td>
<td>&nbsp;Nombre</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>1</td>
<td>Zapatos</td>
</tr>
<tr style="border-color:#F0F0F0">
<td style="border-color:#F0F0F0">2</td>
<td>Pantalones</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>3</td>
<td>Blusas</td>
</tr>
</table>
</td>
</tr>
</table>
<h4>2. Pedidos:</h4>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=300%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="3" cellspacing="1" style="border-color:#FFFFFF;width=100%" >
<tr style="border-color:#F0F0F0">
<td><strong>Id</strong></td>
<td><strong>Fecha</strong></td>
<td><strong>Cantidad</strong></td>
</tr>
<tr style="border-color:#F0F0F0">
<td>1</td>
<td>11/11/1996</td>
<td>250</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>2</td>
<td>11/11/1996</td>
<td>125</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>&nbsp;</td>
<td>11/11/1996</td>
<td>520</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>1</td>
<td>12/10/1996</td>
<td>50</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>2</td>
<td>04/05/1996</td>
<td>250</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>&nbsp;</td>
<td>05/08/1996</td>
<td>100</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>1</td>
<td>01/01/1997</td>
<td>40</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>2</td>
<td>02/08/1997</td>
<td>60</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>&nbsp;</td>
<td>05/10/1997</td>
<td>70</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>1</td>
<td>12/12/1997</td>
<td>8</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>2</td>
<td>15/12/1997</td>
<td>520</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>&nbsp;</td>
<td>17/10/1997</td>
<td>1250</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Para resolver la consulta planteamos la siguiente consulta:    </p>
<div class="codigo">
<pre>TRANSFORM Sum(Pedidos.Cantidad) AS Resultado
SELECT Nombre AS Producto,
Pedidos.Id AS C&oacute;digo, Sum(Pedidos.Cantidad) AS TOTAL, Avg(Pedidos.Cantidad)
AS Media FROM Pedidos INNER JOIN Art&iacute;culos ON Pedidos.Id = Art&iacute;culos.Id
GROUP BY Pedidos.Id, Art&iacute;culos.Nombre PIVOT Year(Fecha);</pre>
</div>
<p>y obtenemos el siguiente resultado: </p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=400%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="1" cellspacing="1" style="border-color:#FFFFFF;width=100%">
<tr style="border-color:#F0F0F0">
<td><strong>Producto</strong></td>
<td><strong>C&oacute;digo</strong></td>
<td><strong>TOTAL</strong></td>
<td><strong>Media</strong></td>
<td><b>1996</b></td>
<td><b>1997</b></td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Zapatatos</td>
<td>1</td>
<td>48</td>
<td>87</td>
<td>00</td>
<td>48</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Pantalones</td>
<td>2</td>
<td>955</td>
<td>238,75</td>
<td>75</td>
<td>580</td>
</tr>
<tr style="border-color:#F0F0F0">
<td>Blusas</td>
<td>&nbsp;</td>
<td>1940</td>
<td>485</td>
<td>620</td>
<td>1320</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Comentarios<br />
  a la consulta: </p>
<p>La cl&aacute;usula <strong>TRANSFORM</strong><br />
  indica el valor que deseamos visualizar en las columnas que realmente pertenecen<br />
  a la consulta, en este caso <strong>1996</strong><br />
  y <strong>1997</strong>, puesto que las dem&aacute;s<br />
  columnas son opcionales. </p>
<p><strong>SELECT</strong><br />
  especifica el nombre de las columnas opcionales que deseamos visualizar, en<br />
  este caso <strong>Producto, C&oacute;digo, Total y Media</strong>,<br />
  indicando el nombre del campo que deseamos mostrar en cada columna o el valor<br />
  de la misma. Si incluimos una funci&oacute;n de c&aacute;lculo el resultado<br />
  se har&aacute; en base a los datos de la fila actual y no al total de los datos. </p>
<p><strong>FROM</strong> especifica el origen de los datos. La primera tabla que debe figurar es aquella<br />
  de donde deseamos extraer los datos, esta tabla debe contener al menos tres<br />
  campos, uno para los t&iacute;tulos de la fila, otros para los t&iacute;tulos<br />
  de la columna y otro para calcular el valor de las celdas. </p>
<p>En este caso en concreto se deseaba visualizar<br />
  el nombre del producto, como el tabla de pedidos s&oacute;lo figuraba el c&oacute;digo<br />
  del mismo se a&ntilde;adi&oacute; una nueva columna en la cl&aacute;usula select<br />
  llamada Producto que se corresponda con el campo Nombre de la tabla de art&iacute;culos.<br />
  Para vincular el c&oacute;digo del art&iacute;culo de la tabla de pedidos con<br />
  el nombre del misma de la tabla art&iacute;culos se insert&oacute; la cl&aacute;usula<strong><br />
  INNER JOIN</strong>. </p>
<p>La cl&aacute;usula <strong>GROUP<br />
  BY</strong> especifica el agrupamiento de los registros, contrariamente<br />
  a los manuales de instrucci&oacute;n esta cl&aacute;usula no es opcional ya<br />
  que debe figurar siempre y debemos agrupar los registros por el campo del cual<br />
  extraemos la informaci&oacute;n. En este caso existen dos campos del cual extraemos<br />
  la informaci&oacute;n: pedidos.cantidad y art&iacute;culos.nombre, por ellos<br />
  agrupamos por los campos. </p>
<p>Para finalizar la cl&aacute;usula <strong>PIVOT</strong> indica el nombre de las columnas no opcionales, en este caso 1996 y 1997 y como<br />
  vamos a el dato que aparecer&aacute; en las columnas, en este caso empleamos<br />
  el a&ntilde;o en que se produjo el pedido, extray&eacute;ndolo del campo pedidos.fecha. </p>
<p>Otras posibilidades<br />
  de fecha de la cl&aacute;usula pivot son las siguientes: </p>
<p>1. Para<br />
  agrupamiento por Trimestres</p>
<p>  <strong>PIVOT &quot;Tri &quot; &amp; DatePart(&quot;q&quot;,[Fecha]);</strong></p>
<p>2. Para<br />
  agrupamiento por meses (sin tener en cuenta el a&ntilde;o) </p>
<p>  <strong>PIVOT Format([Fecha],&quot;mmm&quot;) In (&quot;Ene&quot;,<br />
  &quot;Feb&quot;, &quot;Mar&quot;, &quot;Abr&quot;, &quot;May&quot;, &quot;Jun&quot;,<br />
  &quot;Jul&quot;, &quot;Ago&quot;, &quot;Sep&quot;, &quot;Oct&quot;, &quot;Nov&quot;,<br />
  &quot;Dic&quot;); </strong></p>
<p>3. Para agrupar por d&iacute;as</p>
<p>    <strong>PIVOT Format([Fecha],&quot;Short Date&quot;)</strong></p>
<p> Siguiente capítulo: <a href="/editorial/tutsql9/">Consultas<br />
                  de Uni&oacute;n Interna</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql8/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Consultas de Unión Internas</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql9/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql9/#comments</comments>
		<pubDate>Fri, 08 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas siempre que haya concordancia de valores en un campo común.
9. Consultas de Uni&#243;n Internas
 Las vinculaciones entre tablas se realizan mediante la cl&#225;usula INNER que combina registros de dos tablas siempre
  que haya concordancia de valores en un [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas siempre que haya concordancia de valores en un campo común.</span><span id="more-255"></span></p>
<h3>9. Consultas de Uni&oacute;n Internas</h3>
<p> Las vinculaciones entre tablas se realizan mediante la cl&aacute;usula INNER que combina registros de dos tablas siempre<br />
  que haya concordancia de valores en un campo com&uacute;n. Su sintaxis es: </p>
<div class="codigo">
<pre>SELECT campos FROM tb1 INNER JOIN tb2
ON tb1.campo1 comp tb2.campo2</pre>
</div>
<p><strong>En donde: </strong></p>
<p><strong>tb1, tb2</strong>:<br />
  Son los nombres de las tablas desde las que se combinan los registros. </p>
<p><strong>campo1,<br />
    campo2</strong>: Son los nombres de los campos que se combinan. Si no<br />
    son num&eacute;ricos, los campos deben ser del mismo tipo de datos y contener<br />
  el mismo tipo de datos, pero no tienen que tener el mismo nombre. </p>
<p><strong>comp</strong>: Es<br />
  cualquier operador de comparaci&oacute;n relacional<br />
  : <strong>=, &lt;, &gt;, &lt;=, &gt;=, o &lt;&gt;</strong>.
</p>
<p>Se puede utilizar una operaci&oacute;n <strong>INNER JOIN</strong> en cualquier cl&aacute;usula <strong>FROM</strong>. Esto crea una combinaci&oacute;n<br />
  por equivalencia, conocida tambi&eacute;n como uni&oacute;n interna. Las combinaciones<br />
  Equi son las m&aacute;s comunes; &eacute;stas combinan los registros de dos<br />
  tablas siempre que haya concordancia de valores en un campo com&uacute;n a ambas<br />
  tablas. Se puede utilizar <strong>INNER JOIN</strong><br />
  con las tablas <em>Departamentos y Empleados</em> para seleccionar todos los<br />
  empleados de cada departamento. Por el contrario, para seleccionar todos los<br />
  departamentos (incluso si alguno de ellos no tiene ning&uacute;n empleado asignado)<br />
  se emplea <strong>LEFT JOIN</strong> o todos los<br />
  empleados (incluso si alguno no est&aacute; asignado<br />
  a ning&uacute;n departamento), en este caso <strong>RIGHT<br />
  JOIN</strong>. </p>
<p>Si se intenta combinar campos que contengan<br />
  datos <strong>Memo u Objeto OLE</strong>, se produce<br />
  un error. Se pueden combinar dos campos num&eacute;ricos cualesquiera, incluso<br />
  si son de diferente tipo de datos. Por ejemplo, puede combinar un campo Num&eacute;rico<br />
  para el que la propiedad <strong>Size</strong><br />
  de su objeto <strong>Field</strong> est&aacute; establecida como Entero, y un campo Contador. </p>
<p>El ejemplo siguiente muestra c&oacute;mo<br />
  podr&iacute;a combinar las tablas <em>Categor&iacute;as y Productos</em> bas&aacute;ndose<br />
  en el campo <strong>IDCategoria</strong>:  </p>
<div class="codigo">
<pre>SELECT Nombre_Categor&iacute;a, NombreProducto
FROM Categorias INNER JOIN Productos
ON Categorias.IDCategoria = Productos.IDCategoria;</pre>
</div>
<p>En el ejemplo anterior, <strong>IDCategoria</strong> es el campo combinado, pero no est&aacute; incluido en la salida de la consulta<br />
  ya que no est&aacute; incluido en la instrucci&oacute;n <strong>SELECT</strong>.<br />
  Para incluir el campo combinado, incluir el nombre del campo en la instrucci&oacute;n <strong>SELECT</strong>, en este caso, <strong>Categorias.IDCategoria</strong>.
</p>
<p>Tambi&eacute;n se pueden enlazar varias<br />
  cl&aacute;usulas <strong>ON</strong> en una instrucci&oacute;n <strong>JOIN</strong>, utilizando la sintaxis<br />
  siguiente: </p>
<div class="codigo">
<pre>SELECT campos
FROM tabla1 INNER JOIN tabla2
ON tb1.campo1 comp tb2.campo1 AND
ON tb1.campo2 comp tb2.campo2) OR
ON tb1.campo3 comp tb2.campo3)];</pre>
</div>
<p>Tambi&eacute;n puede anidar instrucciones<br />
  JOIN utilizando la siguiente sintaxis: </p>
<div class="codigo">
<pre>SELECT campos
FROM tb1 INNER JOIN
(tb2 INNER JOIN [( ]tb3
[INNER JOIN [( ]tablax [INNER JOIN ...)]
ON tb3.campo3 comp tbx.campox)]
ON tb2.campo2 comp tb3.campo3)
ON tb1.campo1 comp tb2.campo2;</pre>
</div>
<p>Un<strong> LEFT<br />
  JOIN</strong> o un <strong>RIGHT JOIN</strong><br />
  puede anidarse dentro de un <strong>INNER JOIN</strong>,<br />
  pero un <strong>INNER JOIN</strong> no puede anidarse<br />
  dentro de un<strong> LEFT JOIN</strong> o un <strong>RIGHT<br />
  JOIN</strong>. </p>
<p><strong>Ejemplo:</strong>  </p>
<div class="codigo">
<pre>SELECT DISTINCTROW Sum([Precio unidad]
* [Cantidad]) AS [Ventas],
[Nombre] &amp; &quot; &quot; &amp; [Apellidos] AS [Nombre completo] FROM
[Detalles de pedidos],
Pedidos, Empleados, Pedidos INNER JOIN [Detalles de pedidos] ON Pedidos.
[ID de pedido] = [Detalles de pedidos].[ID de pedido], Empleados INNER JOIN
Pedidos ON Empleados.[ID de empleado] = Pedidos.[ID de empleado] GROUP BY
[Nombre] &amp; &quot; &quot; &amp; [Apellidos];</pre>
</div>
<p>Crea dos combinaciones equivalentes: una<br />
  entre las tablas <em>Detalles</em> de pedidos y <em>Pedido</em>s, y la otra<br />
  entre las tablas <em>Pedidos y Empleados</em>. Esto es necesario ya que la tabla<br />
  <em>Empleados</em> no contiene datos de ventas y la tabla <em>Detalles</em><br />
  de pedidos no contiene datos de los empleados. La consulta produce una lista<br />
  de empleados y sus ventas totales. </p>
<p> Si empleamos la cl&aacute;usula <strong>INNER</strong> en la consulta se seleccionar&aacute;n s&oacute;lo aquellos registros de la<br />
  tabla de la que hayamos escrito a la izquierda de <strong>INNER<br />
  JOIN</strong> que contengan al menos un registro de la tabla que hayamos<br />
  escrito a la derecha. Para solucionar esto tenemos dos cl&aacute;usulas que<br />
  sustituyen a la palabra clave<strong> INNER</strong>,<br />
  estas cl&aacute;usulas son <strong>LEFT </strong>y<br />
   <strong>RIGHT</strong>. <strong>LEFT</strong> toma todos los registros de la tabla de la izquierda aunque no tengan ning&uacute;n<br />
  registro en la tabla de la izquierda. <strong>RIGHT</strong> realiza la misma operaci&oacute;n pero al contrario, toma todos los registros<br />
  de la tabla de la derecha aunque no tenga ning&uacute;n registro en la tabla<br />
  de la izquierda. </p>
<p>Siguiente capítulo: <a href="/editorial/tutsql10/">Consultas<br />
de Uni&oacute;n Externas</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql9/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Consultas de Unión Externas</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql10/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql10/#comments</comments>
		<pubDate>Thu, 07 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aprenderemos a hacer consultas combinando los resultados de dos o más consultas o tablas independientes
10. Consultas de Uni&#243;n Externas
 Se utiliza la operaci&#243;n UNION para crear una consulta de uni&#243;n, combinando los resultados de dos o
  m&#225;s consultas o tablas independientes. Su sintaxis es: 

[TABLE] consulta1 UNION [ALL] [TABLE]
consulta2 [UNION [ALL] [TABLE] consultan [ [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Aprenderemos a hacer consultas combinando los resultados de dos o más consultas o tablas independientes</span><span id="more-254"></span></p>
<h3>10. Consultas de Uni&oacute;n Externas</h3>
<p> Se utiliza la operaci&oacute;n <strong>UNION</strong> para crear una consulta de uni&oacute;n, combinando los resultados de dos o<br />
  m&aacute;s consultas o tablas independientes. Su sintaxis es: </p>
<div class="codigo">
<pre>[TABLE] consulta1 UNION [ALL] [TABLE]
consulta2 [UNION [ALL] [TABLE] consultan [ ... ]]</pre>
</div>
<p><strong>En donde: </strong> </p>
<p><strong>consulta1,<br />
  consulta2, consultan</strong>: Son instrucciones <strong>SELECT</strong>,<br />
  el nombre de una consulta almacenada o el nombre de una tabla almacenada precedido<br />
  por la palabra clave <strong>TABLE</strong>. </p>
<p>Puede combinar los resultados de dos o<br />
  m&aacute;s consultas, tablas e instrucciones <strong>SELECT</strong>,<br />
  en cualquier orden, en una &uacute;nica operaci&oacute;n <strong>UNION</strong>.<br />
  El ejemplo siguiente combina una tabla existente llamada <em>Nuevas Cuentas</em> y una instrucci&oacute;n <strong>SELECT</strong>: </p>
<div class="codigo">
<pre>TABLE [Nuevas Cuentas] UNION ALL SELECT
* FROM Clientes
WHERE [Cantidad pedidos] &gt; 1000;</pre>
</div>
<p>Si no se indica lo contrario, no se devuelven<br />
  registros duplicados cuando se utiliza la operaci&oacute;n <strong>UNION,</strong><br />
  no obstante puede incluir el predicado <strong>ALL</strong> para asegurar que se devuelven todos los registros. Esto hace que la consulta<br />
  se ejecute m&aacute;s r&aacute;pidamente. Todas las consultas en una operaci&oacute;n <strong>UNION</strong> deben pedir el mismo n&uacute;mero<br />
  de campos, no obstante los campos no tienen porqu&eacute; tener el mismo tama&ntilde;o<br />
  o el mismo tipo de datos. </p>
<p>Se puede utilizar una cl&aacute;usula <strong>GROUP BY</strong> y/o <strong>HAVING</strong> en cada argumento consulta para agrupar los datos devueltos. Puede utilizar<br />
  una cl&aacute;usula<strong> ORDER BY</strong> al<br />
  final del &uacute;ltimo argumento consulta para visualizar los datos devueltos<br />
  en un orden espec&iacute;fico. </p>
<div class="codigo">
<pre>SELECT [Nombre de compa&ntilde;&iacute;a],
Ciudad FROM Proveedores WHERE
Pa&iacute;s = &#8216;Brasil&#8217; UNION SELECT [Nombre de compa&ntilde;&iacute;a],
Ciudad FROM Clientes
WHERE Pa&iacute;s = &quot;Brasil&quot;</pre>
</div>
<p>Recupera los nombres y las ciudades de<br />
  todos proveedores y clientes de Brasil </p>
<div class="codigo">
<pre>SELECT [Nombre de compa&ntilde;&iacute;a],
Ciudad FROM Proveedores WHERE Pa&iacute;s = &#8216;Brasil&#8217;
UNION SELECT [Nombre de compa&ntilde;&iacute;a], Ciudad FROM Clientes WHERE
Pa&iacute;s = &#8216;Brasil&#8217; ORDER BY Ciudad</pre>
</div>
<p>Recupera los nombres y las ciudades de<br />
  todos proveedores y clientes radicados en Brasil, ordenados por el nombre de<br />
  la ciudad. </p>
<div class="codigo">
<pre>SELECT [Nombre de compa&ntilde;&iacute;a],
Ciudad FROM Proveedores WHERE Pa&iacute;s = &#8216;Brasil&#8217;
UNION SELECT [Nombre de compa&ntilde;&iacute;a], Ciudad FROM Clientes WHERE
Pa&iacute;s = &#8216;Brasil&#8217; UNION SELECT [Apellidos], Ciudad FROM Empleados WHERE Regi&oacute;n
= &#8216;Am&eacute;rica del Sur</pre>
</div>
<p>Recupera los nombres y las ciudades de<br />
  todos los proveedores y clientes de brasil y los apellidos y las ciudades de<br />
  todos los empleados de Am&eacute;rica del Sur. </p>
<div class="codigo">
<pre>TABLE [Lista de clientes] UNION TABLE
[Lista de proveedores]</pre>
</div>
<p>Recupera los nombres y c&oacute;digos<br />
  de todos los proveedores y clientes.</p>
<p>Siguiente capítulo: <a href="/editorial/tutsql11/">Estructuras<br />
              de las Tablas</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql10/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Estructuras de las Tablas</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql11/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql11/#comments</comments>
		<pubDate>Wed, 06 Aug 2003 00:00:00 +0000</pubDate>
		<dc:creator>Claudio Casares</dc:creator>
		
		<category><![CDATA[Bases de Datos]]></category>

		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aprenderemos la estructura de las tablas, creación de índices y como modificiar el diseño de las mismas.
11. Estructuras de las Tablas
 11.1 Creaci&#243;n
  de Tablas Nuevas 
 Si se est&#225; utilizando el motor
  de datos de Microsoft para acceder a bases de datos access, s&#243;lo se puede
  emplear esta instrucci&#243;n para crear [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Aprenderemos la estructura de las tablas, creación de índices y como modificiar el diseño de las mismas.</span><span id="more-253"></span></p>
<h3>11. Estructuras de las Tablas</h3>
<h4> 11.1 Creaci&oacute;n<br />
  de Tablas Nuevas </h4>
<p> Si se est&aacute; utilizando el motor<br />
  de datos de Microsoft para acceder a bases de datos access, s&oacute;lo se puede<br />
  emplear esta instrucci&oacute;n para crear bases de datos propias de access.<br />
  Su sintaxis es: </p>
<div class="codigo">
<pre>[TABLE] consulta1 UNION [ALL] [TABLE]
consulta2 [UNION [ALL] [TABLE] consultan [ ... ]]</pre>
</div>
<p><strong>En donde:</strong></p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=98%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="2" cellspacing="1" style="border-color:#666666;width=100%">
<tr style="border-color:#F0F0F0">
<td><b>Parte</b></td>
<td><b>Descripci&oacute;n</b></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tabla</strong></td>
<td style="border-color:#F0F0F0">Es el nombre de la tabla que se desea modificar.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>campo</strong></td>
<td>Es el nombre del campo que se va a a&ntilde;adir<br />
            o eliminar.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tipo</strong></td>
<td>Es el tipo de campo que se va a a&ntilde;adir.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tama&ntilde;o</strong></td>
<td>Es el tama&ntilde;o del campo que se va a a&ntilde;adir<br />
            (s&oacute;lo para campos de texto).</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>&iacute;ndice</strong></td>
<td>Es el nombre del &iacute;ndice del campo (cuando<br />
            se crean campos) o el nombre del &iacute;ndice de la tabla que se<br />
            desea eliminar.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>&iacute;ndice<br />
            multicampo </strong></td>
<td>Es el nombre del &iacute;ndice del campo multicampo<br />
            (cuando se crean campos) o el nombre del &iacute;ndice de la tabla<br />
            que se desea eliminar.</td>
</tr>
</table>
</td>
</tr>
</table>
<div class="codigo">
<pre>CREATE TABLE Empleados (Nombre TEXT
(25) , Apellidos TEXT (50));</pre>
</div>
<p>Crea una nueva tabla llamada <em>Empleados</em><br />
  con dos campos, uno llamado <em>Nombre</em> de tipo texto y longitud 25 y otro<br />
  llamado <em>Apellidos</em> con longitud 50. </p>
<div class="codigo">
<pre>CREATE TABLE Empleados (Nombre TEXT
(10), Apellidos TEXT,
Fecha_Nacimiento DATETIME) CONSTRAINT IndiceGeneral UNIQUE
([Nombre], [Apellidos], [Fecha_Nacimiento]);</pre>
</div>
<p>Crea una nueva tabla llamada <em>Empleados<br />
  </em>con un campo <em>Nombre </em>de tipo texto y longitud 10, otro con llamado<br />
  <em>Apellidos </em>de tipo texto y longitud predeterminada (50) y uno m&aacute;s<br />
  llamado <em>Fecha_Nacimiento </em>de tipo Fecha/Hora. Tambi&eacute;n crea un<br />
  &iacute;ndice &uacute;nico (no permite valores repetidos) formado por los tres<br />
  campos. </p>
<div class="codigo">
<pre>CREATE TABLE Empleados (ID INTEGER CONSTRAINT
IndicePrimario PRIMARY,
Nombre TEXT, Apellidos TEXT, Fecha_Nacimiento DATETIME);</pre>
</div>
<p>Crea una tabla llamada <em>Empleados</em><br />
  con un campo Texto de longitud predeterminada (50) llamado <em>Nombre</em> y<br />
  otro igual llamado <em>Apellidos</em>, crea otro campo llamado <em>Fecha_Nacimiento</em><br />
  de tipo Fecha/Hora y el campo <em>ID</em> de tipo entero el que establece como<br />
  clave principal. </p>
<h4> 11.2 La cl&aacute;usula CONSTRAINT </h4>
<p> Se utiliza la cl&aacute;usula <strong>CONSTRAINT</strong><br />
  en las instrucciones <strong>ALTER TABLE</strong><br />
  y <strong>CREATE TABLE</strong> para crear o eliminar &iacute;ndices. Existen dos sintaxis para esta cl&aacute;usula dependiendo si<br />
  desea Crear &oacute; Eliminar un &iacute;ndice de un &uacute;nico campo o si<br />
  se trata de un campo multi&iacute;ndice. Si se utiliza el motor de datos de<br />
  Microsoft, s&oacute;lo podr&aacute; utilizar esta cl&aacute;usula con las bases<br />
  de datos propias de dicho motor. </p>
<p>Para los &iacute;ndices de campos &uacute;nicos:  </p>
<div class="codigo">
<pre>CONSTRAINT nombre {PRIMARY KEY | UNIQUE
| REFERENCES tabla externa
[(campo externo1, campo externo2)]}</pre>
</div>
<p>Para los &iacute;ndices de campos m&uacute;ltiples:  </p>
<div class="codigo">
<pre>CONSTRAINT nombre {PRIMARY KEY (primario1[,
primario2 [, ...]]) |
UNIQUE (&uacute;nico1[, &uacute;nico2 [, ...]]) |
FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES tabla externa [(campo externo1
[,campo externo2 [, ...]])]}</pre>
</div>
<p>&nbsp;</p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=98%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="2" cellspacing="1" style="border-color:#666666;width=100%">
<tr style="border-color:#F0F0F0">
<td><b>Parte</b></td>
<td><b>Descripci&oacute;n</b></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>nombre</strong></td>
<td>Es el nombre del &iacute;ndice que se va a<br />
            crear.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>primarioN</strong></td>
<td>Es el nombre del campo o de los campos que<br />
            forman el &iacute;ndice primario.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>unicoN</strong></td>
<td>Es el nombre del campo o de los campos que<br />
            forman el &iacute;ndice de clave &uacute;nica.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>refN</strong></td>
<td style="border-color:#F0F0F0">Es el nombre del campo o de los campos que<br />
            forman el &iacute;ndice externo (hacen referencia a campos de otra<br />
            tabla).</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tabla externa</strong></td>
<td>Es el nombre de la tabla que contiene el campo<br />
            o los campos referenciados en refN</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>campos externos</strong></td>
<td>Es el nombre del campo o de los campos de la<br />
            tabla externa especificados por ref1, ref2, &#8230;, refN</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Si se desea crear un &iacute;ndice para<br />
  un campo cuando se esta utilizando las instrucciones <strong>ALTER<br />
  TABLE</strong> o <strong>CREATE TABLE</strong> la cl&aacute;usula <strong>CONTRAINT</strong> debe<br />
  aparecer inmediatamente despu&eacute;s de la especificaci&oacute;n del campo<br />
  indexado. </p>
<p>Si se desea crear un &iacute;ndice con<br />
  m&uacute;ltiples campos cuando se est&aacute; utilizando las instrucciones<strong><br />
  ALTER TABLE </strong>o <strong>CREATE TABLE </strong>la<br />
  cl&aacute;usula <strong>CONSTRAINT</strong> debe<br />
  aparecer fuera de la cl&aacute;usula de creaci&oacute;n de tabla.
</p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=98%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="2" cellspacing="1" style="border-color:#666666;width=100%">
<tr style="border-color:#F0F0F0">
<td><b>Tipo de Indice</b></td>
<td><b>Descripci&oacute;n</b></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>UNIQUE</strong></td>
<td>Genera un &iacute;ndice de clave &uacute;nica.<br />
            Lo que implica que los registros de la tabla no pueden contener el<br />
            mismo valor en los campos indexados.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>PRIMARY KEY</strong></td>
<td>Genera un &iacute;ndice primario el campo o<br />
            los campos especificados. Todos los campos de la clave principal deben<br />
            ser &uacute;nicos y no nulos, cada tabla s&oacute;lo puede contener<br />
            una &uacute;nica clave principal.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>FOREIGN KEY</strong></td>
<td>Genera un &iacute;ndice externo (toma como<br />
            valor del &iacute;ndice campos contenidos en otras tablas). Si la<br />
            clave principal de la tabla externa consta de m&aacute;s de un campo,<br />
            se debe utilizar una definici&oacute;n de &iacute;ndice de m&uacute;ltiples<br />
            campos, listando todos los campos de referencia, el nombre de la tabla<br />
            externa, y los nombres de los campos referenciados en la tabla externa<br />
            en el mismo orden que los campos de referencia listados. Si los campos<br />
            referenciados son la clave principal de la tabla externa, no tiene<br />
            que especificar los campos referenciados, predeterminado por valor,<br />
            el motor Jet se comporta como si la clave principal de la tabla externa<br />
            fueran los campos referenciados .</td>
</tr>
</table>
</td>
</tr>
</table>
<h4>11.3 Creaci&oacute;n de &Iacute;ndices </h4>
<p>Si se utiliza el motor de datos Jet de<br />
  Microsoft s&oacute;lo se pueden crear &iacute;ndices en bases de datos del mismo<br />
  motor. La sintaxis para crear un &iacute;ndice en una tabla ya definida en la<br />
  siguiente: </p>
<div class="codigo">
<pre>CREATE [ UNIQUE ] INDEX &iacute;ndice
ON tabla (campo [ASC|DESC][, campo [ASC|DESC], &#8230;])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]</pre>
</div>
<p><strong>En donde: </strong> </p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=98%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="2" cellspacing="1" style="border-color:#666666;width=100%">
<tr style="border-color:#F0F0F0">
<td><b>Parte</b></td>
<td><b>Descripci&oacute;n</b></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>&iacute;ndice</strong></td>
<td>Es el nombre del &iacute;ndice a crear.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tabla</strong></td>
<td>Es el nombre de una tabla existente en la que<br />
            se crear&aacute; el &iacute;ndice.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>campo</strong></td>
<td>Es el nombre del campo o lista de campos que<br />
            constituyen el &iacute;ndice.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>ASC|DESC</strong></td>
<td>Indica el orden de los valores de los campos<br />
            ASC indica un orden ascendente (valor predeterminado) y DESC un orden<br />
            descendente.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>UNIQUE</strong></td>
<td>Indica que el &iacute;ndice no puede contener<br />
            valores duplicados.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>DISALLOW NULL</strong></td>
<td>Proh&iacute;be valores nulos en el &iacute;ndice</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>IGNORE NULL</strong></td>
<td>Excluye del &iacute;ndice los valores nulos<br />
            incluidos en los campos que lo componen.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>PRIMARY</strong></td>
<td>Asigna al &iacute;ndice la categor&iacute;a<br />
            de clave principal, en cada tabla s&oacute;lo puede existir un &uacute;nico<br />
            &iacute;ndice que sea &#8220;Clave Principal&#8221;. Si un &iacute;ndice es clave<br />
            principal implica que no puede contener valores nulos ni duplicados.</td>
</tr>
</table>
</td>
</tr>
</table>
<p>  Se puede utilizar <strong>CREATE INDEX </strong>para<br />
  crear un pseudo &iacute;ndice sobre una tabla adjunta en una fuente de datos <strong>ODBC</strong> tal como <strong>SQL<br />
  Server</strong> que no tenga todav&iacute;a un &iacute;ndice. No necesita<br />
  permiso o tener acceso a un servidor remoto para crear un pseudo &iacute;ndice,<br />
  adem&aacute;s la base de datos remota no es consciente y no es afectada por<br />
  el pseudo &iacute;ndice. Se utiliza la misma sintaxis para las tabla adjunta<br />
  que para las originales. Esto es especialmente &uacute;til para crear un &iacute;ndice<br />
  en una tabla que ser&iacute;a de s&oacute;lo lectura debido a la falta de un<br />
  &iacute;ndice. </p>
<div class="codigo">
<pre>CREATE INDEX MiIndice ON Empleados (Prefijo,
Telefono);</pre>
</div>
<p>Crea un &iacute;ndice llamado <em>MiIndice</em><br />
  en la tabla empleados con los campos <em>Prefijo</em> y<em> Telefono</em>.  </p>
<div class="codigo">
<pre>CREATE UNIQUE INDEX MiIndice ON Empleados
(ID) WITH DISALLOW NULL;</pre>
</div>
<p>Crea un &iacute;ndice en la tabla<em><br />
  Empleados</em> utilizando el campo <em>ID</em>, obligando que el campo<em> ID</em><br />
  no contenga valores nulos ni repetidos. </p>
<h4> 11.4 Modificar el Dise&ntilde;o de una<br />
  Tabla </h4>
<p> Modifica el dise&ntilde;o de una tabla<br />
  ya existente, se pueden modificar los campos o los &iacute;ndices existentes.<br />
  Su sintaxis es: </p>
<div class="codigo">
<pre>ALTER TABLE tabla {ADD {COLUMN tipo
de campo[(tama&ntilde;o)] [CONSTRAINT &iacute;ndice]
CONSTRAINT &iacute;ndice multicampo} |
DROP {COLUMN campo I CONSTRAINT nombre del &iacute;ndice} }</pre>
</div>
<p><strong>En donde: </strong></p>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=98%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="2" cellspacing="1" style="border-color:#666666;width=100%">
<tr style="border-color:#F0F0F0">
<td><b>Parte</b></td>
<td><b>Descripci&oacute;n</b></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tabla</strong></td>
<td>Es el nombre de la tabla que se desea modificar.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>campo</strong></td>
<td>Es el nombre del campo que se va a a&ntilde;adir<br />
            o eliminar.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tipo</strong></td>
<td>Es el tipo de campo que se va a a&ntilde;adir.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>tama&ntilde;o</strong></td>
<td>Es el tama&ntilde;o del campo que se va a a&ntilde;adir<br />
            (s&oacute;lo para campos de texto).</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>&iacute;ndice</strong></td>
<td>Es el nombre del &iacute;ndice del campo (cuando<br />
            se crean campos) o el nombre del &iacute;ndice de la tabla que se<br />
            desea eliminar.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>&iacute;ndice<br />
            multicampo </strong></td>
<td>Es el nombre del &iacute;ndice del campo multicampo<br />
            (cuando se crean campos) o el nombre del &iacute;ndice de la tabla<br />
            que se desea eliminar.</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellpadding="1" cellspacing="1" style="border-color:#666666;width=98%">
<tr>
<td style="border-color:#FFFFFF">
<table cellpadding="2" cellspacing="1" style="border-color:#666666;width=100%">
<tr style="border-color:#F0F0F0">
<td><b>Operaci&oacute;n</b></td>
<td><b>Descripci&oacute;n</b></td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>ADD COLUMN</strong></td>
<td>Se utiliza para a&ntilde;adir un nuevo campo<br />
            a la tabla, indicando el nombre, el tipo de campo y opcionalmente<br />
            el tama&ntilde;o (para campos de tipo texto).</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>ADD</strong></td>
<td>Se utiliza para agregar un &iacute;ndice de<br />
            multicampos o de un &uacute;nico campo.</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>DROP COLUMN</strong></td>
<td>Se utiliza para borrar un campo. Se especifica &uacute;nicamente el nombre del campo.&nbsp;</td>
</tr>
<tr style="border-color:#F0F0F0">
<td><strong>DROP</strong></td>
<td>Se utiliza para eliminar un &iacute;ndice.<br />
            Se especifica &uacute;nicamente el nombre del &iacute;ndice a continuaci&oacute;n<br />
            de la palabra reservada CONSTRAINT.&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<div class="codigo">
<pre>ALTER TABLE Empleados ADD COLUMN Salario
CURRENCY;</pre>
</div>
<p>Agrega un campo Salario de tipo Moneda<br />
  a la tabla <em>Empleados</em>. </p>
<div class="codigo">
<pre>ALTER TABLE Empleados DROP COLUMN Salario;</pre>
</div>
<p>Elimina el campo <em>Salario </em>de la<br />
  tabla<em> Empleados</em>. </p>
<div class="codigo">
<pre>ALTER TABLE Pedidos ADD CONSTRAINT RelacionPedidos
FOREIGN KEY
(ID_Empleado) REFERENCES Empleados (ID_Empleado);</pre>
</div>
<p>Agrega un &iacute;ndice externo a la tabla <em>Pedidos</em>. El &iacute;ndice externo se basa en el campo <em>ID_Empleado</em><br />
  y se refiere al campo<em> ID_Empleado </em>de la tabla <em>Empleados</em>. En<br />
  este ejemplo no es necesario indicar el campo junto al nombre de la tabla en<br />
  la cl&aacute;usula <strong> REFERENCES</strong>,<br />
  pues <em>ID_Empleado</em> es la clave principal de la tabla <em>Empleados.</em>
</p>
<div class="codigo">
<pre>ALTER TABLE Pedidos DROP CONSTRAINT
RelacionPedidos;</pre>
</div>
<p>Elimina el &iacute;ndice de la tabla <em>Pedidos</em>.
</p>
<p>Siguiente capítulo: <a href="/editorial/tutsql12/">Consultas<br />
                  con Par&aacute;metros</a></p>
<p><img src="/images/editorial/tutsql_titulo.gif" alt="banner" width="398" height="70"/></p>
<ol>
<li><a href="/editorial/tutsql1/">Introducci&oacute;n</a></li>
<li><a href="/editorial/tutsql2/">Consultas<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql3/">Criterios<br />
      de Selecci&oacute;n</a></li>
<li><a href="/editorial/tutsql4/">Agrupamiento<br />
      de Registros y Funciones Agregadas</a></li>
<li><a href="/editorial/tutsql5/">Consultas<br />
      de Actualizaci&oacute;n</a></li>
<li><a href="/editorial/tutsql6/">Tipos<br />
      de Datos</a></li>
<li><a href="/editorial/tutsql7/">SubConsultas</a></li>
<li><a href="/editorial/tutsql8/">Consultas<br />
      y Referencias Cruzadas</a></li>
<li><a href="/editorial/tutsql9/">Consultas<br />
      de Uni&oacute;n Interna</a></li>
<li><a href="/editorial/tutsql10/">Consultas<br />
      de Uni&oacute;n Externas</a></li>
<li><a href="/editorial/tutsql11/">Estructuras<br />
      de las Tablas</a></li>
<li><a href="/editorial/tutsql12/">Consultas<br />
      con Par&aacute;metros</a></li>
<li><a href="/editorial/tutsql13/">Acceso<br />
      a las Bases de Datos Externas</a></li>
<li><a href="/editorial/tutsql14/">Omitir los permisos de ejecuci&oacute;n</a></li>
<li><a href="/editorial/tutsql15/">La<br />
      Cl&aacute;usula Procedure</a></li>
<li><a href="/editorial/tutsql16/">Anexos</a>                                </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/tutsql11/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Consultas con Parámetros</title>
		<link>http://www.maestrosdelweb.com/editorial/tutsql12/</link>
		<comments>http://www.maestrosdelweb.com/editorial/tutsql12/#comments</comments>
		<pubDate>Tue, 