<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ María Braeuner - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ María Braeuner - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 27 May 2026 16:02:06 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/maria-braeuner/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Tutorial de imágenes responsivas en CSS: Cómo hacer que las imágenes sean responsivas con CSS ]]>
                </title>
                <description>
                    <![CDATA[ La mayoría de los sitios web actuales son responsivos. Y si necesitas centrar y alinear la imagen [/espanol/news/como-centrar-una-imagen-vertical-y-horizontalmente-con-css/] en esos sitios, necesitas aprender cómo hacer imágenes fluidas o responsivas con CSS. En esta publicación me gustaría dar un poco más de detalle sobre cómo hacer que las imágenes sean responsivas. ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-de-imagenes-responsivas-en-css-como-hacer-que-las-imagenes-sean-responsivas-con-css/</link>
                <guid isPermaLink="false">62d1307cb4def50851972d67</guid>
                
                    <category>
                        <![CDATA[ Diseño responsivo ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ María Braeuner ]]>
                </dc:creator>
                <pubDate>Fri, 05 Aug 2022 02:05:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/07/imagenes_CSS_Responsivas.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/css-responsive-image-tutorial/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Responsive Image Tutorial: How to Make Images Responsive with&nbsp;CSS</a>
      </p><p>La mayoría de los sitios web actuales son responsivos. Y si necesitas <a href="https://www.freecodecamp.org/espanol/news/como-centrar-una-imagen-vertical-y-horizontalmente-con-css/">centrar y alinear la imagen</a> en esos sitios, necesitas aprender cómo hacer imágenes fluidas o responsivas con CSS.</p><p>En esta publicación me gustaría dar un poco más de detalle sobre cómo hacer que las imágenes sean responsivas.</p><p>También aprenderás algunos de los problemas generales que pueden ocurrir cuando intentas hacer imágenes responsivas - e intentaré explicar cómo resolverlos.</p><h2 id="c-mo-hacer-im-genes-responsivas-con-css"><strong>Cómo hacer imágenes responsivas con CSS</strong></h2><h3 id="-deber-as-usar-unidades-relativas-o-absolutas"><strong>¿Deberías usar unidades relativas o absolutas?</strong></h3><p>Hacer que una imagen sea fluida, o responsiva, es en realidad muy sencillo. Cuando subes una imagen a tu sitio web, tiene una anchura y una altura por defecto. Puedes cambiar ambos con CSS.</p><p>Para hacer que una imagen sea responsiva, tienes que dar un nuevo valor a su propiedad de anchura. La altura de la imagen se ajustará automáticamente.</p><p>Lo importante es saber que siempre debes utilizar unidades relativas para la propiedad de anchura, como el porcentaje, en lugar de las absolutas, como los píxeles.</p><pre><code class="language-css">img {
  width: 500px;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized_large.gif" class="kg-image" alt="Animated-GIF-downsized_large" width="600" height="400" loading="lazy"></figure><p>Por ejemplo, si defines una anchura fija de 500px, tu imagen no será responsiva - porque su unidad es absoluta.</p><pre><code class="language-css">img {
  width: 50%;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-1-.gif" class="kg-image" alt="Animated-GIF-downsized-1-" width="600" height="400" loading="lazy"></figure><p>Es por esto que en su lugar debes asignar un valor relativo como 50%. Este enfoque hará que tus imágenes sean fluidas y podrán cambiar de tamaño por sí mismas independientemente del tamaño de la pantalla.</p><h3 id="-debes-usar-las-consultas-de-medios-media-queries-"><strong>¿Debes usar las consultas de medios (<em>media queries</em>)?</strong></h3><p>Una de las preguntas que más me hacen es si hay que usar consultas de medios o no. </p><p>Una consulta de medios<em> </em>es otra característica importante de CSS que ayuda a hacer un sitio web responsivo. No voy a entrar en más detalles aquí, pero puedes <a href="https://www.freecodecamp.org/espanol/news/tutorial-de-css-de-consultas-de-medios-resoluciones-y-mas/">leer mi otro post</a> más adelante para aprender a utilizar las consultas de medios con más detalles.</p><p>La respuesta a esa pregunta es: "depende". Si quieres que tu imagen tenga distintos tamaños de un dispositivo a otro, entonces tendrás que usar consultas de medios. De lo contrario, no las necesitas. </p><p>Ahora, para este ejemplo, tu imagen tiene un ancho del 50% para cualquier tipo de pantalla. Pero cuando quieras hacerla de tamaño completo para dispositivos móviles, necesitarás la ayuda de las consultas de medios:</p><pre><code class="language-css">@media only screen and (max-width: 480px) {
  img {
    width: 100%;
  }
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-2-.gif" class="kg-image" alt="Animated-GIF-downsized-2-" width="600" height="400" loading="lazy"></figure><p>Por lo tanto, basándonos en la regla de la consulta de medios, en cualquier dispositivo menor a 480px la imagen tomará el ancho completo de la pantalla. </p><h3 id="-por-qu-la-propiedad-max-width-ancho-m-ximo-no-es-buena"><strong>¿Por qué la propiedad <em>max-width</em> (ancho máximo) no es buena?</strong></h3><p>Otra forma en la que los desarrolladores pueden crear imágenes responsivas es con la propiedad <em>max-width.</em> Sin embargo, este no es siempre el mejor método a utilizar, ya que puede que no funcione para todos los tamaños de pantalla o dispositivos.</p><p>Lo primero a entender antes de continuar con un ejemplo es qué hace exactamente la propiedad <em>max-width.</em></p><p>La propiedad<em> max-width</em> establece un ancho máximo para un elemento que no permite que el ancho de ese elemento sea mayor que su valor de <em>max-width</em> (pero puede ser menor). </p><p>Por ejemplo, si la imagen tiene un ancho por defecto de 500px, y tu pantalla tiene sólo 360px, entonces no podrás ver la imagen completa, porque no hay suficiente espacio: </p><pre><code class="language-css">img {
  max-width: 100%;
  width: 500px;  // asume que este es el tamaño por defecto 
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-3-.gif" class="kg-image" alt="Animated-GIF-downsized-3-" width="600" height="400" loading="lazy"></figure><p>Por lo tanto, puedes definir una propiedad de <em>max-width</em> para la imagen y establecerla en 100%, lo que reduce la imagen de 500px al espacio de 360px. Así podrás ver la imagen completa en una pantalla de menor tamaño. </p><p>Lo bueno es que, al estar usando una unidad relativa, la imagen será fluida en cualquier dispositivo menor a 500px.</p><p>Desafortunadamente, si el tamaño de la pantalla es algo más grande que 500px, la imagen no aumentará, ya que su ancho por defecto es de 500px. Este enfoque romperá lo responsivo de la imagen. </p><p>Para corregir esto, necesitas utilizar la propiedad de ancho (<em>width</em>) de nuevo, lo que hace que la propiedad <em>max-width</em> sea inútil.</p><h3 id="-y-qu-pasa-con-la-altura"><strong>¿Y qué pasa con la altura?</strong></h3><p>Otro problema con el que te puedes encontrar tiene que ver con la propiedad de altura. Normalmente, la altura de una imagen se redimensiona automáticamente, así que no necesitas asignar una propiedad de altura a las imágenes (porque rompe un poco la imagen).</p><p>Pero en ocasiones es posible que tengas que trabajar con imágenes que deben tener una altura fija. Entonces, si asignas una altura fija a la imagen, esta seguirá respondiendo, pero no se verá bien. </p><pre><code class="language-css">img {
  width: 100%;
  height: 300px;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-4-.gif" class="kg-image" alt="Animated-GIF-downsized-4-" width="600" height="400" loading="lazy"></figure><p>Afortunadamente, hay otra propiedad CSS para arreglar este problema...</p><h3 id="soluci-n-la-propiedad-object-fit"><strong>Solución: la propiedad <em>object-fit</em></strong></h3><p>Para tener más control sobre tus imágenes, CSS ofrece otra propiedad llamada <em>object-fit. </em>Utilicemos la propiedad <em>object-fit </em>y asignémosle un valor, que hará que tu imagen se vea mejor:</p><pre><code class="language-css">img {
  width: 100%;
  height: 300px;
  object-fit: cover;
  object-position: bottom;
}</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2020/09/Animated-GIF-downsized-5-.gif" class="kg-image" alt="Animated-GIF-downsized-5-" width="600" height="400" loading="lazy"></figure><p>Si lo necesitas, también puedes utilizar la propiedad <em>object-position </em>(adicionalmente a <em>object-fit</em>) para enfocar una parte específica de la imagen. Muchas personas no conocen la propiedad <em>object-fit</em>, pero puede ser útil para solucionar este tipo de problemas. </p><p>Espero esta publicación te haya ayudado a comprender y resolver tus problemas con imágenes responsivas. Si quieres aprender más sobre desarrollo web, no dudes en visitar mi <a href="https://www.youtube.com/channel/UC1EgYPCvKCXFn8HlpoJwY3Q">canal de Youtube</a>.</p><p>¡Gracias por leer!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Guía de Docker para principiantes: cómo crear tu primera aplicación Docker ]]>
                </title>
                <description>
                    <![CDATA[ ¿Eres desarrollador y quieres empezar con Docker? Este artículo es para ti. Luego de una corta introducción sobre qué es Docker y por qué utilizarlo, podrás crear tu primera aplicación con Docker. ¿Qué es Docker? Docker [https://www.docker.com/] es un software gratuito desarrollado por Docker Inc. Se presentó al público general ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/guia-de-docker-para-principiantes-como-crear-tu-primera-aplicacion-docker/</link>
                <guid isPermaLink="false">62cbee84771a97081f0e31b1</guid>
                
                    <category>
                        <![CDATA[ docker ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ María Braeuner ]]>
                </dc:creator>
                <pubDate>Mon, 18 Jul 2022 03:39:17 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/07/docker_main.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/a-beginners-guide-to-docker-how-to-create-your-first-docker-application-cc03de9b639f/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A beginner’s guide to Docker — how to create your first Docker application</a>
      </p><h4 id="-eres-desarrollador-y-quieres-empezar-con-docker-este-art-culo-es-para-ti-"><strong>¿Eres desarrollador y quieres empezar con Docker? Este artículo es para ti<strong>.</strong></strong></h4><p>Luego de una corta introducción sobre qué es Docker y por qué utilizarlo, podrás crear tu primera aplicación con Docker.</p><h4 id="-qu-es-docker"><strong>¿Qué es Docker?</strong></h4><p><a href="https://www.docker.com/" rel="noopener">Docker</a> es un software gratuito desarrollado por Docker Inc. Se presentó al público general el 13 de marzo del 2013 y desde entonces se ha convertido en un imprescindible en el mundo del desarrollo informático.</p><p>Le permite a los usuarios crear entornos independientes y aislados para desplegar sus aplicaciones. Estos entornos se denominan "contenedores".</p><p>Esto le permitirá al desarrollador ejecutar un contenedor en cualquier máquina.</p><p>Como puedes ver, con Docker ya no hay problemas de dependencia o compilación. Todo lo que tienes que hacer es lanzar tu contenedor y tu aplización se lanzará inmediatamente. </p><h4 id="pero-es-docker-una-m-quina-virtual"><strong>Pero, ¿es Docker una máquina virtual?</strong></h4><p>Esta es una de las preguntas más frecuentes sobre Docker. La respuesta es: en realidad, no del todo.</p><p>Puede parecer una máquina virtual al principio, pero la funcionalidad no es la misma. </p><p>A diferencia de Docker, una máquina virtual incluye un sistema operativo completo. Funcionará de forma independiente y actuará como un ordenador.</p><p>Docker solo compartirá los recursos de la máquina anfitriona para ejecutar sus entornos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/11/Blog.-Are-containers-..VM-Image-1-1024x435.png" class="kg-image" alt="Blog.-Are-containers-..VM-Image-1-1024x435" width="600" height="400" loading="lazy"><figcaption>Docker VS Virtual machines (Copyright to <a href="https://blog.docker.com/2018/08/containers-replacing-virtual-machines/" rel="noopener" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">Docker blog</a>)</figcaption></figure><h4 id="-por-qu-utilizar-docker-como-desarrollador"><strong>¿Por qué utilizar Docker como desarrollador?</strong></h4><p>Esta herramienta realmente puede cambiar la vida diaria del desarrollador. Para responder esta pregunta de la mejor manera, he redactado una lista no exhaustiva de los beneficios que encontrará:</p><ul><li>Docker es rápido. A diferencia de una máquina virtual, tu aplicación puede iniciarse en pocos segundos y detenerse igual de rápido.</li><li>Docker es multi-plataforma. Puedes lanzar tu contenedor en cualquier sistema.</li><li>Los contenedores pueden construirse y destruirse más rápido que en una máquina virtual. </li><li>Se acabaron las dificultades para configurar tu entorno de trabajo. Una vez configurado tu Docker, no tendrás que volver a instalar tus dependencias manualmente. Si cambias de ordenador o si un empleado se incorpora a tu empresa, solo tendrás que darle tu configuración.</li><li>Mantendrás tu espacio de trabajo limpio, ya que cada uno de tus entornos estará aislado y podrás eliminarlo en cualquier momento sin que afecte al resto.</li><li>Será más fácil desplegar tu proyecto en tu servidor para ponerlo en línea.</li></ul><h3 id="ahora-vamos-a-crear-tu-primera-aplicaci-n"><strong>Ahora vamos a crear tu primera aplicación</strong></h3><p>Ahora que sabes lo que es Docker, ¡es momento de crear tu primera aplicación!</p><p>El propósito de este corto tutorial es crear un programa de Python que muestre una oración. Este programa deberá ser lanzado a través de un <em>Dockerfile.</em> </p><p>Verás que no es tan complicado una vez que entiendas el proceso. </p><blockquote>Nota: No necesitarás instalar Python en tu ordenador. Será el entorno Docker el que contenga Python para poder ejecutar tu código.</blockquote><h4 id="1-instala-docker-en-tu-m-quina"><strong><strong>1. Instal</strong>a<strong> Docker </strong>en tu máquina</strong></h4><p><em>Para <em>Ubuntu:</em></em></p><p>Primero, actualiza tus paquetes:</p><pre><code>$ sudo apt update</code></pre><p>Siguiente, instala Docker con apt-get:</p><pre><code>$ sudo apt install docker.io</code></pre><p>Finalmente, verifica que Docker se ha instalado correctamente:</p><pre><code>$ sudo docker run hello-world</code></pre><ul><li><em>Para<em> MacOSX:</em></em> puedes seguir <a href="https://docs.docker.com/docker-for-mac/install/" rel="noopener">este enlace</a>.</li><li><em>Para<em> Windows:</em></em> puedes seguir <a href="https://docs.docker.com/docker-for-windows/install/" rel="noopener">este enlace</a>.</li></ul><h4 id="2-crea-tu-proyecto"><strong><strong>2. Crea</strong> tu proyecto</strong></h4><p>Para crear tu primera aplicación Docker, te invito a crear una carpeta en tu computadora. Debe contener los siguientes dos archivos:</p><ul><li>Un archivo ‘<em><em>main.py</em></em>’ (un archivo python que tendrá el código a ejecutar).</li><li>Un archivo ‘<em><em>Dockerfile</em></em>’ (un archivo Docker que tendrá las instrucciones necesarias para crear el entorno).</li></ul><p>Normalmente, tendrías esta arquitectura de carpeta: </p><pre><code>.
├── Dockerfile
└── main.py
0 directories, 2 files</code></pre><h4 id="3-edita-el-archivo-python"><strong><strong>3. Edit</strong>a el archivo Python</strong></h4><p>Puedes agregar el siguiente código a tu archivo ‘<em><em>main.py</em></em>’:</p><pre><code class="language-python">#!/usr/bin/env python3

print("¡Docker es mágico!")</code></pre><p>Nada excepcional, pero una vez que veas en tu terminal "¡Docker es mágico!", sabrás que tu Docker está funcionando. </p><h4 id="3-edita-el-archivo-docker"><strong><strong>3. Edit</strong>a<strong> </strong>el archivo Docker</strong></h4><p>Un poco de teoría: lo primero que hay que hacer cuando quieres crear tu Dockerfile es preguntarte qué quieres hacer. Nuestro objetivo aquí es lanzar código Python. </p><p>Para ello, nuestro Docker debe contener todas las dependencias necesarias para lanzar Python. Un Linux (Ubuntu) con Python instalado en él debería ser suficiente.</p><p>El primer paso para crear un archivo Docker es acceder al sitio web <a href="https://hub.docker.com/" rel="noopener">DockerHub</a>. Este sitio contiene muchas imágenes prediseñadas para ahorrarte tiempo (por ejemplo: todas las imágenes para Linux o lenguajes de código). </p><p>En nuestro caso, escribiremos ‘Python’ en la barra de búsqueda. El primer resultado es la imagen oficial creada para ejecutar Python. Perfecto, ¡lo usaremos!</p><pre><code class="language-python"># Un archivo docker (dockerfile) comienza siempre importanto la imagen base. 
# Utilizamos la palabra clave 'FROM' para hacerlo.
# En nuestro ejemplo, queremos importar la imagen de python.
# Así que escribimos 'python' para el nombre de la imagen y 'latest' para la versión.
FROM python:latest

# Para lanzar nuestro código python, debemos importarlo a nuestra imagen.
# Utilizamos la palabra clave 'COPY' para hacerlo.
# El primer parámetro 'main.py' es el nombre del archivo en el host.
# El segundo parámetro '/' es la ruta donde poner el archivo en la imagen.
# Aquí ponemos el archivo en la carpeta raíz de la imagen. 
COPY main.py /

# Necesitamos definir el comando a lanzar cuando vayamos a ejecutar la imagen.
# Utilizamos la palabra clave 'CMD' para hacerlo.
# El siguiente comando ejecutará "python ./main.py".
CMD [ "python", "./main.py" ]</code></pre><h4 id="4-crea-la-imagen-docker"><strong><strong>4. Crea</strong> la imagen Docker</strong></h4><p>Una vez que tu código esté listo y el <em>Dockerfile</em> está escrito, todo lo que tienes que hacer es crear tu imagen para contener tu aplicación.</p><pre><code>$ docker build -t python-test . </code></pre><p>La opción ’<em><em>-t</em></em>’ te permite definir el nombre de tu imagen. En nuestro caso hemos elegido ’<em><em>python-test</em></em>’ pero le puedes poner lo que quieras. </p><h4 id="5-corre-la-imagen-docker"><strong><strong>5. </strong>Corre la imagen Docker</strong></h4><p>Una vez la imagen esté creada, tu código está listo para lanzar.</p><pre><code>$ docker run python-test</code></pre><p>Tienes que poner el nombre de tu imagen después de un ‘<em><em>docker run</em></em>’.</p><p>Ya está, eso es todo. Normalmente, deberías ver "¡Docker es mágico!", en tu terminal.</p><h3 id="el-c-digo-est-disponible"><strong>El código está disponible</strong></h3><p>Si quieres el código completo para encontrarlo fácilmente o ejecutarlo, lo he puesto a tu disposición en mi GitHub.</p><p><strong><strong>-&gt;</strong></strong> <a href="https://github.com/gael-thomas/Docker-First-Application-example">GitHub: Ejemplo de primera aplicación en Docker</a> </p><h3 id="comandos-tiles-para-docker"><strong>Comandos útiles para Docker</strong></h3><p>Antes de dejarte, he preparado una lista de comandos que te pueden ser útiles en Docker:</p><ul><li>Lista de imágenes</li></ul><pre><code>$ docker image ls</code></pre><ul><li>Elimina una imagen específica</li></ul><pre><code>$ docker image rm [nombre de la imagen]</code></pre><ul><li>Elimina todas las imágenes existentes</li></ul><pre><code>$ docker image rm $(docker images -a -q)</code></pre><ul><li>Lista todos los contenedores existentes (en funcionamiento y no en funcionamiento)</li></ul><pre><code>$ docker ps -a</code></pre><ul><li>Detener un contenedor específico</li></ul><pre><code>$ docker stop [nombre del contenedor]</code></pre><ul><li>Detener todos los contenedores en funcionamiento</li></ul><pre><code>$ docker stop $(docker ps -a -q)</code></pre><ul><li>Elimina un contenedor específico (solo si está detenido)</li></ul><pre><code>$ docker rm [nombre del contenedor]</code></pre><ul><li>Elimina todos los contenedores (solo si están detenidos)</li></ul><pre><code>$ docker rm $(docker ps -a -q)</code></pre><ul><li>Mostrar los registros de un contenedor</li></ul><pre><code>$ docker logs [nombre del contenedor]</code></pre><h2 id="conclusi-n"><strong><strong>Conclusi</strong>ón</strong></h2><p>Puedes consultar este artículo cada vez que necesites un ejemplo sencillo y concreto sobre cómo crear tu primera aplicación Docker. Si tienes alguna pregunta o comentario, no dudes en preguntar. </p><p>Si quieres más contenido como este, puedes seguirme en Twitter, donde tuiteo sobre desarrollo web, superación personal y mi viaje como desarrollador full stack. </p><p>Puedes encontrar otros artículos como este en mi website: <a href="https://www.freecodecamp.org/news/a-beginners-guide-to-docker-how-to-create-your-first-docker-application-cc03de9b639f/herewecode.io">herewecode.io</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Los mejores ejemplos de SQL ]]>
                </title>
                <description>
                    <![CDATA[ SQL son las siglas en inglés para "Structured Query Language" (lenguaje de consulta estructurado). Se utiliza con todo tipo de bases de datos relacionales. Ejemplo de sintaxis básica de SQL Esta guía proporciona una descripción básica y de alto nivel de la sintaxis de las declaraciones SQL. SQL es un ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/los-mejores-ejemplos-de-sql/</link>
                <guid isPermaLink="false">62c1cd2ec5b22c08edf8d489</guid>
                
                    <category>
                        <![CDATA[ SQL ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ María Braeuner ]]>
                </dc:creator>
                <pubDate>Sun, 17 Jul 2022 19:26:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/07/sql-image.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/sql-example/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Best SQL Examples</a>
      </p><p>SQL son las siglas en inglés para "Structured Query Language" (lenguaje de consulta estructurado). Se utiliza con todo tipo de bases de datos relacionales.</p><h2 id="ejemplo-de-sintaxis-b-sica-de-sql">Ejemplo de sintaxis básica de SQL</h2><p>Esta guía proporciona una descripción básica y de alto nivel de la sintaxis de las declaraciones SQL.</p><p>SQL es un estándar internacional (ISO) pero encontrarás muchas diferencias entre las implementaciones. Esta guía utiliza MySQL como ejemplo. Si utilizas uno de los muchos otros Gestores de Bases de Datos Relacionales (DBMS por sus siglas en inglés) tendrás que consultar el manual de ese DBMS si es necesario. </p><h3 id="lo-que-cubriremos">Lo que cubriremos</h3><ul><li>Uso (establece qué base de datos utilizarán las instrucciones)</li><li>Cláusulas <em>Select </em>y <em>From</em></li><li>Cláusula <em>Where</em> (<em>and/or, IN, Between, LIKE)</em></li><li><em>Order by (</em>ASC, DESC)</li><li><em>Group by </em>y <em>Having</em></li></ul><h3 id="c-mo-se-utiliza">Cómo se utiliza</h3><p>Se utiliza para seleccionar la base de datos que contiene las tablas para tus declaraciones SQL:</p><pre><code class="language-SQL">use fcc_sql_guides_database; --selecciona la base de datos de muestras guía</code></pre><h3 id="cl-usulas-select-y-from">Cláusulas <em>Select</em> y <em>From</em></h3><p>La cláusula <em>Select</em> se utiliza normalmente para determinar qué columnas de los datos se quieren mostrar en los resultados. También hay opciones que puedes usar para mostrar datos que no son una columna de la tabla.</p><p>Este ejemplo muestra dos columnas <em>seleccionadas</em> de la tabla "<em>student", </em>y dos columnas calculadas. La primera de las columnas calculadas es un número sin sentido, y la otra es la fecha del sistema.</p><pre><code class="language-SQL">SELECT studentID, FullName, 3+2 as five, now() as currentDate
FROM student;</code></pre><h3 id="cl-usula-where-and-or-in-between-y-like-">Cláusula <em><code>Where</code></em> (<em>and / or, IN, Between</em> y <em>LIKE</em>)</h3><p>La cláusula <em><code>Where</code></em> se utiliza para limitar el número de filas devueltas. </p><p>En este caso se utilizarán las cinco condiciones en un ejemplo un tanto ridículo de la cláusula <em><code>Where</code>.</em></p><p>Compara este resultado con las declaraciones SQL anteriores para seguir esta lógica. </p><p>Se mostrarán las filas que:</p><ul><li>Tengan el ID del estudiante (<em>studentID</em>) entre 1 y 5 (inclusivo)</li><li>o <em>studentID </em>= 8</li><li>o tengan "Maximo" en el nombre</li></ul><p>El siguiente ejemplo es similar, pero especifica además que si alguno de los estudiantes tiene determinadas puntuaciones de SAT (1000, 1400), no se mostrarán: </p><pre><code class="language-SQL">SELECT studentID, FullName, sat_score, recordUpdated
FROM student
WHERE (
	studentID between 1 and 5
    	or studentID = 8
    	or FullName like '%Maximo%'
    	)
    	and sat_score NOT in (1000,1400);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/syntax02.jpg" class="kg-image" alt="syntax02" width="414" height="147" loading="lazy"></figure><h3 id="order-by-asc-desc-"><em><code>Order By</code> (ASC, DESC)</em></h3><p><em><code>Order By</code> </em>(ordenar por) nos da la opción de ordenar los datos resultantes por uno o más elementos de la sección <em><code>SELECT</code>. </em>Aquí está la misma lista de arriba, pero ordenada por el nombre completo (<em>FullName</em>) de los estudiantes. El orden por defecto es ascendente (ASC), pero para ordenar en el orden opuesto (descendente) se utiliza DESC, como en el ejemplo siguiente:</p><pre><code class="language-SQL">SELECT studentID, FullName, sat_score
FROM student
WHERE (studentID between 1 and 5 -- inclusive
	or studentID = 8
    or FullName like '%Maximo%'
    and sat_score NOT in (1000, 1400)
  order by FullName DESC;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/syntax03.jpg" class="kg-image" alt="syntax03" width="302" height="144" loading="lazy"></figure><h3 id="group-by-y-having"><em><code>Group By</code> </em>y<em> <code>Having</code></em></h3><p><em><code>Group By</code></em> (agrupar) nos da una forma de combinar filas y agregar datos. La cláusula <em>Having </em>es como la cláusla <em><code>Where</code></em> anterior, excepto que actúa sobre los datos agrupados. </p><p>Estos datos provienen de los datos de las contribuciones a la campaña que hemos estado utilizando en algunas de estas guías.</p><p>Esta declaración de SQL responde a la pregunta: "¿qué candidatos recibieron el mayor número de contribuciones (no la cantidad de dólares, sino el recuento (*)) en 2016, pero sólo los que tuvieron más de 80 contribuciones?"</p><p>Al ordenar estos datos en orden descendente (DESC), los candidatos con el mayor número de contribuciones se sitúan al principio de la lista.</p><pre><code class="language-SQL">SELECT Candidate, Election_year, sum(Total_$), count(*)
FROM combined_party_data
WHERE Election_year = 2016
GROUP BY Candidate, Election_year
	having count(*) &gt; 80
    order by count(*) DESC;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/syntax04.jpg" class="kg-image" alt="syntax04" width="573" height="176" loading="lazy"></figure><p>Como con todas estas cosas de SQL, hay MUCHO MÁS de lo que encuentras en esta guía introductoria. Espero que esto al menos te dé lo suficiente para empezar. Por favor, consulta el manual de tu gestor de base de datos y diviértete probando diferentes opciones por ti mismo.</p><h2 id="preguntas-comunes-sobre-sql-en-las-entrevistas">Preguntas comunes sobre SQL en las entrevistas</h2><h3 id="-qu-es-un-inner-join-en-sql">¿Qué es un <em><code>inner join</code></em> en SQL?</h3><p>Es el tipo de unión por defecto si no se especifica ninguna unión. Devuelve todas las filas en las que hay al menos una coincidencia en ambas tablas. </p><pre><code class="language-SQL">SELECT * FROM A x JOIN B y ON y.aId = x.Id</code></pre><h3 id="-qu-es-un-left-join-en-sql">¿Qué es un <em><code>left join</code> </em>en SQL?</h3><p>Un <em>left join</em> devuelve todas las filas de la tabla a la izquierda (LEFT) y las filas coincidentes de la tabla a la derecha (RIGHT). Las filas de la tabla a la izquierda se devolverán aunque no haya una coincidencia en la tabla a la dercha. Las filas de la tabla a la izquierda sin coincidencias en la tabla derecha tendrán valores nulos (<code>null</code>) para la tabla a la derecha.</p><pre><code class="language-SQL">SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id</code></pre><h3 id="-qu-es-un-right-join-en-sql">¿Qué es un <em><code>right join</code></em> en SQL?</h3><p>Un <em>right join</em> devuelve todas las filas de la tabla a la derecha, y las filas coincidentes de la tabla a la izquierda. Contrario al <em>left join</em>, este devuelve todas las filas de la tabla a la derecha incluso cuando no haya ninguna coincidencia en la tabla izquierdo. Las filas de la tabla derecho que no tengan coincidencias en la tabla izquierdo tendrán valores <code>null</code> para las columnas de la tabla izquierdo.</p><pre><code class="language-SQL">SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id</code></pre><h3 id="-qu-es-un-full-join-en-sql">¿Qué es un <em><code>full join</code> </em>en SQL?</h3><p>Un <em>full join</em> devuelve todas las filas en donde hay una coincidencia en cualquiera de las tablas. Es decir, si hay filas en la tabla izquierdo que no tienen coincidencias en la tabla derecho, se incluirán. Así como si hay filas en la tabla derecho que no tienen coincidencias en la tabla izquierdo, también se incluirán. </p><pre><code class="language-SQL">SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName</code></pre><h3 id="-cu-l-es-el-resultado-del-siguiente-comando">¿Cuál es el resultado del siguiente comando?</h3><pre><code class="language-SQL">DROP VIEW view_name</code></pre><p>Aquí se producirá un error porque no podemos realizar una operación DML en una vista. </p><h3 id="-se-puede-realizar-un-rollback-despu-s-de-utilizar-el-comando-alter">¿Se puede realizar un <em>rollback </em>después de utilizar el comando <em><code>ALTER</code></em>?</h3><p>No, porque <em><code>ALTER</code></em> es un comando DDL y el servidor Oracle realiza un <em><code>COMMIT</code></em> automático cuando se ejecutan las declaraciones DDL.</p><h3 id="-cu-l-es-la-nica-restricci-n-que-aplica-reglas-a-nivel-de-columna">¿Cuál es la única restricción que aplica reglas a nivel de columna?</h3><p><em><code>NOT NULL</code></em> es la única restricción que funciona a nivel de columna.</p><h3 id="-cu-les-son-las-pseudo-columnas-en-sql-da-algunos-ejemplos-">¿Cuáles son las pseudo-columnas en SQL? Da algunos ejemplos.</h3><p>Una pseudo-columna es una función que devuelve un valor generado por el sistema. La razón por la que se conoce así es porque una pseudo-columna es un valor asignado por Oracle que se utiliza en el mismo contexto que una columna de la base de datos Oracle, pero que no se almacena en el disco.</p><pre><code class="language-SQL">ROWNUM, ROWID, USER, CURRVAL, NEXTVAL etc</code></pre><p>Crea un usuario my723acct con contraseña kmd26pt. Utiliza los <em>tablespaces </em>de datos de usuario y datos temporales proporcionados por PO8 y proporciona a este usuario 10M de espacio de almacenamiento en datos de usuario (<em>user_data</em>) y 5M de espacio de almacenamiento en datos temporales (<em>temporary_data</em>).</p><pre><code class="language-SQL">CREATE USER my723acct IDENTIFIED BY kmd26pt
DEFAULT TABLESPACE user_data
TEMPORARY TABLESPACE temporary_data
QUOTA 10M on user_data QUOTA 5M on temporary_data</code></pre><h3 id="cree-el-role-role_tables_and_views">Cree el <em><code>ROLE</code></em> <em>role_tables_and_views</em></h3><pre><code class="language-SQL">CREATE ROLE role_tables_and_views</code></pre><p>Concede al rol de la pregunta anterior los privilegios para conectarse a la base de datos y los privilegios para crear tablas y vistas. </p><p>El privilegio para conectarse a la base de datos es <em><code>CREATE SESSION</code></em>. El privilegio para crear una tabla es <em><code>CREATE TABLE</code>. </em>El privilegio para crear una vista es <em><code>CREATE VIEW</code>. </em></p><pre><code class="language-SQL">GRANT Create session, create table, create view TO role_tables_and_views</code></pre><h3 id="concede-el-role-de-la-pregunta-anterior-a-los-usuarios-anny-y-rita">Concede el <em><code>ROLE</code> </em>de la pregunta anterior a los usuarios anny y rita</h3><pre><code class="language-SQL">GRANT role_tables_and_views TO anny, rita</code></pre><p>Escribe un comando para cambiar la contraseña del usuario rita de abcd a dfgh</p><pre><code class="language-SQL">ALTER USER rita IDENTIFIED BY dfgh</code></pre><p>Los usuarios rita y anny no tienen privilegios <em><code>SELECT</code> </em>en la tabla de inventario (<em>INVENTORY</em>) que fue creado por SCOTT. Escribe un comando para permitir que SCOTT le conceda a los usuarios privilegios <em><code>SELECT</code> </em>en estas tablas.</p><pre><code class="language-SQL">GRANT select ON inventory TO rita, anny</code></pre><p>El usuario rita ha sido transferida y ya no necesita el privilegio que se le concedió a través del <em><code>ROLE</code> </em>role_tables_and_views. Escribe un comando para quitarle los privilegios que se le habían otorgado anteriormente, excepto que aún pueda conectarse a la base de datos.</p><pre><code>REVOKE select ON scott.inventory FROM rita
REVOKE create table, create view FROM rita</code></pre><p>El usuario rita, que había sido transferida, ahora se traslada a otra empresa. Dado que los objetos que creó ya no son útiles, escriba un comando para eliminar este usuario y todos sus objetos.</p><p>Aquí la opción <em><code>CASCADE</code> </em>es necesaria para eliminar todos los objetos del usuario en la base de datos.</p><pre><code>DROP USER rita CASCADE</code></pre><h3 id="escribe-una-consulta-sql-para-encontrar-el-en-simo-salario-m-s-alto-de-la-tabla">Escribe una consulta SQL para encontrar el enésimo salario más alto de la tabla</h3><pre><code>SELECT TOP 1 Salary
FROM (
	SELECT DISTINCT TOP N Salary
    FROM Employee
    ORDER BY Salary DESC
    )
ORDER BY Salary ASC</code></pre><h2 id="declaracion-sql-create-view">Declaracion SQL <em>Create View</em></h2><h3 id="-qu-es-una-view-vista-">¿Qué es una <em>View</em> (Vista)?</h3><p>Una Vista es un objeto de la base de datos que presenta los datos existentes en uno o más tablas. Las Vistas se utilizan de manera similar a las tablas, pero no contienen ningún dato. Sólo "apuntan" a los datos que existen en otra parte (tablas o vistas, por ejemplo).</p><h3 id="-por-qu-nos-gustan">¿Por qué nos gustan?</h3><ul><li>Vistas son una forma de limitar los datos presentados. Por ejemplo, los datos del departamento de recursos humanos filtrados para presentar sólo información no sensible. Información sensible en este caso podrían ser números de seguridad social, el sexo del empleado, tasa de pago, dirección de domicilio, etc.</li><li>Los datos complejos de más de una tabla pueden combinarse en una única "Vista". Esto puede facilitar la vida a sus analistas de negocio y programadores. </li></ul><h3 id="consejos-de-seguridad-importantes">Consejos de seguridad importantes</h3><ul><li>Las Vistas son gestionadas por el sistema. Cuando los datos en las tablas relacionados se modifican, añaden o actualizan, la Vista es actualizada por el sistema. Queremos utilizarlas sólo cuando sea necesario gestionar el uso de los recursos del sistema. </li><li>En MySQL, cambios en el diseño de una tabla (es decir, columnas nuevas o eliminadas) realizados DESPUÉS de la creación de una Vista no se actualizan en la propia Vista. La Vista tendría que ser actualizada o recreada. </li><li>Las Vistas son uno de los cuatro tipos de objetos estándar de las bases de datos. Los otros son las tablas, procedimientos almacenados y funciones.</li><li>Las Vistas usualmente pueden ser tratadas como una tabla, pero las actualizaciones están limitadas o no están disponibles cuando la Vista contiene más de una tabla. </li><li>Hay muchos otros detalles sobre las Vistas que están fuera del alcance de esta guía introductoria. Dedique tiempo al manual de su gestor de base de datos y diviértase con este poderoso objeto SQL.</li></ul><p>Sintaxis de la declaración <em>Create View </em>(MySQL)</p><pre><code class="language-SQL">CREATE
	[OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = {user | CURRENT_USER}]
    [SQL SECURITY {DESINGER | INVOKER}]
    VIEW view_name[(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]</code></pre><p>Esta guia cubrirá esta parte de la declaración:</p><pre><code class="language-SQL">CREATE
	VIEW view_name[(column_list)]
    AS select_statement</code></pre><h3 id="ejemplo-de-creacion-de-una-vista-view-a-partir-de-las-tablas-de-estudiantes-student-">Ejemplo de creacion de una Vista (<em>View</em>) a partir de las tablas de estudiantes (<em>student</em>)</h3><p>Notas:</p><ul><li>El nombre de la Vista tiene una "v" al final. Se recomienda que el nombre de la Vista indique que es una vista de alguna manera para facilitar la vida a los programadores y administradores de la base de datos. Tu tienda de informática debe tener sus propias reglas para nombrar los objetos.</li><li>Las columnas de la Vista están limitadas por la cláusula <em>SELECT </em> y las filas de datos por la cláusula <em>WHERE.</em></li><li>El carácter "`" alrededor de los nombres de las Vistas es necesario debido al "-" en los nombres. MySQL informa de un error sin ellos. </li></ul><pre><code class="language-SQL">create view `programming-students-v` as
SELECT FullName, programOfStudy
FROM student
WHERE programOfStudy = 'Programming';


SELECT * FROM `programming-students-v`; </code></pre><h3 id="ejemplo-de-uso-de-una-vista-para-combinar-datos-de-m-s-de-una-tabla">Ejemplo de uso de una Vista para combinar datos de más de una tabla</h3><p>Se ha agregado una tabla demográfico de estudiantes a la base de datos para demostrar este uso. Esta Vista combinará estas tablas. </p><p>Notas:</p><ul><li>Para "unir" tablas, las tablas deben tener campos en común (normalmente claves primarias) que identifiquen de forma única cada fila. En este caso es el ID del estudiante.</li><li>Fíjese en el "alias" dado a cada tabla ("s" para estudiante y "sc" para contacto con el estudiante). Se trata de una herramienta para acortar los nombres de las tablas y facilitar la identificación de la tabla que se está utilizando. Es más fácil que escribir repetidamente nombres de tablas largas. En este ejemplo, era necesario porque <em>studentID </em>es el mismo nombre de columna en ambas tablas, y el sistema presentaría un "error de nombre de columna ambiguo" sin especificar qué tabla utilizar. </li></ul><h3 id="gu-a-del-operador-between">Guía del operador <em>Between</em> </h3><p>El operador <em>BETWEEN </em>es útil gracias al Optimizador de Consultas SQL (<em>SQL Query Optimizer</em>). Aunque <em>BETWEEN </em>es funcionalmente lo mismo que: x &lt;= element &lt;= y, el Oprimizador de Consultas reconocerá este comando más rápidamente, y ha optimizado el código para ejecutarlo.</p><p>Este operador se usa en una cláusula <em>WHERE </em>o en una cláusula <em>GROUP BY HAVING.</em></p><p>Se seleccionan las filas que tienen un valor mayor que el valor mínimo y menos que el valor máximo. </p><p>Es importante tener en cuenta que los valores introducidos en el comando se excluyen del resultado. Obtenemos sólo lo que está entre ellos.</p><p>Esta es la sintaxis para utilizar la función en una cláusula <em>WHERE:</em></p><pre><code>SELECT field1, testfield
FROM table1
WHERE testField BETWEEN min and max</code></pre><p>Y aquí un ejemplo utilizando la tabla de estudiantes y la cláusula <em>WHERE</em>:</p><pre><code>-- sin clausula WHERE
SELECT studentID, FullName, studentID
FROM student;

-- clausula WHERE con BETWEEN
SELECT studentID, FullName, studentID
FROM student
WHERE studentID between 2 and 7;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/between01.jpg" class="kg-image" alt="between01" width="567" height="206" loading="lazy"></figure><p>Aquí hay un ejemplo usando la tabla de fondos de campaña y la cláusula <em>HAVING. </em>Esto devolverá las filas en las que la suma de las donaciones de un candidato esté entre 3 y 18 millones de dólares, basándose en la cláusula <em>HAVING</em> en la parte <em>GROUP BY </em>de la declaración. Más información sobre la agregación en esa guía.</p><pre><code>SELECT Candidate, Office_Sought, Election_Year, format(sum(TOTAL_$),2)
FROM combined_party_data
WHERE Election_Year = 2016
GROUP BY Candidate, Office_Sought, Election_Year
HAVING sum(Total_$) BETWEEN 3000000 and 18000000
ORDER BY sum(Total_$) DESC;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/between02.jpg" class="kg-image" alt="between02" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/07/between02.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/07/between02.jpg 680w" width="680" height="147" loading="lazy"></figure><p>Una tabla es un grupo de datos almacenados en una base de datos. </p><p>Para crear una tabla en una base de datos se utiliza la declaración <em><code>CREATE TABLE</code>. </em>Se le da un nombre a la tabla y una lista de columnas con sus tipos de datos. </p><pre><code class="language-SQL">CREATE TABLE TABLENAME(Attribute1 Datatype, Attribute2 Datatype, ...);</code></pre><p>Aquí hay un ejemplo de creación de una tabla llamado Persona:</p><pre><code class="language-SQL">CREATE TABLE Persona(
	Id int not null,
    Name varchar not null,
    DateOfBirth date not null,
    Gender bit not null,
    PRIMARY KEY(Id)
);</code></pre><p>En el ejemplo anterior, cada Persona tiene un Nombre (<em>Name</em>), fecha de nacimiento (<em>DateOfBirth</em>), y género (<em>Gender</em>). La columna Id es la clave que identifica a una persona en la tabla. Se utiliza la palabra clave <code>PRIMARY KEY</code> para configurar una o más columnas como claves primarias. </p><p>Una columna puede ser <code>not null</code> o <code>null</code> indicando si es obligatoria o no.</p><p>Las consultas de inserción son una forma de insertar datos en una tabla. Digamos que hemos creado una tabla utilizando:</p><pre><code>CREATE TABLE tabla_ejemplo(nombre varchar(255), edad int)</code></pre><p>tabla_ejemplo</p><pre><code>Nombre | Edad
  ---  |  ---</code></pre><p>Ahora para agregar algunos datos a esta tabla, utilizaremos <em>INSERT </em>de la siguiente manera:</p><pre><code class="language-SQL">INSERT INTO tabla_ejemplo(column1, column2) VALUES ("Andrew",23)</code></pre><p>tabla_ejemplo</p><pre><code>Nombre | Edad
  ---  | ---
Andrew | 23</code></pre><p>Incluso lo siguiente funciona, pero siempre es una buena práctica especificar qué datos van en cada columna. </p><pre><code>INSERT INTO tabla_nombre VALUES("John",28)</code></pre><p>tabla_ejemplo</p><pre><code>Nombre | Edad
  ---  | ---
Andrew | 23
John   | 28</code></pre><p><em>AND</em> se utiliza en una cláusula <em>WHERE </em>o en una cláusula <em>GROUP BY HAVING </em>para limitar las filas devueltas por la declaración ejecutada. Se utiliza <em>AND</em> cuando se requiera que se cumpla más de una condición. </p><p>Utilizremos la tabla de estudiantes para presentar ejemplos.</p><p>Aquí está la tabla de estudiantes sin una cláusula WHERE:</p><pre><code>SELECT * FROM student;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator01.jpg" class="kg-image" alt="and_operator01" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/07/and_operator01.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator01.jpg 760w" sizes="(min-width: 720px) 720px" width="760" height="247" loading="lazy"></figure><p>Ahora se añade la cláusula <em>WHERE </em>para mostrar sólo los alumnos de programación:</p><pre><code>SELECT * 
FROM student
WHERE programsOfStudy = 'Programming';</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator02.jpg" class="kg-image" alt="and_operator02" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/07/and_operator02.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator02.jpg 790w" sizes="(min-width: 720px) 720px" width="790" height="179" loading="lazy"></figure><p>Ahora la clausula <em>WHERE </em>se actualiza con <em>AND </em>para mostrar los resultados de los estudiantes de programación que también tienen una puntuación SAT superior a 800:</p><pre><code>SELECT *
FROM student
WHERE programOfStudy = 'Programming'
AND sat_score &gt; 800;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator03.jpg" class="kg-image" alt="and_operator03" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/07/and_operator03.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator03.jpg 790w" sizes="(min-width: 720px) 720px" width="790" height="179" loading="lazy"></figure><p>Este es un ejemplo más complejo de la tabla de contribuciones de campaña. Este ejemplo tiene una cláusula <em>GROUP BY </em>con una cláusula <em>HAVING </em>que utiliza un <em>AND </em>para restringir los registros devueltos a los candidatos de 2016 con contribuciones entre 3 y 18 millones de dólares en total.</p><pre><code>SELECT Candidate, Office_Sought, Election_Year, FORMAT(sum(Total_$),2)
FROM combined_party_data
WHERE Office_sought = 'PRESIDENT / VICE PRESIDENT'
GROUP BY Candidate, Office_Sought, Election_Year
HAVING Election_Year = 2016 AND sum(Total_$) BETWEEN 3000000 and 18000000
ORDER BY sum(Total_$) DESC;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator06.jpg" class="kg-image" alt="and_operator06" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/07/and_operator06.jpg 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/07/and_operator06.jpg 710w" width="710" height="175" loading="lazy"></figure><h2 id="c-mo-utilizar-order-by-en-sql">Cómo utilizar <em>ORDER BY </em>en SQL</h2><h3 id="order-by-asc-desc--1"><em>Order By (ASC, DESC)</em></h3><p><em>ORDER BY</em> nos da una forma de ordenar el conjunto de resultados por uno o más elementos de la sección <em>SELECT</em>. A continuación se muestra un SQL que ordena a los estudiantes por nombre (<em>FullName</em>) en orden descendente. El orden por defecto es ascendente (ASC) por lo que para ordenar en el orden contrario se utiliza DESC. </p><pre><code>SELECT studentId, FullName, sat_score
FROM student
ORDER BY FullName DESC;</code></pre><pre><code>+-----------+------------------------+-----------+
| studentID | FullName               | sat_score |
+-----------+------------------------+-----------+
|         2 | Teri Gutierrez         |       800 |
|         3 | Spencer Pautier        |      1000 |
|         6 | Sophie Freeman         |      1200 |
|         9 | Raymond F. Boyce       |      2400 |
|         1 | Monique Davis          |       400 |
|         4 | Louis Ramsey           |      1200 |
|         7 | Edgar Frank "Ted" Codd |      2400 |
|         8 | Donald D. Chamberlin   |      2400 |
|         5 | Alvin Greene           |      1200 |
+-----------+------------------------+-----------+
9 rows in set (0.00 sec)</code></pre><p>Aquí está la lista de estudiantes actual, no ordenada, para compararla con la anterior: </p><pre><code>SELECT studentID, FullName, sat_score, rcd_updated
FROM student;</code></pre><pre><code>+-----------+------------------------+-----------+---------------------+
| studentID | FullName               | sat_score | rcd_updated         |
+-----------+------------------------+-----------+---------------------+
|         1 | Monique Davis          |       400 | 2017-08-16 15:34:50 |
|         2 | Teri Gutierrez         |       800 | 2017-08-16 15:34:50 |
|         3 | Spencer Pautier        |      1000 | 2017-08-16 15:34:50 |
|         4 | Louis Ramsey           |      1200 | 2017-08-16 15:34:50 |
|         5 | Alvin Greene           |      1200 | 2017-08-16 15:34:50 |
|         6 | Sophie Freeman         |      1200 | 2017-08-16 15:34:50 |
|         7 | Edgar Frank "Ted" Codd |      2400 | 2017-08-16 15:35:33 |
|         8 | Donald D. Chamberlin   |      2400 | 2017-08-16 15:35:33 |
|         9 | Raymond F. Boyce       |      2400 | 2017-08-16 15:35:33 |
+-----------+------------------------+-----------+---------------------+
9 rows in set (0.00 sec)</code></pre><p>Como con todas estas cosas de SQL, hay mucho más de lo que hay en esta guía introductoria. </p><p>Espero que esto al menos te dé lo suficiente para empezar.</p><p>Por favor, consulta el manual de tu gestor de base de datos y diviértete probando diferentes opciones por ti mismo. </p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Etiqueta select de HTML: Cómo hacer un menú desplegable o lista combinada ]]>
                </title>
                <description>
                    <![CDATA[ La etiqueta HTML select se utiliza para crear menús desplegables para que los usuarios puedan seleccionar el valor que deseen. Es una función instrumental para recopilar datos que se envían a un servidor.  La etiqueta select normalmente va dentro de un elemento de formulario form, con las opciones a ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/etiqueta-select-de-html-como-hacer-un-menu-desplegable-o-lista-combinada/</link>
                <guid isPermaLink="false">62bd907bc5b22c08edf8c9c8</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ María Braeuner ]]>
                </dc:creator>
                <pubDate>Fri, 08 Jul 2022 02:09:01 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/06/HTML-select-tag-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/html-select-tag-how-to-make-a-dropdown-menu-or-combo-list/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Select Tag – How to Make a Dropdown Menu or Combo List</a>
      </p><p>La etiqueta HTML <em>select</em> se utiliza para crear menús desplegables para que los usuarios puedan seleccionar el valor que deseen. Es una función instrumental para recopilar datos que se envían a un servidor. </p><p>La etiqueta <em>select</em> normalmente va dentro de un elemento de formulario <em>form,</em> con las opciones a elegir codificados dentro de otra etiqueta, <code>&lt;option&gt;</code>. También puede ser un elemento independiente que seguiría asociado a un formulario con uno de sus atributos especiales, <code>form</code>.</p><p>En este tutorial, te guiaré a través del proceso para crear un menú desplegable con la etiqueta <em>select</em> para que puedas empezar a utilizarla para recoger datos en tus proyectos de programación. También tocaré como diseñar la etiqueta de selección porque es notoriamente difícil de diseñar.</p><h2 id="atributos-de-la-etiqueta-select"><strong>Atributos de la etiqueta <em>select</em></strong></h2><p>Antes de profundizar en cómo crear un menú desplegable con la etiqueta <em>select</em>, necesitamos hablar sobre los atributos que toma esta etiqueta.</p><p>Estos son sus atributos:</p><ul><li><em>name</em>: Es necesario adjuntar el nombre a cada control de formulario, ya que se utiliza para referenciar los datos después de que se envíen al servidor.</li><li><em>multiple</em>: Este atributo le permite al usuario seleccionar múltiples opciones del menú desplegable.</li><li><em>required</em>: Esto se utiliza normalmente para la validación. Con este atributo, el formulario no se enviará a menos que el usuario seleccione al menos una opción del menú desplegable.</li><li><em>disabled</em>: Este atributo impide al usuario interactuar con las opciones.</li><li><em>size</em>: Expresado en números, este atributo de tamaño se utiliza para especificar cuántas opciones serán visibles a la vez.</li><li><em>autofocus</em>: Este atributo se usa en todas las entradas de formularios, incluida la selección (<em>select</em>), para especificar que cierta entrada (<em>input)</em> debe enfocarse por defecto cuando se cargue la página.</li></ul><h2 id="c-mo-crear-un-men-desplegable-con-la-etiqueta-select"><strong>Cómo crear un menú desplegable con la etiqueta Select</strong></h2><p>Para crear un menú desplegable con la etiqueta <em>select</em>, primero necesitas un elemento de formulario <em>form.</em> Esto es porque también tendrás un botón de envío dentro del elemento de formulario para enviar los datos al servidor.</p><pre><code class="language-html">&lt;form action="#"&gt;
      &lt;label for="lang"&gt;Lenguaje&lt;/label&gt;
      &lt;select name="lenguajes" id="lang"&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
</code></pre><p>He incluido algo de CSS sencillo para centrar el menú desplegable y el botón, y darle un color de fondo gris claro:</p><pre><code class="language-css">body {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
     height: 100vh;
     background-color: #f1f1f1;
   }

input {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
   }
</code></pre><p>Para hacerlo más elaborado y accesible, también puedes adjuntar la caja de selección a un elemento de etiqueta <em>label</em>, para que este sea el foco cuando se haga clic en el texto de la etiqueta. Puedes hacerlo con este código:</p><pre><code class="language-html">&lt;form action="#"&gt;
      &lt;label for="lang"&gt;Lenguaje&lt;/label&gt;
      &lt;select name="lenguajes" id="lang"&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
</code></pre><p>He puesto un símbolo de número (#) como el valor del atributo de acción para que no te salga un 404 cuando hagas clic en el botón de envío. </p><p>Pero ahora debemos hacer un pequeño cambio en el CSS:</p><pre><code class="language-css"> body {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
     height: 100vh; 
     background-color: #f1f1f1;
   }

input {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
   }

label {
     display: flex;
     align-items: center;
     justify-content: center;
     margin: 0 auto;
   }

select {
     margin-bottom: 10px;
     margin-top: 10px;
   }
</code></pre><p>Al final, este es el resultado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/select-one.gif" class="kg-image" alt="select-one" width="600" height="400" loading="lazy"></figure><p>La cosa no termina ahí. Uno de los elementos desplegables aparece por defecto y se seleccionará si el usuario hace clic en el botón de envío inmediatamente cuando llegue a la página.</p><p>Pero esta no es una buena experiencia de usuario. Puedes deshacerte de ella agregando la opción de "selecciona un lenguaje" como el primer elemento del menú desplegable.</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Lenguaje&lt;/label&gt;
      &lt;select name="lenguajes" id="lang"&gt;
        &lt;option value="selecciona"&gt;Selecciona un lenguaje&lt;/option&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
</code></pre><p>Cuando el usuario haga clic en la caja de selección para elegir una opción, el menú desplegable también cubrirá el botón de envío - otra cosa que afecta negativamente a la buena experiencia del usuario.</p><p>Puedes cambiar esto con el 'atributo de tamaño' <em>size</em>, que mostrará un cierto número de opciones por defecto y mostrará un desplazamiento para las otras opciones del desplegable.</p><p>Esto también te permite deshacerte de la primera opción que habíamos agregado, ya que algunas de las opciones quedarán visibles para el usuario automáticamente.</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Lenguaje&lt;/label&gt;
      &lt;select name="lenguajes" id="lang" size="4"&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/select-two.gif" class="kg-image" alt="select-two" width="600" height="400" loading="lazy"></figure><p>Con el atributo <code>multiple</code>, puedes permitirle al usuario seleccionar más de una opción del menú desplegable.</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Lenguaje&lt;/label&gt;
      &lt;select name="lenguajes" id="lang" multiple&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
</code></pre><p>Esto hace que 4 elementos sean visibles por defecto. Para seleccionar opciones múltiples, el usuario debe mantener pulsada la tecla shift o ctrl y luego seleccionar las opciones con el cursor.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/select-three.gif" class="kg-image" alt="select-three" width="600" height="400" loading="lazy"></figure><p>Esto no es todo lo que puedes hacer con las etiquetas <em>select </em>y <code>&lt;option&gt;</code>. También puedes hacer una caja de selección multi-capa con el elemento <code>&lt;optgroup&gt;</code> dentro de una etiqueta <code>&lt;select&gt;</code>. </p><p>Puedes convertir el menú desplegable ya hecho en un cuadro de selección multi-capa así:</p><pre><code class="language-html">&lt;form action="#"&gt;
      &lt;label for="lang"&gt;Lenguaje&lt;/label&gt;
      &lt;select name="lenguajes" id="lang"&gt;
        &lt;optgroup label="primera-opcion"&gt;
          &lt;option value="seleccionar"&gt;Selecciona un lenguaje&lt;/option&gt;
          &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
          &lt;option value="php"&gt;PHP&lt;/option&gt;
          &lt;option value="java"&gt;Java&lt;/option&gt;
          &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;/optgroup&gt;
        &lt;optgroup label="segunda-opcion"&gt;
          &lt;option value="python"&gt;Python&lt;/option&gt;
          &lt;option value="c#"&gt;C#&lt;/option&gt;
          &lt;option value="C++"&gt;C++&lt;/option&gt;
          &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
        &lt;/optgroup&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/HTML-select-tag-optgroup.png" class="kg-image" alt="multi-select" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/06/HTML-select-tag-optgroup.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/06/HTML-select-tag-optgroup.png 616w" width="616" height="400" loading="lazy"></figure><h2 id="c-mo-aplicar-estilo-al-elemento-select"><strong>Cómo aplicar estilo al elemento <em>select</em> </strong></h2><p>Estilizar el elemento <em>select</em> es a menudo confuso y se muestra de forma inconsistente en los navegadores. Pero siempre puedes intentar lo siguiente:</p><pre><code class="language-html"> &lt;form action="#"&gt;
      &lt;label for="lang"&gt;Lenguaje&lt;/label&gt;
      &lt;select name="lenguajes" id="lang"&gt;
        &lt;option value="selecciona"&gt;Selecciona un lenguaje&lt;/option&gt;
        &lt;option value="javascript"&gt;JavaScript&lt;/option&gt;
        &lt;option value="php"&gt;PHP&lt;/option&gt;
        &lt;option value="java"&gt;Java&lt;/option&gt;
        &lt;option value="golang"&gt;Golang&lt;/option&gt;
        &lt;option value="python"&gt;Python&lt;/option&gt;
        &lt;option value="c#"&gt;C#&lt;/option&gt;
        &lt;option value="C++"&gt;C++&lt;/option&gt;
        &lt;option value="erlang"&gt;Erlang&lt;/option&gt;
      &lt;/select&gt;
      &lt;input type="submit" value="Enviar" /&gt;
&lt;/form&gt;
</code></pre><pre><code class="language-css"> select {
        margin-bottom: 10px;
        margin-top: 10px;
        font-family: cursive, sans-serif;
        outline: 0;
        background: #2ecc71;
        color: #fff;
        border: 1px solid crimson;
        padding: 4px;
        border-radius: 9px;
      }
</code></pre><p>En el fragmento de código CSS anterior le he dado a la caja de selección el siguiente aspecto:</p><ul><li>una familia de letra cursiva y un color blanco,</li><li>un contorno de 0 para eliminar el feo contorno cuando está en foco,</li><li>un fondo verdoso,</li><li>un borde de 1 píxel de color carmesí,</li><li>un radio al borde de 4 píxeles para obtener un borde ligeramente redondeado en todos los lados,</li><li>y un relleno de 4 píxeles para espaciar un poco las cosas.</li></ul><p>La caja de selección ahora se ve mejor:<br></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/09/select-styled.gif" class="kg-image" alt="select-styled" width="600" height="400" loading="lazy"></figure><h2 id="conclusi-n"><strong>Conclusión</strong></h2><p>La etiqueta <em>select</em> es muy útil cuando se hacen menús desplegables y listas combinadas en HTML. Es como un botón de radio y una casilla de verificación (<em>checkbox</em>) en un solo paquete.</p><p>Recuerda que con los botones de radio sólo puedes seleccionar una opción de una lista - pero con una casilla de verificación puedes seleccionar múltiples opciones. <em>Select</em> es más flexible, ya que puedes configurarla para aceptar una única opción o múltiples opciones.</p><p>Un problema con la etiqueta <em>select</em> es que es muy difícil de estilizar. Una solución razonable es utilizar una biblioteca CSS que ofrece clases de gran utilidad para dar estilo a un formulario junto con el elemento <em>select.</em> </p><p>Espero que este tutorial te haya familiarizado con la etiqueta select para que puedas empezar a utilizarla en tus proyectos.</p><p>Gracias por leer y sigue programando.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
