Buscar este blog

Mostrando entradas con la etiqueta BASES DE DATOS. Mostrar todas las entradas
Mostrando entradas con la etiqueta BASES DE DATOS. Mostrar todas las entradas

miércoles, 23 de octubre de 2013

INSERTAR DATOS EN BASE DE DATOS CON PHP.

<!--insertar.php-->
<?php
//Establecimiento de la conexión
$conex = mysql_connect("localhost", "root", "bbdd")
or die("NO se pudo realizar la conexión");
// Selección de la base de datos
mysql_select_db("empresa_bd")
or die("ERROR con la base de datos");
?>
<html>
<head>
<title>Gestión de bases de datos con PHP y MySQL</title>
</head>
<body>
    <hr>
    <br>
    <h3>Inserciones</h3>
    <form id="inserciones" action="insertarOK.php" method="GET">
        <table>
            <tr>
                <td>Nombre:</td>
                <td><input type=text name="eNombre"></td>
            </tr>
            <tr>
                <td>Categoría:</td>
                <td><input type=text name="eCategoria"></td>
            </tr>
            <tr>
                <td>Sueldo:</td>
                <td><input type=text name="eSueldo"></td>
            </tr>
            <tr>
                <td>Departamento:</td>
                <td>
                <select name="eCodDpto">
    <?php
    //Preparación y ejecución de la consulta
    $consulta = "SELECT * FROM Departamentos";
    $resultado = mysql_query($consulta);
    //Recorrido del cursor de fila en fila
    while ($fila = mysql_fetch_array($resultado))
    {   
    ?>                       
                <option value="<?php echo $fila['CodDpto']; ?>"><?php echo $fila['Descripcion'];?></option>
    <?php
    }
    ?>       
                </select>
                </td>
            </tr>
        </table>
        <input type="submit" value="Inserción">
    </form>
    <hr>
</body>
</html>
<?php
// Se cierra la conexion
mysql_close();
?>


<!--insertarOK.php-->
<html>
<head><title>Gestión de bases de datos con PHP y MySQL</title></head>
<body>
<center>
<h1><font color='blue'>Gestión de bases de datos con PHP y MySQL</font></h1>
<?php
  //Establecimiento de la conexión
  $conex = mysql_connect("localhost", "root", "bbdd")
        or die("NO se pudo realizar la conexión");
  // Selección de la base de datos
  mysql_select_db("empresa_bd")
       or die("ERROR con la base de datos");
  //Preparación y ejecución de la consulta
  $nombre = $_GET['eNombre'];
  $categoria = $_GET['eCategoria'];
  $sueldo = $_GET['eSueldo'];
  $codDpto = $_GET['eCodDpto'];
  $consulta = "INSERT INTO Empleados (Nombre, Categoria, Sueldo, CodDpto) VALUES ('$nombre', '$categoria', '$sueldo', '$codDpto')";
  $resultado = mysql_query($consulta);
  if ($resultado)
      echo "<b>Empleado insertado!</b><br /><br />\n";
  else
     echo "<h2>Error</h2>";
  // Se cierra la conexion
  mysql_close();

jueves, 6 de junio de 2013

SGF vs SGBD (sistema de gestión de ficheros y sistema de gestión de bases de datos.

El objetivo de este trabajo es que repases los conceptos vistos en clase sobre los sistemas de almacenamiento de la información y analices sus características.
Algunas respuestas las encontrarás en el tema pero otras deberás pensarlas por ti mism@ o buscarlas en Internet.
Puedes contestar en este mismo documento pero cámbiale un nombre para que incluya tu nombre y apellidos antes de subirlo al Moodle. Por ejemplo:

UD1. SGF versus SGBD (UD1_TuNombre).docx

Preguntas
1)      Explica la relación que existe entre los ficheros y los dispositivos de almacenamiento.
Los ficheros son los datos lógicos, y los dispositivos de almacenamiento serían los medios físicos.

2)      Según la organización interna de los ficheros podemos hablar de secuenciales, de acceso directo e indexados. Averigua qué tipo es el más utilizado en la actualidad y explica el por qué.
El tipo más utilizado es el indexado ya que dispone de un índice a través del cual podemos acceder mucho más rápido a los datos y con esto hacer una búsqueda más eficiente.

3)      Escribe la definición de base de datos.
Es un conjunto de ficheros relacionados entre sí, cuyo contenido pueden compartir los usuarios, con características de integridad máxima y redundancia mínima.

4)      Si las bases de datos se almacenan físicamente en ficheros, ¿cuál es su diferencia?
1.los archivos son personales las bases de datos son compartidas.
2.en los archivos pueden haber mas de un dato repetido en las bases de datos lo datos no son repetidos
3.los archivos no se relacionan entre si, las bases de datos están relacionadas según un esquema.
4.el acceso a los archivos es restringido y personal, a las bases de datos el acceso es abierto a las personas de una empresa o a un publico especifico
5.la seguridad de los archivos es poca por lo cual pueden ser cambiados constantemente, las bases de datos no son diseñadas para que los datos sean modificables por el contrario son muy seguras.
6.los archivos son poco eficientes por que no son muy actuales, las bases de datos son actuales y muy eficientes.


5)      Da tres ventajas de las bases de datos con respecto a los ficheros.
•Unicidad: los datos tienen que ser únicos, no tiene que haber datos repetidos y tienen que verse igual en todas las terminales si se requieren los mismos datos.
•Consistencia: los datos que se almacenen tienen que ser duraderos, estables, sólidos y confiables
•Seguridad: los datos almacenados tienen que seguros no pueden ser modificados por todos los usuarios ni por personas externas.
•Privacidad: los datos almacenados solo los tiene que saber las personas de la empresa y a los que la empresa le interese que los sepa pero en ningún momento tienen que ser abierto al público al menos que esa sea la intención.
•Disponibilidad: los datos tienen que estar disponibles en el momento que sea necesario y a la hora requerida no tienen que ser datos antiguos sino datos actuales.
•Integridad: los datos no tienen que ser manipulados por personas que no estén autorizadas, tienen que ser lo mas precisos y oportunos posible


6)      ¿Qué es el catálogo de una base de datos?
Almacena los esquemas de las bases de datos que el sistema mantiene tanto del esquema interno como del externo y el conceptual.

7)      Busca información sobre las bases de datos objeto-relacional y explica su característica principal. Nota: Las BD objeto-relacional no son lo mismo que las BD orientadas a objeto, aunque sí están relacionadas.
Son extensión de las bases de datos tradicional, a la cual se le proporcionan características de la programación orientada a objetos.

8)      Define el concepto transacción de bases de datos e indica cuáles son las propiedades ACID que las caracterizan.
Es un conjunto de órdenes que se ejecutan formando una unidad de trabajo.
Propiedades ACID:
Atomicidad: Asegura si la operación se ha realizado o no, por lo tanto una operación nunca se quedará a medias.
Consistencia: Integridad; sólo se empieza algo que se puede acabar.
Aislamiento: Una operación no debe de afectar a otras.
        Durabilidad: Asegura que una vez realizada la operación, persistirá y no se podrá           deshacer aunque falle el sistema.

9)      Nombra varios sistemas, componentes o funciones que ofrezca un SGBD como mecanismo de seguridad.
Debe garantizar la protección de los datos contra accesos no autorizados, tanto intencionados como accidentales. Debe controlar que sólo los usuarios autorizados accedan a la BD.
                 Los SGBD ofrecen mecanismos para implantar restricciones de integridad en la BD. Estas              restricciones van a proteger la BD contra daños accidentales. Los valores de los datos que se      almacenan deben satisfacer ciertos tipos de restricciones de consistencia y reglas de integridad,          que especificará el administrador de la BD. El SGBD puede determinar si se produce una              violación de la restricción.
                - Proporciona herramientas y mecanismos para la planificación y realización de copias de             seguridad y restauración.
                - Debe ser capaz de recuperar la BD llevándola a un estado consistente en caso de ocurrir algún                suceso que la dañe.
                - Debe asegurar el acceso concurrente y ofrecer mecanismos para conservar la consistencia de                 los datos en el caso de que varios usuarios actualicen la BD de forma concurrente.

10)   Nombra las instrucciones de SQL/DML que nos permiten consultar y modificar información en una base de datos.
SELECT: seleccionar los datos a cargar de una tabla.
ORDER BY: Clasificar los datos seleccionados.
TOP: indica el número máximo de registros a devolver.
UPDATE: actualizar los datos según un criterio.

DELETE: eliminar los datos según un criterio.

IF (SQL) Y CASE (SQL)

EJERCICIOS IF:
1- Inserta algunos registros:
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('ACD123','auto','8:30','9:40');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('AKL098','auto','8:45','15:10');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('HGF123','auto','9:30','18:40');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('DRT123','auto','15:30',null);
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('FRT545','moto','19:45',null);
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('GTY154','auto','20:30','21:00');

2- Muestra la matricula, la hora de llegada y de salida de todos los vehículos, más una columna que calcule la cantidad de horas que estuvo cada vehículo en la playa, sin considerar los que aún no se fueron de la playa:


SELECT `matricula`,`horallegada`,`horasalida`,left(timediff(horasalida,horallegada),5) as horasminutos FROM `vehiculos`

3- Se cobra 1 euro por hora. Pero si un vehículo permanece en la playa 4 horas, se le cobran 3 euros, es decir, no se le cobra la cuarta hora; si está 8 horas, se cobran 6 euros, y así sucesivamente. Muestra la matricula, la hora de llegada y de salida de todos los vehículos, más la columna que calcule la cantidad de horas que estuvo cada vehículo en la playa (sin considerar los que aún no se fueron de la playa) y otra columna utilizando "if" que muestre la cantidad de horas gratis:

 select matricula,horallegada,horasalida,
  left(timediff(horasalida,horallegada),5) as horasminutos,
  if (hour(timediff(horasalida,horallegada))>4,
  hour(timediff(horasalida,horallegada)) div 4,0) as horagratis
  from vehiculos
  where horasalida is not null;

EJERCICIOS CASE:
select editorial, case count (*) where when 1 then 1 else 'mas de 1' end as 'cantidad' from libros group by editorial;
select ecitorial, case count (*) when 1 then 1 end as 'cantidad' from libros group by editorial;
select editorial, case count (*) when 1 then 1 when > 1 then 'mas de 1' end as 'cantidad' from libros group by editorial;
select editorial, case when count (*)=1 then 1 else 'mas de uno'end as cantidad from libros group by editorial;
select expediente, promedio, case when promedio<4 then 'suspendido' when promedio>4 and promedio and promedio<7 then 'bien' else 'notable' end as 'notas' from promedio;

Ejercicios, PASO A 1FN, 2FN y 3FN (BASES DE DATOS)

 Ejercicios: Pasar a 3FN los esquemas relacionales:

1.                  A (a0, b0, c1, c2) siendo c2 à c1

.            C (c1, c2)
                A (a0, b0, c1)
                Cajena: {c1} → C

2.                  ALUMNO (num_exp, curso, localidad, provincia) siendo provincia à localidad

             Provincia (localidad, provincia)
                Alumno (num_exp, curso, localidad)
                Cajena: {Localidad} → Provincia

3.                  NOTA (cod_asig, num_exp, nom_asig, nom_alumno, dir_alumno, nota) siendo à nom_alumno, dir_alumno à num_exp y siendo nom_asig à cod_asig

            FN2:
                Nota (cod_asig, num_exp, nota)
                Cajena: {cod_asig} → Asignatura
                Cajena: {num_exp} → Alumno
                Alumno (num_exp, nom_alumno, dir_alumno)
                Asignatura (cod_asig, nom_asig)

4.                  A (a0, a1, a2, {a3}, a4, a5) siendo a2 à a1 y siendo a5àa4


             FN1
                A'(a0, a1,a3)
                Cajena: {a0, a1} → A
                A (a0, a1, a4, a5)

                FN2
                A (a0, a1, a4, a5)
                Cajena: {a1} → A2
                A2 (a1, a2)
               
                FN3
                A' (a4, a5)
                A (a0, a1, a4)
                Cajena: {a4} → A'

5.                  A (a0, {a1}, a2) siendo a2 à a0

             FN1
                A' (a0, a1)
                Cajena: {a0} → A'
                A (a0, a2)
               

                FN2

                A(a0,a2)

Realiza el proceso de normalización de las siguientes relaciones y para cada uno de los enunciados, crea un excel con tablas de datos de ejemplo.

Enunciado 1.
FCT (num_expedientecod_empresa, nom_alumno, nom_empresa, fecha_inicio, fecha_fin)

FCT (num_expediente, cod_empresa, fecha_inicio, fecha_fin)
Cajena: {num_expediente} → ALUMNO
Cajena: {cod_empresa} → EMPRESA
ALUMNO (num_expediente, nom_alumno)
EMPRESA (cod_empresa, nom_empresa)

Enunciado 2.
CAMPAMENTO (cod_niñocod_monitor, {fecha_inicio}, num_dias, nom_niño, nom_monitor, edad_niño, titulo_monitor)

FN1
CAMPAMENTO' (cod_niño, cod_monitor, fecha_inicio)
Cajena: {cod_niño, cod_monitor} → Campamento.
CAMPAMENTO(cod_niño, cod_monitor, num_dias, nom_niño, nom_monitor, edad_niño, titulo_monitor)
 FN2:
CAMPAMENTO(cod_niño, cod_monitor, num_dias)
Cajena: {cod_niño}  → Niño
Cajena: {cod_monitor} → Monitor
NIÑO (cod_niño, nom_niño, edad_niño)
MONITOR (cod_monitor, nom_monitor, titulo_monitor)

Enunciado 3.
ESCRIBIR_LIBRO (isbndni, num_pag, {tipo_edición}, nom_autor, especialidad_autor, editorial)

ESCRIBIR_LIBRO (isbn, dni, num_pag, {tipo_edición}, nom_autor, especialidad_autor, editorial)
FN1
ESCRIBIR_LIBRO' (isbn, dni, tipo, edicion)
Cajena: {isbn, dni} → ESCRIBIR_LIBRO
ESCRIBIR_LIBRO (isbn, dni, num_pag, nom_autor, especialidad_autor, editorial)
 FN2:
ESCRIBIR_LIBRO(isbn, dni)
Cajena: {isbn} → Libro
Cajena: {dni} → Autor
LIBRO (isbn, num_pag, editorial)AUTOR(dni, nom_autor, especialidad_autor)
VUELO (num_vuelo, dni, cod_avion, nom_piloto, num_asientos, {aux_vuelo}, hora_salida) 

Enunciado 4.
VUELO (num_vuelodnicod_avion, nom_piloto, num_asientos, {aux_vuelo}, hora_salida)

FN1
VUELO' (num_vuelo, dni, cod_avion, aux_vuelo)
Cajena: {num_vuelo, dni, cod_avion} → VUELO
VUELO (num_vuelo, dni, cod_avion, nom_piloto, num_asientos, hora_salida)
FN2
VUELO (num_vuelo, dni, cod_avion)
VIAJE(num_vuelo, hora_salida)
AVION(cod_avion, num_asientos)
PILOTO (dni, nom_piloto)

miércoles, 5 de junio de 2013

Examen SQL

1/ Muestra el nombre del barrio y todos los apartamentos que estén situados en esos barrios cuyo precio sea superior a 350€:

Select b.nombre as 'nombre barrio', a.edificio, a.domicilio, a.piso, a.numeroapto from barrios as b join apartamentos as a on b.codigo=a.codigobarrio where a.precio>350;


2/ Muestra todos los registros y un mensaje que ponga ‘caro’ si el precio de un apartamento supera los 350€

select *, if(precio>350, 'caro', ' ') from barrios as b join apartamentos as a on b.codigo=a.codigobarrio;

3/ Muestra el promedio de los apartamentos agrupados por barrio:

select b.nombre, avg (a.precio) from barrios as b join apartamentos as a on b.cdigo=a.codigobarrio group by b.nombre

4/ Muestra todos los barrios y apartamentos, incluso aquellos barrios en los que no hayan apartamentos:


select * from barrios as b left join apartamentos as a on b.codigo=a.codigobarrio;

5/ Agrupando por nombre de barrio, muestra el nombre del barrio, la media del precio del barrio y cuenta la cantidad de apartamentos que hay en cada barrio.
Además, muestra un mensaje en el que aparezca una nueva media de la siguiente forma: si la media del barrio es mayor a 400€, la nueva media aumentaría un 15%, pero si es menor de 400€, la nueva media aumenta un 10%:


select b.nombre, avg(precio), count(a.numeroapto), if(avg(a.precio)>400, avg(a.precio)+(avg(a.precio)*0.15), avg(a.precio)+(avg(a.precio)*0.1))as medias from barrios as b join apartamentos as a on b.codigo=a.codigobarrio group by b.nombre;

Actividad Final SQL Bases de Datos.



a)    Enunciado:

Una empresa de consultoría de aplicaciones móviles desea poder realizar un informe sobre las descargas de aplicaciones de “iphone” en sus dispositivos.
Para ello necesita saber, qué móvil se ha bajado algo (IMEI), qué modelo de dispositivo es, qué versión tiene, y de qué color es.
Además también quiere almacenar qué aplicación ha sido descargada (nombre), qué tamaño tiene y su coste.
Para finalizar, necesitaría conocer la fecha de descarga de la misma, la cual genera un número automático de orden de descarga.

b)    Diseño Entidad Relación:

c)    Diseño SQL:

create table Iphone(imei varchar(5), modelo varchar (2), version int, color varchar(6), primary key (imei))ENGINE=INNODB;

create table aplicacion(nombre varchar (10), size int, precio int, primary key (nombre))ENGINE=INNODB;

create table descarga(numero int not null auto_increment, imeimovil varchar(5), nombreap varchar (10), fecha date, primary key(numero), index(nombreap), foreign key (imeimovil) references iphone(imei), foreign key (nombreap) references aplicacion(nombre))ENGINE=INNODB;

d)    Pantallazo de las tablas con sus datos:
TABLA IPHONE:
Insert into Iphone values ('11111', '4', 6, 'BLANCO');
Insert into Iphone values ('22222', '4s', 5, 'NEGRO');
Insert into Iphone values ('33333', '4s', 6, 'BLANCO');
Insert into Iphone values ('44444', '5', 6, 'BLANCO');
Insert into Iphone values ('55555', '4s', 6, 'NEGRO');
Insert into Iphone values ('66666', '4', 5, 'NEGRO');
Insert into Iphone values ('77777', '4', 5, 'NEGRO');
Insert into Iphone values ('88888', '5', 6, 'NEGRO');
Insert into Iphone values ('99999', '5', 6, 'NEGRO');

TABLA APLICACION:

insert into aplicacion    values ("instagram", 1, 2);
insert into aplicacion    values ("twitter", 2, 1);
insert into aplicacion    values ("triviados", 5, 3);
insert into aplicacion    values ("candycrush", 6, 5);
insert into aplicacion    values ("shazam", 2, 2);
insert into aplicacion    values ("youtube", 4, 1);
insert into aplicacion    values ("runtastic", 9, 2);
insert into aplicacion    values ("facebook", 3, 1);

TABLA DESCARGA:
insert into descarga (imeimovil, nombreap, fecha) values ('33333', 'facebook', '20130301');
insert into descarga (imeimovil, nombreap, fecha) values ('11111', 'twitter', '20130301');
insert into descarga (imeimovil, nombreap, fecha) values ('55555', 'twitter', '20130305');
insert into descarga (imeimovil, nombreap, fecha) values ('66666', 'facebook', '20130305');
insert into descarga (imeimovil, nombreap, fecha) values ('66666', 'runtastic', '20130306');
insert into descarga (imeimovil, nombreap, fecha) values ('88888', 'runtastic', '20130307');
insert into descarga (imeimovil, nombreap, fecha) values ('88888', 'facebook', '20130308');
insert into descarga (imeimovil, nombreap, fecha) values ('77777', 'facebook', '20130309');
insert into descarga (imeimovil, nombreap, fecha) values ('44444', 'candycrush', '20130310');
insert into descarga (imeimovil, nombreap, fecha) values ('22222', 'youtube', '20130311');
insert into descarga (imeimovil, nombreap, fecha) values ('22222', 'twitter', '20130312');
insert into descarga (imeimovil, nombreap, fecha) values ('44444', 'runtastic', '20130313');
insert into descarga (imeimovil, nombreap, fecha) values ('44444', 'facebook', '20130314');
insert into descarga (imeimovil, nombreap, fecha) values ('44444', 'twitter', '20130315');
insert into descarga (imeimovil, nombreap, fecha) values ('44444', 'instagram', '20130317');
insert into descarga (imeimovil, nombreap, fecha) values ('55555', 'triviados', '20130317');
insert into descarga (imeimovil, nombreap, fecha) values ('55555', 'runtastic', '20130317');
insert into descarga (imeimovil, nombreap, fecha) values ('88888', 'twitter', '20130317');
insert into descarga (imeimovil, nombreap, fecha) values ('77777', 'twitter', '20130317');
insert into descarga (imeimovil, nombreap, fecha) values ('66666', 'twitter', '20130320');
insert into descarga (imeimovil, nombreap, fecha) values ('55555', 'youtube', '20130320');
insert into descarga (imeimovil, nombreap, fecha) values ('99999', 'twitter', '20130321');
insert into descarga (imeimovil, nombreap, fecha) values ('99999', 'shazam', '20130321');
insert into descarga (imeimovil, nombreap, fecha) values ('55555', 'instagram', '20130321');
insert into descarga (imeimovil, nombreap, fecha) values ('55555', 'shazam', '20130322');
insert into descarga (imeimovil, nombreap, fecha) values ('33333', 'twitter', '20130323');
insert into descarga (imeimovil, nombreap, fecha) values ('33333', 'instagram', '20130324');
insert into descarga (imeimovil, nombreap, fecha) values ('33333', 'runtastic', '20130330');
insert into descarga (imeimovil, nombreap, fecha) values ('33333', 'candycrush', '20130330');
insert into descarga (imeimovil, nombreap, fecha) values ('99999', 'youtube', '20130330');

e)     Consultas sobre la base de datos. Deberás utilizar y realizar pantallazos de:
I.-Muestra por pantalla las descargas realizadas por un terminal 4s:
SELECT *
FROM descarga
JOIN Iphone ON Iphone.imei = descarga.imeimovil
WHERE Iphone.modelo = '4s'

II.-Muestra todas las descargas ordenadas por imei:
SELECT *
FROM descarga
ORDER BY imeimovil

III.-Muestra la cantidad de veces que se haya descargado cada una de las aplicaciones:
select count(d.nombreap), (a.nombre) from descarga as d join aplicacion as a on d.nombreap=a.nombre group by a.nombre;

IV.- Cuenta  todas las descargas realizadas ordenadas por modelo de iphone:
select count(d.nombreap), (i.modelo) from descarga as d join Iphone as i on d.imeimovil=i.imei group by i.modelo;

V.-Muestra por pantalla la cantidad de descargas realizadas por cada terminal (por imei):
SELECT COUNT( d.nombreap ) , i.imei FROM descarga AS d JOIN Iphone AS i ON d.imeimovil = i.imei GROUP BY i.imei

VI.-Muestra por pantalla todas las descargas realizadas de cada aplicación mostrando además un mensaje si la aplicación ha sido un éxito (hay más de 4 descargas) .
select count(d.nombreap), (a.nombre), if (count(d.nombreap)>4, 'exito', ' ') as 'exito o no' from descarga as d  join aplicacion as a on d.nombreap=a.nombre group by a.nombre

VII.-Muestra por pantalla el total de dinero gastado por dispositivo.
SELECT d.imeimovil, sum(a.precio)
from aplicacion as a
join descarga as d
on a.nombre=d.nombreap
group by d.imeimovil

VIII.- Muestra por pantalla todas las aplicaciones que empiecen por 't':
select * from aplicacion where nombre like 't%'

IX.-Muestra por pantalla las aplicaciones que hayan sido descargadas mas de tres veces:
select count(nombreap),nombreap from descarga  group by nombreap  having count(nombreap)>3;

X.-Muestra por pantalla todos aquellos terminales que se hayan descargado 'runtastic' o 'facebook', con su fecha de descarga.
select fecha, imeimovil, nombreap from descarga where nombreap='facebook' or nombreap='runtastic'

XI.- Actualiza los precios de 'shazam' a 5.
UPDATE aplicacion SET precio =5 WHERE nombre = 'shazam' 

select * from aplicación


XII.-Muestra por pantalla todas las aplicaciones aunque no hayan sido descargadas ninguna vez:
Para realizar un right join necesito agregar una nueva línea en la tabla aplicación:
insert into aplicacion    values ("amazon", 10, 7);
SELECT *
FROM aplicacion AS a
LEFT JOIN descarga AS d ON a.nombre = d.nombreap

miércoles, 22 de mayo de 2013

EJERCICIOS I



select titulo, if(precio>50, `caro`, 'economico') from libros;
select autor, if (count(*)>1, 'mas de 1', '1') from libros group by autor;
select editorial, if (count(*)>4, '5 o mas', 'menos de 5') as cantidad from libros group by editorial order by cantidad;
select sexo count (sexo) if (sexo='f', 'rosas', 'corbata') as 'obsequio' from empleados where month (fecha nacimiento) = 5 group by sexo;
select nombre, fecha ingreso, year(current_date) year (fecha ingreso) as 'años de servicio', if ((year(current-date)-year(fechaingreso)) %10=0, 'si', 'no') as 'Placa' from empleados where month(fechaingreso)=4;
select nombre, sueldo, hijos, if (sueldo basico <=500, sueldobasico+(300*hijos), sueldobasico+(150*hijos)) as total from empleados where hijos > 0;
select dni, vencimiento, current_date as 'Fecha actual', total, if (datediff (current_date, vencimiento)>0, 'si', 'no') as vencida from luz;
select dni, count (*), if (count(*)>1, 'cortar servicio' ' ') as 'servicio' from luz where datediff (current_date, vencimiento)>0 group by documento;
select matricula,horallegada,horasalida, left(timediff(horasalida,horallegada),5) as horasminutos, if (hour(timediff(horasalida,horallegada))>4, hour(timediff(horasalida,horallegada)) div 4,0) as horagratis from vehiculos where horasalida is not null;
SELECT promedio, if (promedio>=4, 'aprobado','suspendido') from alumnos;
select nombre,promedio, if (promedio>=9,'medalla','') from alumnos
select *, if(entradasvendidas >= capacidad, 'agotadas','') from entradas;
select *, if(entradasvendidas >0 and `entradasvendidas`>(capacidad/2), 'mas de la mitad','menos de la mitad') from entradas;


A. Un profesor guarda los promedios de sus alumnos de un curso en una tabla llamada "alumnos".

create table alumnos(
  expediente char(5) not null,
  nombre varchar(30),
  promedio decimal(4,2)
);

1- Inserta los siguientes registros:
 insert into alumnos values(3456,'Perez Luis',8.5);
 insert into alumnos values(3556,'Garcia Ana',7.0);
 insert into alumnos values(3656,'Ludueña Juan',9.6);
 insert into alumnos values(2756,'Moreno Gabriela',4.8);
 insert into alumnos values(4856,'Morales Hugo',3.2);

2- Si el alumno tiene un promedio superior o igual a 4, muestra un mensaje "aprobado" en caso contrario "suspendido":

SELECT promedio, if (promedio>=4, 'aprobado','suspendido') from alumnos;

3- Es política del profesor entregar una medalla a quienes tengan un promedio igual o superior a 9. Muestra los nombres y promedios de los alumnos y un mensaje "medalla" a quienes cumplan con ese requisito:


select nombre,promedio, if (promedio>=9,'medalla','') from alumnos

B) Un teatro con varias salas guarda la información de las entradas vendidas en una tabla llamada "entradas".

create table entradas(
  sala tinyint unsigned,
  fecha date,
  hora time,
  capacidad smallint unsigned,
  entradasvendidas smallint unsigned,
  primary key(sala,fecha,hora)
 );

1- Inserta algunos registros:
 insert into entradas values(1,'2006-05-10','20:00',300,50);
 insert into entradas values(1,'2006-05-10','23:00',300,250);
 insert into entradas values(2,'2006-05-10','20:00',400,350);
 insert into entradas values(2,'2006-05-11','20:00',400,380);
 insert into entradas values(2,'2006-05-11','23:00',400,400);
 insert into entradas values(3,'2006-05-12','20:00',350,350);
 insert into entradas values(3,'2006-05-12','22:30',350,100);
 insert into entradas values(4,'2006-05-12','20:00',250,0);

2- Muestra todos los registros y un mensaje si las entradas para una función están agotadas:


select *, if(entradasvendidas >= capacidad, 'agotadas','') from entradas

3- Muestra todos los datos de las funciones que tienen vendidas entradas y muestre un mensaje si se vendió más o menos de la mitad de la capacidad de la sala:

select *, if(entradasvendidas >0 and `entradasvendidas`>(capacidad/2), 'mas de la mitad','menos de la mitad') from entradas



Ejercicio: Tabla vehículos
Un parking guarda cada día los datos de los vehículos que acceden a la playa en una tabla llamada "vehiculos".

create table vehiculos(
  matricula char(6) not null,
  tipo char(4),
  horallegada time not null,
  horasalida time,
  primary key(matricula,horallegada)
 );

1- Inserta algunos registros:
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('ACD123','auto','8:30','9:40');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('AKL098','auto','8:45','15:10');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('HGF123','auto','9:30','18:40');
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('DRT123','auto','15:30',null);
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('FRT545','moto','19:45',null);
insert into vehiculos (matricula,tipo,horallegada,horasalida)  values('GTY154','auto','20:30','21:00');

2- Muestra la matricula, la hora de llegada y de salida de todos los vehículos, más una columna que calcule la cantidad de horas que estuvo cada vehículo en la playa, sin considerar los que aún no se fueron de la playa:


SELECT `matricula`,`horallegada`,`horasalida`,left(timediff(horasalida,horallegada),5) as horasminutos FROM `vehiculos`

3- Se cobra 1 euro por hora. Pero si un vehículo permanece en la playa 4 horas, se le cobran 3 euros, es decir, no se le cobra la cuarta hora; si está 8 horas, se cobran 6 euros, y así sucesivamente. Muestra la matricula, la hora de llegada y de salida de todos los vehículos, más la columna que calcule la cantidad de horas que estuvo cada vehículo en la playa (sin considerar los que aún no se fueron de la playa) y otra columna utilizando "if" que muestre la cantidad de horas gratis:

 select matricula,horallegada,horasalida,
  left(timediff(horasalida,horallegada),5) as horasminutos,
  if (hour(timediff(horasalida,horallegada))>4,
  hour(timediff(horasalida,horallegada)) div 4,0) as horagratis
  from vehiculos
  where horasalida is not null;

jueves, 16 de mayo de 2013

EJERCICIOS JOIN SQL

12. VARIAS TABLAS JOIN
select * from clientes as c join provincias as p on c.codigo=p.codigo;
select * from clientes as c.join provincias as p on codigo=p.codigo order by c.nombre;
12.1 VARIAS TABLAS LEFT JOIN
12.2 VARIAS TABLAS RIGHT JOIN
Tablas socios e inscritos
1. select * from socios as s left join inscritos as i on s.dni=i.dni
2. select * from inscritos as i right join socios as s on s.dni=i.dni;
4. select * from socios as s right join inscritos as i on s.dni=i.dni;
12.6 JOIN GROUP BY Y FUNCIONES DE AGRUPAMIENTO
Tabla clientes y provincias
1.select count (c.nombre), (p.nombre) from clientes as c join provincias as p on c.codigo group by p.nombre;
2.select count (c.nombre), p.nombre from clientes as c left join provincias as p on c. codigo group by p.nombre;;
3.select p.nombre count (c.codigoprovincia) as 'cantidad clientes' from provincias as p join clientes as c on p.codigo =c.codigo provincia group by p.nombre having count (c.codigoprovincia)>=2;
Tabla apartamentos y barrrios
2.select i.edificio, i.domicilio, i.piso, i.numeroapto, i.precio, b.nombre from inmuebles as i cross join barrios as b;
3.select i.edificio, count (i.domicilio), b.nombre from inmuebles as i join barrios as b on i.codigobarrio=b.codigo group by i.edificio;
4.selecti.domicilio, avg(i.precio) b.nombre from inmuebles as i cross join barrios as b on i.codigobarrio=b.codigo group by b.nombre;

jueves, 25 de abril de 2013

ALTER TABLE EN SQL

ALTER TABLE _____ ADD ___ (formato);
Modificar la estructura de una tabla.
alter table libros add cantidad smallint unsigned not null;
ALTER TABLE ____ DROP____;
Eliminar un campo de una tabla.
alter table libros drop editorial;
ALTER TABLE ____ MODIFY ____ (formato);
Modificar el tipo de algún campo incluidos sus atributos.
alter table libros modify titulo varchar (40) not null;
ALTER TABLE _____ CHANGE ___ (formato);
Modificar el nombre de los campos de una tabla.
alter table libros change coste precio decimal (5,2);
ALTER TABLE  ____ ADD PRIMARY KEY (_____);
agregar una clave primaria a una tabla existente.
alter table libros add primary key (codigo);
ALTER TABLE ____ DROP PRIMARY KEY (____);
Eliminar la clave primaria de una tabla existente.
alter table libros drop primary key;

ALTER TABLE: modifica la estructura de una tabla.
AÑADIR: alter table libros add cantidad smallint unsigned not null;
ELIMINAR: alter table libros drop edicion;
MODIFICAR: alter table libros modify cantidad smallint unsigned;
CAMBIAR NOMBRE DEL CAMPO:alter table libros change coste precio decimal (5,2);
AGREGAR CLAVE PRIMARIA: 1.- alter table libros add primary key (codigo);
            2.- alter table libros modify codigo int unsigned auto_increment;
ELIMINAR CLAVE PRIMARIA:1.-alter table libros modify codigo int unsigned;
            2.-alter table libros drop primary key;
RENOMBRAR TABLA: alter table amigos rename contact; // rename table amigos to contactos; 

lunes, 11 de marzo de 2013

COMANDOS SQL:


USE
Utilizar una base de datos:
use administración;
SHOW
Mostrar tablas:
show tables;
CREATE TABLE_________;
Crear tabla:
create table usuarios (nombre varchar (30), clave varchar (10), domicilio varchar (23), primary key(código));
DESCRIBE ___________;
mostrar tabla:
describe usuarios;
DROP TABLE IF EXISTS ________;
Borrar tabla:
drop table if exists usuarios;
INSERT INTO ___________ VALUES________;
Agregar datos:
insert into usuarios (nombre, clave) values  (‘isidoro’, ‘123’);
SELECT______ FROM_______ WHERE________;
Seleccionar datos:
select nombre, clave from usuarios where nombre = ‘isidoro’;
DELETE FROM __________WHERE________;
Borrar datos:
delete from usuarios where nombre = ‘leonardo’;
UPDATE________ SET_______ WHERE_______;
 Actualizar datos:
update usuarios set clave =’bilbao’ where nombre=’isidoro’;

TRUNCATE TABLE__________;
Borrar registros:
truncate table usuarios;

Varchar(x)
Integer 2000000000


Char(x)
Médiumint 8000000
Positivo
Autoincrementable
Blob 60.000
Smallint 30000
unsigned
Auto_increment

Tinyint 128



Bool (1)
Cadenas vacias

Float (científico)
Bigint 900000000000
Not Null

Decimal (t,d)




Date( yyyy-mm-dd)
AND    &&     Y
Datetime(yyyy-mm-dd hh:mm:ss)
OR        ||     Y/O
Time (hh:mm:ss)
XOR        O
Year (2)
NOT      NO
Year (4)


=
Igual
<> 
Distinto
> 
Mayor
< 
Menor
>=
Mayorigual
<=
menorigual
Colocar orden ascendente:
select * from libros order by titulo asc;
Colocar orden descendente:
select * from libros order by titulo desc;