SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
SQL for Dummies

                            Bases de Datos
                                2012-1
                          18 de Abril del 2012

Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Antes de Comenzar…
• Presentación Personal.

• Conocimientos previos?

• Expectativas sobre el curso?

• Algunos detalles del curso.

Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
¿Qué es SQL?
• Structured Query Language que no es más que un lenguaje
  estándar de comunicación con bases de datos.


• OJO: ’’’’’’’’’’’Estándar’’’’’’’’’’’, varía
  Levemente de un DBMS a otro.


• Aparte de esta pseudo-universalidad SQL posee otras
  características interesantes:
      – Explota la potencia y flexibilidad de las BDs relacionales.
      – Relativamente fácil de aprender.
      – Orientación a “registros” (filas).

Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Tipos de Datos I
• Pregunta: Qué es una Base de Datos Relacional?

• Un aspecto previo a considerar es la naturaleza de los valores
  que introducimos en esos campos.
   – Capturar la esencia del dato a guardar.
   – Facilitar búsquedas posteriores.
   – Optimizar los recursos de memoria.
• Cada base de datos introduce sus tipos de datos que no
  necesariamente están presentes en otras. Sin embargo, existe
  un conjunto de tipos (de datos) que están representados en
  la totalidad de estas bases.


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Tipos de Datos II




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Creación de Tablas I
• En general, para la mayoría de los DBMS existen
  potentes editores de modelos de datos que
  permiten la rápida creación y modificación de
  tablas.
    Existen razones para crear nuevas tablas en un
    modelo existente:
      – De carácter temporal (generalmente para
        procedimientos almacenados).
      – De carácter permanente (por necesidades concretas
        de nuestra aplicación).


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Creación de Tablas II




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Creación de Tablas III
• La sintaxis de creación puede variar ligeramente de una base de
  datos a otra ya que los tipos de campo aceptados no están
  completamente estandarizados.
    La sintaxis para realizar la creación de una tabla, suele ser algo
    como lo siguiente.

      CREATE TABLE nombre_tabla
      (
        nombre_campo_1 tipo_1 propiedades_1,
        nombre_campo_2 tipo_2 propiedades_2,
        nombre_campo_n tipo_n propiedades_n,
        PRIMARY KEY( nombre_campo_x , ... )
      )



Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Creación de Tablas IV
• Ejemplo: Crear una tabla de clientes:
    CREATE TABLE cliente
    (
       cli_id INT(4) NOT NULL AUTO_INCREMENT,
       cli_nombre VARCHAR(50),
       cli_apellidos VARCHAR(100),
       cli_direccion VARCHAR(500),
       cli_email VARCHAR(255),
       cli_codigo_postal VARCHAR(50),
       cli_poblacion VARCHAR(255),
       cli_pedidos INT
       PRIMARY KEY( cli_id )
)

Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Creación de Tablas V
• Del mismo modo podríamos crear la tabla de artículos
  con una sentencia como ésta:
    CREATE TABLE articulo
    (
       art_id INT(4) NOT NULL AUTO_INCREMENT,
       art_titulo VARCHAR(50),
       art_autor VARCHAR(25),
       art_editorial VARCHAR(25),
       art_recio REAL,
       PRIMARY KEY( art_id )
    )



Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Creación de Tablas VI
• Finalmente para una tabla de pedidos:
    CREATE TABLE pedido
    (
       ped_id INT(4) NOT NULL AUTO_INCREMENT,
       cli_id INT(4) NOT NULL,
       art_id INT(4) NOT NULL,
       ped_fecha DATE,
       ped_cantidad INT(4),
       ped_total INT(4),
           FOREIGN KEY (cli_id) REFERENCES cliente(cli_id),
           FOREIGN KEY (art_id) REFERENCES articulo(art_id),
           PRIMARY KEY(ped_id)
    )

Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Insertar un Registro
• Los registros pueden ser introducidos en una tabla a partir de
  sentencias que emplean la instrucción INSERT. La sintaxis utilizada
  es la siguiente:
    INSERT INTO nombre_tabla (nombre_campo1,
    nombre_campo2,...) VALUES (valor_campo1,
    valor_campo2...)
    Un ejemplo sencillo a partir de nuestras tablas es la introducción de
    un nuevo cliente, lo cual se haría con una instrucción de este tipo:
    INSERT INTO cliente (cli_nombre, cli_apellidos,
    cli_direccion, cli_codigo_postal, cli_email)
    VALUES ('Perico', 'Palotes', 'Percebe n°13',
    '123456', 'perico@usm.cl')


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Analizando un poco lo anterior
• Algunas cosas que podemos notar:
   – Mayúsculas: ¿Necesarias?
   – La correspondencia entre campo y valor es 1:1.
   – ¿Es necesario que se inserten todos los campos?
   – Como puede verse, los campos numéricos no van
     delimitados por apostrofes: '.
   – Pregunta Extra: El código postal lo hemos guardado como
     un campo no numérico ¿Por qué?.

• Para pensar: ¿Por qué es útil el agregar en la creación de
  nuestra tabla un campo “auto-incremental” que nos permita
  asignar un único número a cada uno de los registros?


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Borrar un registro I
• Para borrar un registro nos servimos de la instrucción
  DELETE.
      – Debemos especificar cuál o cuáles son los registros que queremos
        borrar.
      – Lo anterior se puede lograr mediante condiciones al utilizar la
        cláusula WHERE.

    La forma de seleccionar se verá detalladamente en
    capítulos posteriores. Por ahora nos contentaremos de
    mostrar cuál es el tipo de sintaxis utilizado para efectuar
    estas supresiones:

    DELETE FROM tabla WHERE condiciones


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Borrar un registro II
• Si queremos borrar todos los registros de los
  clientes que se llamen Perico:
    DELETE FROM cliente WHERE cli_nombre =
    'Perico‘;

    WARNING: Si no especificamos una condición, lo
    que estamos haciendo es borrar toda la tabla:

    DELETE FROM clientes;



Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Actualizar un registro I
• UPDATE es la instrucción que nos sirve para modificar
  nuestros registros.

• Con WHERE especificamos que filas actualizaremos, y con
  SET especificamos que campos se actualizan y con que
  valor. La sintaxis es de este tipo:
    UPDATE nombre_tabla SET
       nombre_campo1 = valor_campo1,
       nombre_campo2 = valor_campo2, ...
    WHERE condiciones_de_selección



Osvaldo Mena R.    osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Actualizar un registro II
• Un ejemplo:
    UPDATE cliente SET cli_nombre = ‘José’
    WHERE cli_nombre = ‘Pepe’

    ¿Qué hicimos? Mediante esta sentencia cambiamos el
    nombre Pepe por el de José en todos los registros cuyo
    nombre sea Pepe.

    WARNING: UPDATE cliente SET cli_nombre = ‘test’;
                                                                          *le fuck




Osvaldo Mena R.    osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Tablas I
• La selección total o parcial de una tabla se lleva a cabo
  mediante la instrucción SELECT. En dicha selección hay
  que especificar:
           - Los campos que queremos seleccionar
           - La tabla en la que hacemos la selección
    En nuestra tabla modelo de clientes podríamos hacer
    por ejemplo una selección del nombre y dirección de
    los clientes con una instrucción de este tipo:
    SELECT cli_nombre, cli_direccion FROM
    cliente;

Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Tablas II
• Si quisiésemos seleccionar todos los campos, podríamos
  utilizar el comodín * del siguiente modo:
    SELECT * FROM cliente;

    Resulta también muy útil el filtrar los registros mediante
    condiciones que vienen expresadas después de la cláusula
    WHERE.

    Si quisiésemos mostrar los clientes de una determinada
    ciudad usaríamos una expresión como esta:
    SELECT * FROM cliente WHERE cli_poblacion LIKE 'Madrid'


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de tablas III (Order by)
• Podemos ordenar los resultados:

    SELECT * FROM cliente WHERE cli_poblacion LIKE 'Madrid'
    ORDER BY nombre

    Se pueden utilizar varios criterios de ordenamiento.
    SELECT * FROM cliente WHERE cli_poblacion LIKE 'Madrid'
    ORDER BY cli_nombre , cli_apellido

    Es posible especificar orden ascendente (ASC) o descendente
    (DESC).
    SELECT * FROM cliente WHERE ORDER BY cli_nombre desc


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Tablas IV (Distinct)
• Una opción interesante es la de efectuar selecciones
  sin coincidencia. Si por ejemplo buscásemos el saber
  en qué ciudades se encuentran nuestros clientes sin
  necesidad de que para ello aparezca varias veces la
  misma ciudad usaríamos una sentencia de esta clase:
    SELECT DISTINCT cli_poblacion FROM cliente ORDER
    BY cli_poblacion asc

    Así evitaríamos ver repetido Madrid tantas veces como
    clientes tengamos en esa población.


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Tablas V (Operadores)
• Los siguientes operadores serán utilizados
  después de la cláusula WHERE y pueden ser
  combinados hábilmente para optimizar nuestra
  selección a muy altos niveles.




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Tablas VI (Operadores)




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Tablas VII (Ejemplos)
• Búsqueda de clientes cuya población sea parecida a “madrid” y cuyo
  nombre no se parezca a “Pepe”
    SELECT * FROM cliente WHERE cli_poblacion LIKE ‘madrid’ AND NOT
    (cli_nombre LIKE ‘Pepe‘)


• Si quisiéramos recoger en una selección a los clientes de nuestra tabla
  cuyo apellido comienza por A y cuyo número de pedidos esta
  comprendido entre 20 y 40:
    SELECT * FROM cliente WHERE cli_apellidos LIKE ‘A%’ AND cli_pedidos
    BETWEEN 20 AND 40


• El operador In, lo veremos más adelante, es muy práctico para consultas
  en varias tablas. Para casos de una tabla es empleado del siguiente modo:
    SELECT * FROM cliente WHERE cli_poblacion IN (‘Madrid’,‘Barcelona’,
    ‘Valencia’)



Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Varias Tablas I




 ¿Alguien sabe qué significan las líneas (relaciones)?




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Varias Tablas II
• Estas tablas pueden ser utilizadas simultáneamente para
  extraer información de todo tipo.
• Supongamos que queremos enviar un correo masivo a todos
  aquellos que hayan realizado un pedido ese mismo día.
  Podríamos escribir algo así:
         SELECT DISTINCT cliente.cli_apellidos,
         cliente.cli_email
         FROM cliente , pedido
         WHERE
          pedido.ped_fecha like ‘17/04/2012’ AND
          pedido.cli_id = cliente.cli_id


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Selección de Varias Tablas III
• Veamos otro ejemplo más para consolidar estos
  nuevos conceptos. Esta vez queremos ver el
  título del libro correspondiente a cada uno de los
  pedidos realizados:
    SELECT pedido.ped_id, articulo.art_titulo
    FROM pedido, articulo WHERE pedido.art_id =
    articulo.art_id

    En realidad la filosofía continua siendo la misma
    que para la consulta de una única tabla.


Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Stats de “Producción”
• 21 sitios con baja concurrencia (5.72 [requests/s] en total).
• 24,092,504 consultas en una semana (35.2 [consultas/s]).
• Tráfico entre DBMS y aplicaciones: ~50Gb (en una semana).




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Funciones
• El empleo de funciones es útil para la explotación de los
  campos numéricos y otras utilidades.

• Además de los criterios hasta ahora explicados para
  realizar las consultas en tablas, SQL permite también
  aplicar un conjunto de funciones predefinidas.

• Estas funciones, aunque básicas, pueden ayudarnos en
  algunos momentos a expresar nuestra selección de una
  manera más simple.




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Funciones




  Se recomienda utilizar un alias para recuperar los valores de las funciones. Esto se
  puede lograr especificando en la sentencia SQL un alias utilizando la instrucción
  AS. La cosa podría quedar así:

  SELECT Sum(ped_total) AS suma_pedidos FROM pedido




Osvaldo Mena R.    osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Funciones
•   Por supuesto, todo lo visto hasta ahora puede ser aplicado en este tipo de funciones de
    modo que, por ejemplo, podemos establecer condiciones con la cláusula WHERE
    construyendo sentencias como esta:
    SELECT Sum(ped_cantidad) AS suma FROM pedido WHERE art_id = 6
    Esto nos proporcionaría la cantidad de ejemplares de un determinado libro que han sido
    vendidos.

    Otra propiedad interesante de estas funciones es que permiten realizar operaciones con
    varios campos dentro de un mismo paréntesis:
    SELECT Avg(ped_total/ped_cantidad) FROM pedido

    Esta sentencia da como resultado el precio medio al que se están vendiendo los libros. Este
    resultado no tiene por qué coincidir con el del precio medio de los libros presentes en el
    inventario, ya que, puede ser que la gente tenga tendencia a comprar los libros caros o los
    baratos:
    SELECT Avg(art_precio) AS precio_venta FROM articulo



Osvaldo Mena R.     osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Funciones
• Una cláusula interesante en el uso de funciones es Group By. Esta cláusula
  nos permite agrupar registros a los cuales vamos a aplicar la función.
  Podemos por ejemplo calcular el dinero gastado por cada cliente:
    SELECT cli_id, Sum(ped_total) AS suma_pedidos FROM
    pedidos group by cli_id
    O saber el numero de pedidos que han realizado:
    SELECT cli_id, Count(*) AS numero_pedidos FROM pedido
    group by cli_id

    Como podemos apreciar, las posibilidades son prácticamente infinitas, y
    son realmente útiles para la obtención de información. Ahora, sólo falta
    aplicar nuestra imaginación.




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
SQL Injection




usuario := “Alicia’; DROP TABLE usuarios;--”

consulta := "SELECT * FROM usuarios WHERE nombre = ‘” + usuario + “’;”

consulta := "SELECT * FROM usuarios WHERE nombre = ‘Alicia’;
           DROP TABLE usuarios;--’;”

Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
Fin




Osvaldo Mena R.   osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena

Weitere ähnliche Inhalte

Was ist angesagt? (20)

PHP mysql Mysql joins
PHP mysql  Mysql joinsPHP mysql  Mysql joins
PHP mysql Mysql joins
 
Basic array in c programming
Basic array in c programmingBasic array in c programming
Basic array in c programming
 
8. sql
8. sql8. sql
8. sql
 
Triggers en BD mysql
Triggers en BD mysqlTriggers en BD mysql
Triggers en BD mysql
 
Configuracion del servidor http en centos 7
Configuracion del servidor http en centos 7Configuracion del servidor http en centos 7
Configuracion del servidor http en centos 7
 
IDUG 2015 NA Data Movement Utilities final
IDUG 2015 NA Data Movement Utilities finalIDUG 2015 NA Data Movement Utilities final
IDUG 2015 NA Data Movement Utilities final
 
Mysql Ppt
Mysql PptMysql Ppt
Mysql Ppt
 
Php
PhpPhp
Php
 
Sql
SqlSql
Sql
 
Sql operators & functions 3
Sql operators & functions 3Sql operators & functions 3
Sql operators & functions 3
 
Subroutines
SubroutinesSubroutines
Subroutines
 
SQL
SQLSQL
SQL
 
Practica de replicacion maestro esclavo en mysql
Practica de replicacion maestro esclavo en mysqlPractica de replicacion maestro esclavo en mysql
Practica de replicacion maestro esclavo en mysql
 
Intro to Dynamic Web Pages
Intro to Dynamic Web PagesIntro to Dynamic Web Pages
Intro to Dynamic Web Pages
 
DOAG - Oracle Database Locking Mechanism Demystified
DOAG - Oracle Database Locking Mechanism Demystified DOAG - Oracle Database Locking Mechanism Demystified
DOAG - Oracle Database Locking Mechanism Demystified
 
Resumen sql-oracle
Resumen sql-oracleResumen sql-oracle
Resumen sql-oracle
 
Ddl & dml commands
Ddl & dml commandsDdl & dml commands
Ddl & dml commands
 
SQL Tutorial - How To Create, Drop, and Truncate Table
SQL Tutorial - How To Create, Drop, and Truncate TableSQL Tutorial - How To Create, Drop, and Truncate Table
SQL Tutorial - How To Create, Drop, and Truncate Table
 
DML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with Examples
DML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with ExamplesDML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with Examples
DML, DDL, DCL ,DRL/DQL and TCL Statements in SQL with Examples
 
SQL - DML and DDL Commands
SQL - DML and DDL CommandsSQL - DML and DDL Commands
SQL - DML and DDL Commands
 

Andere mochten auch

php y mysql para dummies 2da edicion
php y mysql para dummies 2da edicionphp y mysql para dummies 2da edicion
php y mysql para dummies 2da edicionDavid Moradel
 
Blackberry for dummies
Blackberry for dummiesBlackberry for dummies
Blackberry for dummiesUNIVA
 
Apertura del evento "Business Intelligence for dummies"
Apertura del evento "Business Intelligence for dummies"Apertura del evento "Business Intelligence for dummies"
Apertura del evento "Business Intelligence for dummies"Raona
 
Unity3D para dummies (BcnDevCon 2012)
Unity3D para dummies (BcnDevCon 2012)Unity3D para dummies (BcnDevCon 2012)
Unity3D para dummies (BcnDevCon 2012)Eduard Tomàs
 
Aprovechando la tecnología para un desarrollo ágil
Aprovechando la tecnología para un desarrollo ágilAprovechando la tecnología para un desarrollo ágil
Aprovechando la tecnología para un desarrollo ágilomenar
 
Timer powerpoint break
Timer powerpoint breakTimer powerpoint break
Timer powerpoint breakPelham Mead
 
Testing para dummies
Testing para dummiesTesting para dummies
Testing para dummiesSoftware Guru
 
Administrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBAAdministrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBASpanishPASSVC
 
Finanzas para todos · Corporate finance for dummies
Finanzas para todos · Corporate finance for dummiesFinanzas para todos · Corporate finance for dummies
Finanzas para todos · Corporate finance for dummiesMiguel Miguel Lopez
 
Sql y programacion en access 2010
Sql y programacion en access 2010Sql y programacion en access 2010
Sql y programacion en access 2010Juanito Edgar
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1Jano González
 
De los árboles a la cama de un hospital
De los árboles a la cama de un hospitalDe los árboles a la cama de un hospital
De los árboles a la cama de un hospitalSoftware Guru
 
Introduccion a las bases de datos 1 parte
Introduccion a las bases de datos 1 parteIntroduccion a las bases de datos 1 parte
Introduccion a las bases de datos 1 parteCristian Salazar C.
 
Lenguajes programacion
Lenguajes programacionLenguajes programacion
Lenguajes programacionXavii Torres
 
Guía rápida de MySQL Server 5.5 y Workbench 5.2
Guía rápida de MySQL Server 5.5 y Workbench 5.2Guía rápida de MySQL Server 5.5 y Workbench 5.2
Guía rápida de MySQL Server 5.5 y Workbench 5.2andermijan
 

Andere mochten auch (20)

php y mysql para dummies 2da edicion
php y mysql para dummies 2da edicionphp y mysql para dummies 2da edicion
php y mysql para dummies 2da edicion
 
Tablets for dummies
Tablets for dummiesTablets for dummies
Tablets for dummies
 
Blackberry for dummies
Blackberry for dummiesBlackberry for dummies
Blackberry for dummies
 
Apertura del evento "Business Intelligence for dummies"
Apertura del evento "Business Intelligence for dummies"Apertura del evento "Business Intelligence for dummies"
Apertura del evento "Business Intelligence for dummies"
 
Unity3D para dummies (BcnDevCon 2012)
Unity3D para dummies (BcnDevCon 2012)Unity3D para dummies (BcnDevCon 2012)
Unity3D para dummies (BcnDevCon 2012)
 
Organización 10 de abril
Organización 10 de abrilOrganización 10 de abril
Organización 10 de abril
 
Aprovechando la tecnología para un desarrollo ágil
Aprovechando la tecnología para un desarrollo ágilAprovechando la tecnología para un desarrollo ágil
Aprovechando la tecnología para un desarrollo ágil
 
Timer powerpoint break
Timer powerpoint breakTimer powerpoint break
Timer powerpoint break
 
Testing para dummies
Testing para dummiesTesting para dummies
Testing para dummies
 
Administrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBAAdministrando SQL Server, mejores practicas para un DBA
Administrando SQL Server, mejores practicas para un DBA
 
Finanzas para todos · Corporate finance for dummies
Finanzas para todos · Corporate finance for dummiesFinanzas para todos · Corporate finance for dummies
Finanzas para todos · Corporate finance for dummies
 
Sql y programacion en access 2010
Sql y programacion en access 2010Sql y programacion en access 2010
Sql y programacion en access 2010
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1
 
De los árboles a la cama de un hospital
De los árboles a la cama de un hospitalDe los árboles a la cama de un hospital
De los árboles a la cama de un hospital
 
Introduccion Orientada a Objetos
Introduccion Orientada a ObjetosIntroduccion Orientada a Objetos
Introduccion Orientada a Objetos
 
Introduccion a las bases de datos 1 parte
Introduccion a las bases de datos 1 parteIntroduccion a las bases de datos 1 parte
Introduccion a las bases de datos 1 parte
 
Lenguajes programacion
Lenguajes programacionLenguajes programacion
Lenguajes programacion
 
500 conectores (1) de escritos
500 conectores (1) de escritos500 conectores (1) de escritos
500 conectores (1) de escritos
 
Proyecto poo
Proyecto pooProyecto poo
Proyecto poo
 
Guía rápida de MySQL Server 5.5 y Workbench 5.2
Guía rápida de MySQL Server 5.5 y Workbench 5.2Guía rápida de MySQL Server 5.5 y Workbench 5.2
Guía rápida de MySQL Server 5.5 y Workbench 5.2
 

Ähnlich wie SQL For Dummies (20)

Manual completo-sql
Manual completo-sqlManual completo-sql
Manual completo-sql
 
Manual completo-sql5
Manual completo-sql5Manual completo-sql5
Manual completo-sql5
 
Fundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sqlFundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sql
 
MYSQL DDL DML.pdf
MYSQL DDL DML.pdfMYSQL DDL DML.pdf
MYSQL DDL DML.pdf
 
unidad-4
 unidad-4 unidad-4
unidad-4
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
95795044 unidad-4
95795044 unidad-495795044 unidad-4
95795044 unidad-4
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
Precentacion
PrecentacionPrecentacion
Precentacion
 
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptxOVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
DDL oracle - base de datos
DDL oracle - base de datosDDL oracle - base de datos
DDL oracle - base de datos
 

SQL For Dummies

  • 1. SQL for Dummies Bases de Datos 2012-1 18 de Abril del 2012 Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 2. Antes de Comenzar… • Presentación Personal. • Conocimientos previos? • Expectativas sobre el curso? • Algunos detalles del curso. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 3. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 4. ¿Qué es SQL? • Structured Query Language que no es más que un lenguaje estándar de comunicación con bases de datos. • OJO: ’’’’’’’’’’’Estándar’’’’’’’’’’’, varía Levemente de un DBMS a otro. • Aparte de esta pseudo-universalidad SQL posee otras características interesantes: – Explota la potencia y flexibilidad de las BDs relacionales. – Relativamente fácil de aprender. – Orientación a “registros” (filas). Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 5. Tipos de Datos I • Pregunta: Qué es una Base de Datos Relacional? • Un aspecto previo a considerar es la naturaleza de los valores que introducimos en esos campos. – Capturar la esencia del dato a guardar. – Facilitar búsquedas posteriores. – Optimizar los recursos de memoria. • Cada base de datos introduce sus tipos de datos que no necesariamente están presentes en otras. Sin embargo, existe un conjunto de tipos (de datos) que están representados en la totalidad de estas bases. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 6. Tipos de Datos II Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 7. Creación de Tablas I • En general, para la mayoría de los DBMS existen potentes editores de modelos de datos que permiten la rápida creación y modificación de tablas. Existen razones para crear nuevas tablas en un modelo existente: – De carácter temporal (generalmente para procedimientos almacenados). – De carácter permanente (por necesidades concretas de nuestra aplicación). Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 8. Creación de Tablas II Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 9. Creación de Tablas III • La sintaxis de creación puede variar ligeramente de una base de datos a otra ya que los tipos de campo aceptados no están completamente estandarizados. La sintaxis para realizar la creación de una tabla, suele ser algo como lo siguiente. CREATE TABLE nombre_tabla ( nombre_campo_1 tipo_1 propiedades_1, nombre_campo_2 tipo_2 propiedades_2, nombre_campo_n tipo_n propiedades_n, PRIMARY KEY( nombre_campo_x , ... ) ) Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 10. Creación de Tablas IV • Ejemplo: Crear una tabla de clientes: CREATE TABLE cliente ( cli_id INT(4) NOT NULL AUTO_INCREMENT, cli_nombre VARCHAR(50), cli_apellidos VARCHAR(100), cli_direccion VARCHAR(500), cli_email VARCHAR(255), cli_codigo_postal VARCHAR(50), cli_poblacion VARCHAR(255), cli_pedidos INT PRIMARY KEY( cli_id ) ) Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 11. Creación de Tablas V • Del mismo modo podríamos crear la tabla de artículos con una sentencia como ésta: CREATE TABLE articulo ( art_id INT(4) NOT NULL AUTO_INCREMENT, art_titulo VARCHAR(50), art_autor VARCHAR(25), art_editorial VARCHAR(25), art_recio REAL, PRIMARY KEY( art_id ) ) Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 12. Creación de Tablas VI • Finalmente para una tabla de pedidos: CREATE TABLE pedido ( ped_id INT(4) NOT NULL AUTO_INCREMENT, cli_id INT(4) NOT NULL, art_id INT(4) NOT NULL, ped_fecha DATE, ped_cantidad INT(4), ped_total INT(4), FOREIGN KEY (cli_id) REFERENCES cliente(cli_id), FOREIGN KEY (art_id) REFERENCES articulo(art_id), PRIMARY KEY(ped_id) ) Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 13. Insertar un Registro • Los registros pueden ser introducidos en una tabla a partir de sentencias que emplean la instrucción INSERT. La sintaxis utilizada es la siguiente: INSERT INTO nombre_tabla (nombre_campo1, nombre_campo2,...) VALUES (valor_campo1, valor_campo2...) Un ejemplo sencillo a partir de nuestras tablas es la introducción de un nuevo cliente, lo cual se haría con una instrucción de este tipo: INSERT INTO cliente (cli_nombre, cli_apellidos, cli_direccion, cli_codigo_postal, cli_email) VALUES ('Perico', 'Palotes', 'Percebe n°13', '123456', 'perico@usm.cl') Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 14. Analizando un poco lo anterior • Algunas cosas que podemos notar: – Mayúsculas: ¿Necesarias? – La correspondencia entre campo y valor es 1:1. – ¿Es necesario que se inserten todos los campos? – Como puede verse, los campos numéricos no van delimitados por apostrofes: '. – Pregunta Extra: El código postal lo hemos guardado como un campo no numérico ¿Por qué?. • Para pensar: ¿Por qué es útil el agregar en la creación de nuestra tabla un campo “auto-incremental” que nos permita asignar un único número a cada uno de los registros? Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 15. Borrar un registro I • Para borrar un registro nos servimos de la instrucción DELETE. – Debemos especificar cuál o cuáles son los registros que queremos borrar. – Lo anterior se puede lograr mediante condiciones al utilizar la cláusula WHERE. La forma de seleccionar se verá detalladamente en capítulos posteriores. Por ahora nos contentaremos de mostrar cuál es el tipo de sintaxis utilizado para efectuar estas supresiones: DELETE FROM tabla WHERE condiciones Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 16. Borrar un registro II • Si queremos borrar todos los registros de los clientes que se llamen Perico: DELETE FROM cliente WHERE cli_nombre = 'Perico‘; WARNING: Si no especificamos una condición, lo que estamos haciendo es borrar toda la tabla: DELETE FROM clientes; Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 17. Actualizar un registro I • UPDATE es la instrucción que nos sirve para modificar nuestros registros. • Con WHERE especificamos que filas actualizaremos, y con SET especificamos que campos se actualizan y con que valor. La sintaxis es de este tipo: UPDATE nombre_tabla SET nombre_campo1 = valor_campo1, nombre_campo2 = valor_campo2, ... WHERE condiciones_de_selección Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 18. Actualizar un registro II • Un ejemplo: UPDATE cliente SET cli_nombre = ‘José’ WHERE cli_nombre = ‘Pepe’ ¿Qué hicimos? Mediante esta sentencia cambiamos el nombre Pepe por el de José en todos los registros cuyo nombre sea Pepe. WARNING: UPDATE cliente SET cli_nombre = ‘test’; *le fuck Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 19. Selección de Tablas I • La selección total o parcial de una tabla se lleva a cabo mediante la instrucción SELECT. En dicha selección hay que especificar: - Los campos que queremos seleccionar - La tabla en la que hacemos la selección En nuestra tabla modelo de clientes podríamos hacer por ejemplo una selección del nombre y dirección de los clientes con una instrucción de este tipo: SELECT cli_nombre, cli_direccion FROM cliente; Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 20. Selección de Tablas II • Si quisiésemos seleccionar todos los campos, podríamos utilizar el comodín * del siguiente modo: SELECT * FROM cliente; Resulta también muy útil el filtrar los registros mediante condiciones que vienen expresadas después de la cláusula WHERE. Si quisiésemos mostrar los clientes de una determinada ciudad usaríamos una expresión como esta: SELECT * FROM cliente WHERE cli_poblacion LIKE 'Madrid' Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 21. Selección de tablas III (Order by) • Podemos ordenar los resultados: SELECT * FROM cliente WHERE cli_poblacion LIKE 'Madrid' ORDER BY nombre Se pueden utilizar varios criterios de ordenamiento. SELECT * FROM cliente WHERE cli_poblacion LIKE 'Madrid' ORDER BY cli_nombre , cli_apellido Es posible especificar orden ascendente (ASC) o descendente (DESC). SELECT * FROM cliente WHERE ORDER BY cli_nombre desc Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 22. Selección de Tablas IV (Distinct) • Una opción interesante es la de efectuar selecciones sin coincidencia. Si por ejemplo buscásemos el saber en qué ciudades se encuentran nuestros clientes sin necesidad de que para ello aparezca varias veces la misma ciudad usaríamos una sentencia de esta clase: SELECT DISTINCT cli_poblacion FROM cliente ORDER BY cli_poblacion asc Así evitaríamos ver repetido Madrid tantas veces como clientes tengamos en esa población. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 23. Selección de Tablas V (Operadores) • Los siguientes operadores serán utilizados después de la cláusula WHERE y pueden ser combinados hábilmente para optimizar nuestra selección a muy altos niveles. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 24. Selección de Tablas VI (Operadores) Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 25. Selección de Tablas VII (Ejemplos) • Búsqueda de clientes cuya población sea parecida a “madrid” y cuyo nombre no se parezca a “Pepe” SELECT * FROM cliente WHERE cli_poblacion LIKE ‘madrid’ AND NOT (cli_nombre LIKE ‘Pepe‘) • Si quisiéramos recoger en una selección a los clientes de nuestra tabla cuyo apellido comienza por A y cuyo número de pedidos esta comprendido entre 20 y 40: SELECT * FROM cliente WHERE cli_apellidos LIKE ‘A%’ AND cli_pedidos BETWEEN 20 AND 40 • El operador In, lo veremos más adelante, es muy práctico para consultas en varias tablas. Para casos de una tabla es empleado del siguiente modo: SELECT * FROM cliente WHERE cli_poblacion IN (‘Madrid’,‘Barcelona’, ‘Valencia’) Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 26. Selección de Varias Tablas I ¿Alguien sabe qué significan las líneas (relaciones)? Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 27. Selección de Varias Tablas II • Estas tablas pueden ser utilizadas simultáneamente para extraer información de todo tipo. • Supongamos que queremos enviar un correo masivo a todos aquellos que hayan realizado un pedido ese mismo día. Podríamos escribir algo así: SELECT DISTINCT cliente.cli_apellidos, cliente.cli_email FROM cliente , pedido WHERE pedido.ped_fecha like ‘17/04/2012’ AND pedido.cli_id = cliente.cli_id Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 28. Selección de Varias Tablas III • Veamos otro ejemplo más para consolidar estos nuevos conceptos. Esta vez queremos ver el título del libro correspondiente a cada uno de los pedidos realizados: SELECT pedido.ped_id, articulo.art_titulo FROM pedido, articulo WHERE pedido.art_id = articulo.art_id En realidad la filosofía continua siendo la misma que para la consulta de una única tabla. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 29. Stats de “Producción” • 21 sitios con baja concurrencia (5.72 [requests/s] en total). • 24,092,504 consultas en una semana (35.2 [consultas/s]). • Tráfico entre DBMS y aplicaciones: ~50Gb (en una semana). Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 30. Funciones • El empleo de funciones es útil para la explotación de los campos numéricos y otras utilidades. • Además de los criterios hasta ahora explicados para realizar las consultas en tablas, SQL permite también aplicar un conjunto de funciones predefinidas. • Estas funciones, aunque básicas, pueden ayudarnos en algunos momentos a expresar nuestra selección de una manera más simple. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 31. Funciones Se recomienda utilizar un alias para recuperar los valores de las funciones. Esto se puede lograr especificando en la sentencia SQL un alias utilizando la instrucción AS. La cosa podría quedar así: SELECT Sum(ped_total) AS suma_pedidos FROM pedido Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 32. Funciones • Por supuesto, todo lo visto hasta ahora puede ser aplicado en este tipo de funciones de modo que, por ejemplo, podemos establecer condiciones con la cláusula WHERE construyendo sentencias como esta: SELECT Sum(ped_cantidad) AS suma FROM pedido WHERE art_id = 6 Esto nos proporcionaría la cantidad de ejemplares de un determinado libro que han sido vendidos. Otra propiedad interesante de estas funciones es que permiten realizar operaciones con varios campos dentro de un mismo paréntesis: SELECT Avg(ped_total/ped_cantidad) FROM pedido Esta sentencia da como resultado el precio medio al que se están vendiendo los libros. Este resultado no tiene por qué coincidir con el del precio medio de los libros presentes en el inventario, ya que, puede ser que la gente tenga tendencia a comprar los libros caros o los baratos: SELECT Avg(art_precio) AS precio_venta FROM articulo Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 33. Funciones • Una cláusula interesante en el uso de funciones es Group By. Esta cláusula nos permite agrupar registros a los cuales vamos a aplicar la función. Podemos por ejemplo calcular el dinero gastado por cada cliente: SELECT cli_id, Sum(ped_total) AS suma_pedidos FROM pedidos group by cli_id O saber el numero de pedidos que han realizado: SELECT cli_id, Count(*) AS numero_pedidos FROM pedido group by cli_id Como podemos apreciar, las posibilidades son prácticamente infinitas, y son realmente útiles para la obtención de información. Ahora, sólo falta aplicar nuestra imaginación. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 34. Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 35. SQL Injection usuario := “Alicia’; DROP TABLE usuarios;--” consulta := "SELECT * FROM usuarios WHERE nombre = ‘” + usuario + “’;” consulta := "SELECT * FROM usuarios WHERE nombre = ‘Alicia’; DROP TABLE usuarios;--’;” Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena
  • 36. Fin Osvaldo Mena R. osvaldo.mena@usm.cl , @omenar , osvaldo.mena.requena