sql-resumen
DESCRIPTION
Resumen sobre SQLTRANSCRIPT
Facultad de Ciencias Fsicas y Matemticas
5 INTRODUCCIN A SQL
5.1 Qu es el SQL?ElSQL(Structured query language),lenguaje de consulta estructurado, es un lenguaje surgido de un proyecto de investigacin de IBM para el acceso a bases de datos relacionales. Actualmente se ha convertido en unestndar de lenguaje de bases de datos, y la mayora de los sistemas de bases de datos lo soportan, desde sistemas para ordenadores personales, hasta grandes ordenadores.
Por supuesto, a partir del estndar cada sistema ha desarrollado su propio SQL que puede variar de un sistema a otro, pero con cambios que no suponen ninguna complicacin para alguien que conozca un SQL concreto, como el que vamos a ver aqu correspondiente al Access2000.
Como su nombre indica, el SQL nospermiterealizarconsultas a la base de datos. Pero el nombre se queda corto ya que SQL adems realiza funciones dedefinicin, control y gestin de la base de datos.Las sentencias SQL se clasifican segn su finalidad dando origen a tres lenguajes o mejor dicho sublenguajes:
ElDDL(Data DescriptionLanguage),lenguaje de definicinde datos, incluye rdenes para definir, modificar o borrar las tablas en las que se almacenan los datos y de las relaciones entre estas. (Es el que ms varia de un sistema a otro) ElDCL(Data Control Language),lenguaje de controlde datos, contiene elementos tiles para trabajar en un entorno multiusuario, en el que es importante la proteccin de los datos, la seguridad de las tablas y el establecimiento de restricciones en el acceso, as como elementos para coordinar la comparticin de datos por parte de usuarios concurrentes, asegurando que no interfieren unos con otros.
ElDML(Data ManipulationLanguage),lenguaje de manipulacinde datos, nos permite recuperar los datos almacenados en la base de datos y tambin incluye rdenes para permitir al usuario actualizar la base de datos aadiendo nuevos datos, suprimiendo datos antiguos o modificando datos previamente almacenados.5.2 Caractersticas del lenguajeUna sentencia SQL es como unafrase(escrita eningls) con la que decimoslo que queremos obtener y de donde obtenerlo.
Todas las sentencias empiezan con unverbo(palabra reservada que indica la accin a realizar), seguido del resto declusulas, algunasobligatoriasy otrasopcionales que completan la frase. Todas las sentencias siguen unasintaxispara que se puedan ejecutar correctamente.5.3 Lenguaje de Manipulacin de Datos
El DML(DataManipulationLanguage) lenguaje de manipulacin de datos es un idioma proporcionado por los [[sistema de gestin de base de datos] sistemas gestores de bases de datos] que permite a los usuarios de la misma llevar a cabo las tareas de consulta o modificacin de los datos contenidos en las Bases de Datos del Sistema Gestor de Bases de Datos.
5.3.1 Sentencias DML
5.3.1.1 SELECT
Una de las sentencias SQL ms importantes es SELECT, ya que permite realizar consultas sobre los datos almacenados en la base de datos.
Sintaxis SQL SELECT
SELECT * FROM nombretabla
SELECT columna1, columna2 FROM nombretabla
Ejemplo:
Para los ejemplos, tendremos la siguiente tabla de personas denominada personas
Estos son los datos almacenados en la tabla personas
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
ANTONIO
GARCIA
BENITO
LUIS
LOPEZ
PEREZ
Si queremos consultar todos los datos de la tabla personas
SELECT * FROM personas
Este ser el resultado:
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
ANTONIO
GARCIA
BENITO
LUIS
LOPEZ
PEREZ
5.3.1.2 INSER INTOLa sentencia INSERT INTO se utiliza para insertar nuevas filas en una tabla.
Es posible insertar una nueva fila en una tabla de dos formas distintas:
INSERT INTO nombre_tablaVALUES (valor1, valor2, valor3, .)
INSERT INTO nombre_tabla (columna1, columna2, columna3,.)VALUES (valor1, valor2, valor3, .)
Ejemplo:
Dada la siguiente tabla personas:
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
LUIS
LOPEZ
PEREZ
ANTONIO
GARCIA
BENITO
Si queremos insertar una nueva fila en la tabla personas, lo podemos hacer con cualquiera de las dos sentencias siguientes:
INSERT INTO personasVALUES ('PEDRO', 'RUIZ', 'GONZALEZ')INSERT INTO personas (nombre, apellido1, apellido2)VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')
Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila en la tabla personas, quedando as dicha tabla:
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
LUIS
LOPEZ
PEREZ
ANTONIO
GARCIA
BENITO
PEDRO
RUIZ
GONZALEZ
5.3.1.3 UPDATELa sentenciaUPDATEse utiliza para modificar valores en una tabla.
La sintaxis de SQL UPDATE es:
UPDATE nombre_tablaSET columna1 = valor1, columna2 = valor2WHERE columna3 = valor3
La clusula SET establece los nuevos valores para las columnas indicadas.
La clusula WHERE sirve para seleccionar las filas que queremos modificar.
Ojo: Si omitimos la clusula WHERE, por defecto, modificar los valores en todas las filas de la tabla.
Ejemplo del uso de SQL UPDATE
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
LUIS
LOPEZ
PEREZ
ANTONIO
GARCIA
BENITO
PEDRO
RUIZ
GONZALEZ
Si queremos cambiar el apellido2 'BENITO' por 'RODRIGUEZ' ejecutaremos:
UPDATE personasSET apellido2 = 'RODRIGUEZ'WHERE nombre = 'ANTONIO'AND apellido1 = 'GARCIA'AND apellido2 = 'BENITO'
Ahora la tabla 'personas' quedar as:
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
LUIS
LOPEZ
PEREZ
ANTONIO
GARCIA
RODRIGUEZPEDRO
RUIZ
GONZALEZ
5.3.1.4 DELETELa sentenciaDELETEsirve para borrar filas de una tabla.
La sintaxis de SQL DELETE es:
DELETE FROM nombre_tablaWHERE nombre_columna = valor
Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia:
DELETE * FROM nombre_tabla;
Ejemplo de SQL DELETE para borrar una fila de la tabla personas
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
LUIS
LOPEZ
PEREZ
ANTONIO
GARCIA
RODRIGUEZPEDRO
RUIZ
GONZALEZ
Si queremos borrar a la persona LUIS LOPEZ PEREZ, podemos ejecutar el comando:
DELETE FROM personasWHERE nombre = 'LUIS'AND apellido1 = 'LOPEZ'AND apellido2 = 'PEREZ'
La tabla 'personas' resultante ser:
Nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
ANTONIO
GARCIA
RODRIGUEZPEDRO
RUIZ
GONZALEZ
Principio del formulario
Final del formulario
5.4 Lenguaje de Definicin de Datos (DDL)El DDL (Data Definition Language) lenguaje de definicin de datos es la parte del SQL que ms vara de un sistema a otro ya que esa rea tiene que ver con cmo se organizan internamente los datos y eso, cada sistema lo hace de una manera u otra.5.4.1 Sentencias DDL5.4.1.1 CREATE TABLE
La sentenciaCREATE TABLEse utiliza para crear una tabla en una base de datos existente.
Sintaxis CREATE TABLE
CREATE TABLE nombretabla{nombrecolumna1 tipodato1,nombrecolumna2 tipodato2,nombrecolumna3 tipodato3,..}
Ejemplo CREATE TABLE
CREATE TABLE personas{nombre varchar(255),apellido1 varchar(255),apellido2 varchar(255),depint}
Esta sentencia crear la base de datos 'personas' con 4 columnas.
Las columnas 'nombre', 'apellido1' y 'apellido2' son de tipo 'varchar', es decir, acepta valores alfanumricos hasta una longitud mxima de 255 caracteres.
La columna 'dep' es de tipo 'int', es decir, acepta slo nmeros.5.4.1.2 ALTER
La sentenciaSQL ALTERse utiliza para aadir, eliminar o modificar columnas de una tabla.
Sintaxis SQL ALTER
Para aadir una nueva columna a una tabla
ALTER TABLE nombretablaADD nombrecolumnatipodatocolumna
Para borrar una columna de una tabla
ALTER TABLE nombretablaDROP COLUMN nombrecolumna
Para modificar el tipo de dato de una columna de una tabla
ALTER TABLE nombretablaALTER COLUMN nombrecolumnatipodatocolumna
Ejemplos de SQL ALTER
perNombreapellido1apellido2
1ANTONIOPEREZGOMEZ
2ANTONIOGARCIARODRIGUEZ
3PEDRORUIZGONZALEZ
Dada la siguiente tabla de 'personas', queremos aadir una nueva columna, denominada 'fechadenacimiento'
ALTER TABLE personasADD fechadenacimiento date
pernombreapellido1apellido2Fechadenacimiento
1ANTONIOPEREZGOMEZ
2ANTONIOGARCIARODRIGUEZ
3PEDRORUIZGONZALEZ
Si queremos modificar el tipo de dato de la columna 'fecha', y ponerle tipo 'year' en lugar de tipo 'date'
ALTER TABLE personasALTER COLUMN fechadenacimientoyear
Si queremos borrar la columna 'fechadenacimiento', y dejarlo igual que al principio
ALTER TABLE personasDROP COLUMN fechadenacimiento
perNombreapellido1apellido2
1ANTONIOPEREZGOMEZ
2ANTONIOGARCIARODRIGUEZ
3PEDRORUIZGONZALEZ
5.4.1.3 DROPLa sentenciaDROPse utiliza para borrar definitivamente un ndice, tabla o base de datos.
DROP INDEXSintaxis DROP INDEX para MySQL
ALTER TABLE nombretablaDROP INDEX nombreindice
Sintaxis DROP INDEX para DB2 y ORACLE
DROP INDEX nombreindice
Sintaxis DROP INDEX para ACCESS
DROP INDEX nombreindiceON nombretabla
Sintaxis DROP INDEX para SQLSERVER
DROP INDEX nombretabla.nombreindice
DROP TABLESe utiliza DROP TABLE para borrar definitivamente una tabla
DROP TABLE nombretabla
DROP DATABASESe utiliza para borrar una base de datos definitivamente.
DROP DATABASE nombrebasededatos5.5 Las consultas simples5.5.1 WHERE
La clusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente algunas filas de la tabla que cumplan una determinada condicin.En la consulta slo aparecern las filas para las cuales la condicin es verdadera (TRUE), los valores nulos (NULL) no se incluyen por lo tanto en las filas del resultado. La condicin de seleccinpuede ser cualquiercondicin vlidaocombinacin de condicionesutilizando los operadoresNOT(no)AND(y) yOR(). En ACCESS2000 una clusula WHERE puede contener hasta 40 expresiones vinculadas por operadores lgicos AND y OREl valor de la condicin debe ir entre comillas simples ''.
5.5.1.2CONDICIONES DE SELECCIN
Las condiciones de seleccin son las condiciones que pueden aparecer en la clusula WHERE.
En SQL tenemos cinco condiciones bsicas:
el test de comparacinel test de rangoel test de pertenencia a un conjuntoel test de valor nuloel test de correspondencia con patrn.
El test de comparacin.
Compara el valor de una expresin con el valor de otra. La sintaxis es la siguiente:
= igual que distinto de< menor que mayor que>= mayor o igual
Por ejemplo:
Seleccionar las personas cuyo nombre sea ANTONIO
SELECT * FROM personasWHERE nombre = 'ANTONIO'
Nombreapellido1apellido2
ANTONIOPEREZGOMEZ
ANTONIOGARCIABENITO
5.5.2 OPERADORES AND OR
Losoperadores AND y ORse utilizan para filtrar resultados con 2 condiciones.
El operadorANDmostrar los resultados cuando se cumplan las 2 condiciones.
Condicin1 AND condicin2
El operadorORmostrar los resultados cuando se cumpla alguna de las 2 condiciones.
Condicion1 OR condicion2
En la tabla personas
nombreapellido1apellido2
ANTONIOPEREZGOMEZ
ANTONIOGARCIABENITO
LUISLOPEZPEREZ
La siguiente sentencia (ejemplo AND) dar el siguiente resultado:
SELECT * FROM personasWHERE nombre = 'ANTONIO'AND apellido1 = 'GARCIA'
Nombreapellido1apellido2
ANTONIOGARCIABENITO
La siguiente sentencia (ejemplo OR) dar el siguiente resultado:
SELECT * FROM personasWHERE nombre = 'ANTONIO'OR apellido1 = 'GARCIA'
Nombreapellido1apellido2
ANTONIOPEREZGOMEZ
ANTONIOGARCIABENITO
Tambin se pueden combinar AND y OR, como el siguiente ejemplo:
SELECT * FROM personasWHERE nombre = 'ANTONIO'AND (apellido1 = 'GARCIA' OR apellido1 = 'LOPEZ)
Nombreapellido1apellido2
ANTONIOGARCIABENITO
5.5.3 ORDER BY
Se utiliza para especificar el criterio de ordenacin de la respuesta a la consulta. Por defecto la ordenacin es ascendente (ASC), aunque se puede especificar un orden descendente con la utilizacin del comando (DES). La ordenacin se puede establecer sobre el contenido de columnas o sobre expresiones con columnas.SELECT nombre_columna(s)FROM nombre_tablaORDER BY nombre_columna(s) ASC|DESC
Por ejemplo, en la tabla personas:nombreapellido1apellido2
ANTONIOPEREZGOMEZ
LUISLOPEZPEREZ
ANTONIOGARCIABENITO
SELECT nombre, apellido1FROM personasORDER BY apellido1 ASC
Esta es la consulta resultante:
Nombreapellido1
LUISLOPEZ
ANTONIOGARCIA
ANTONIOPEREZ
Ejemplo de ordenacin descendiente (DES)
SELECT nombre, apellido1FROM personasORDER BY apellido1 DESC
Esta es la consulta resultante:
Nombreapellido1
ANTONIOPEREZ
ANTONIOGARCIA
LUISLOPEZ
5.5.4 BETWEEN
El operador BETWEEN se utiliza en la clusula WHERE para seleccionar valores entre un rango de datos.
Sintaxis de SQL BETWEEN
SELECT columnaFROM tabla WHERE columnaBETWEEN valor1 AND valor2
Ejemplo de SQL BETWEEN
Dada la siguiente tabla 'personas'
Nombreapellido1apellido2
ANTONIOPEREZGOMEZ
ANTONIOGARCIARODRIGUEZ
PEDRORUIZGONZALEZ
Seleccionar personas cuyo apellido1 est entre 'FERNANDEZ y 'HUERTAS'
SELECT *FROM personasWHERE apellido1BETWEEN 'FERNANDEZ' AND 'HUERTAS'
Nombreapellido1apellido2
ANTONIOGARCIARODRIGUEZ
Seleccionar personas cuyo apellido1 no est entre 'FERNANDEZ y 'HUERTAS'
SELECT *FROM personasWHERE apellido1NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS'
nombreapellido1apellido2
ANTONIOPEREZGOMEZ
PEDRORUIZGONZALEZ
5.6 Consultas multitabla
5.6.1 INNER JOIN
La sentenciaINNER JOINes la sentencia JOIN por defecto, y permite emparejar filas de distintas tablas de forma ms eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento est indexada. Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condicin de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condicin, con lo cual se emparejan slo las filas que luego aparecen en el resultado.
La sintaxis es la siguiente:
Ejemplo SQL INNER JOIN
Tabla personas, con la clave primaria "per "
pernombreapellido1apellido2Dep
1ANTONIOPEREZGOMEZ1
2ANTONIOGARCIARODRIGUEZ2
3PEDRORUIZGONZALEZ2
Tabla "departamentos", con la clave primaria "dep"
depDepartamento
1ADMINISTRACION
2INFORMATICA
3COMERCIAL
SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos WHERE personas.dep = departamentos.dep
nombreapellido1Departamento
ANTONIOPEREZADMINISTRACION
ANTONIOGARCIAINFORMATICA
PEDRORUIZINFORMATICA
5.6.2 LEFT JOIN
La sentenciaLEFT JOINcombina los valores de la primera tabla con los valores de la segunda tabla. Siempre devolver las filas de la primera tabla, incluso aunque no cumplan la condicin.
SELECT * FROM tabla1LEFT JOIN tabla2WHERE tabla1.columna1 = tabla2.columna1
Ejemplo de SQL LEFT JOIN
Tabla personas, con la clave primaria "per "
pernombreapellido1apellido2Dep
1ANTONIOPEREZGOMEZ1
2ANTONIOGARCIARODRIGUEZ2
3PEDRORUIZGONZALEZ4
Tabla "departamentos", con la clave primaria "dep"
depDepartamento
1ADMINISTRACION
2INFORMATICA
3COMERCIAL
SELECT nombre, apellido1, departamentoFROM personasLEFT JOIN departamentosWHERE personas.dep = departamentos.dep
Nombreapellido1Departamento
ANTONIOPEREZADMINISTRACION
ANTONIOGARCIAINFORMATICA
PEDRORUIZ
Aunque el departamento '4' de PEDRO RUIZ no existe en la tabla de departamentos, devolver la fila con esa columna 'departamento' en blanco.
5.6.3 RIGHT JOIN
La sentenciaRIGHT JOINcombina los valores de la primera tabla con los valores de la segunda tabla. Siempre devolver las filas de la segunda tabla, incluso aunque no cumplan la condicin.
En algunas bases de datos, la sentencia RIGHT JOIN es igual a RIGHT OUTER JOIN
SELECT * FROM tabla1 RIGHT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1
EJEMPLO SQL RIGHT JOIN
perNombreapellido1apellido2Dep
1ANTONIOPEREZGOMEZ1
2ANTONIOGARCIARODRIGUEZ2
3PEDRORUIZGONZALEZ4
Tabla "departamentos", con la clave primaria "dep"
DepDepartamento
1ADMINISTRACION
2INFORMATICA
3COMERCIAL
SELECT nombre, apellido1, departamentoFROM personasRIGHT JOIN departamentosWHERE personas.dep = departamentos.dep
Nombreapellido1Departamento
ANTONIOPEREZADMINISTRACION
ANTONIOGARCIAINFORMATICA
COMERCIAL
Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila aparecer con las otras columnas en blanco5.7 Funciones de Agregacin
5.7.1 Funcin AVG()
Esta funcinretorna el valor promedio de una columna numrica.
En SQL la sintaxis es de la siguiente manera:
SELECT AVG(nombre_columna)FROM nombre_tablaEJEMPLO SQL AVG()
Tenemos la tabla PRODUCTO y se desea calcular el precio promedio de la columna precio.descripcinprecio
Computadora800
Teclado30
Impresora150
SELECT AVG(precio)FROM PRODUCTO
Promedio
326
5.7.2 Funcin COUNT()
La funcinCOUNT()retorna el nmero de filas segn los criterios que especificaron.
En SQL la sintaxis que se utiliza para realizar la consulta es:
SELECT COUNT(nombre_columna)FROM nombre_tabla
SELECT COUNT(*)FROM nombre_tabla
COUNT(nombre_columna)retorna el nmero de valores que se encuentran en la columna especificada. Los valores NULL no se cuentan.
EJEMPLO SQL COUNT()
Tenemos la tabla PRODUCTO descripcinprecio
Computadora800
Teclado30
Impresora150
SELECT COUNT(*)FROM PRODUCTO
Num_filas
3
5.7.3 Funcin MAX()
La funcinMAX()retorna el mximo valor de la columna seleccionada.
En SQL la sintaxis utilizada es de la siguiente manera:
SELECT MAX(nombre_columna)FROM nombre_tabla
EJEMPLO SQL MAX()
Tenemos la tabla PRODUCTO descripcinprecio
Computadora800
Teclado30
Impresora150
SELECT MAX(*)as Precio_mayorFROM PRODUCTO
La funcin as es solo una etiqueta de salida de nuestro resultado.
Precio_mayor
800
5.7.4 Funcin MIN()
La funcinMIN()retorna el mnimo valor de la columna seleccionada.
En SQL la sintaxis utilizada es de la siguiente manera:
SELECT MIN(nombre_columna)FROM nombre_tabla
EJEMPLO SQL MIN()
Tenemos la tabla PRODUCTO descripcinprecio
Computadora800
Teclado30
Impresora150
SELECT MIN(*)asPrecio_menorFROM PRODUCTO
La funcin as es solo una etiqueta de salida de nuestro resultado.
Precio_menor
800
5.7.5 Funcin SUM()
La funcinSUM()retorna la suma total de una columna numrica.
En SQL la sintaxis utilizada es de la siguiente manera:
SELECT SUM(nombre_columna)FROM nombre_tabla
EJEMPLO SQL SUM()
Tenemos la tabla PRODUCTO descripcinprecio
Computadora800
Teclado30
Impresora150
SELECT SUM(*)asPrecio_totalFROM PRODUCTO
La funcin as es solo una etiqueta de salida de nuestro resultado.
Precio_total
980
5.7.6 Tabla Resumida con Funciones de agregacin
FuncinCometidoEjemplo
COUNT(col)Cuenta el nmero de filas agrupadas. select count(nombre),oficio from emp group by oficio;
AVG(col)Calcula el valor medio de todos los valores de la columna col. select avg(salario),oficio from emp group by oficio;
MAX(col)Calcula el valor mximo de todos los valores de la columna col. select max(salario),oficio from emp group by oficio;
MIN(col)Calcula el valor mnimo de todos los valores de la columna col. select min(salario),oficio from emp group by oficio;
SUM(col)Calcula la suma de los valores de la columna col. select sum(salario), oficio from emp group by oficio;
STDDEV(col)Calcula la desviacin tpica de los valores de la columna col sin tener en cuenta los valores nulos. select stddev(salario), oficio from emp group by oficio;
VARIANCE(col)Calcula la varianza de los valores de la columna col sin tener en cuenta los valores nulos. select variance(salario), oficio from emp group by oficio;
5.7.7 Tabla Resumida con Funciones Aritmticas
FuncinCometidoEjemploResultado
ABS(n)Calcula el valor absoluto de n. select abs(-15) from dual; 15
CEIL(n)Calcula el valor entero inmediatamente superior o igual a n. select ceil(15.7) from dual; 16
FLOOR(n)Calcula el valor entero inmediatamente inferior o igual a n. select floor(15.7) from dual; 15
MOD(m,n)Calcula el resto resultante de dividir m entre n. select mod(11,4) from dual; 3
POWER(m,n)Calcula la potencia n-esima de m. select power(3,2) from dual; 9
ROUND(m,n)Calcula el redondeo de m a n decimales. Si n