Академический Документы
Профессиональный Документы
Культура Документы
|
|
|
|
|
|
|
=
|
Tutorial SQL
SQL
El lenguaje SQL se utiliza para acceder y manipular datos en cualquier base de datos del mercado, como
por ejemplo, para las bases de datos MySQL, Oracle, DB2, SQL Server, Access.
SQL Introducción
El SQL es un lenguaje estructurado y un estándar ANSI para el acceso y manipulación de los datos de
cualquier base de datos.
El SQL se compone de sentencias SQL, cada una con una utilidad diferente, como por ejemplo:
SQL Sintaxis
Las sentencias SQL no son sensibles a mayúsculas y minúsculas, es decir, ‘SELECT’ y ‘select’ son dos
palabras iguales para SQL.
Algunos sistemas de bases de datos necesitan un punto y coma después de cada sentencia SQL para
ejecutarse correctamente
CREATE DATATABASE mibasedeatos;
Este punto y coma también puede servir para separar una sentencia SQL de otra sentencia SQL en la
misma línea.
CREATE DATATABASE mibasedeatos; CREATE TABLE mitabla1;
Las sentencias SQL se pueden agrupar por funcionalidades:
DDL está compuesto por sentencias para la creación (CREATE), modificación (ALTER) y borrado
(DROP) de los componentes principales de una base de datos:
base de datos (DATABASE),
tablas (TABLE)
vistas (VIEW)
índices (INDEX)
procedimientos almacenados (PROCEDURE)
disparadores (TRIGGER).
DML está compuesto por sentencias que sirven para consultar (SELECT), insertar (INSERT), modificar
(UPDATE) y borrar (DELETE) cualquier dato almacenado en la base de datos.
DCL está compuesto por sentencias SQL para controlar las funciones de administración que realiza el
gestor de base de datos, tales como, COMMIT, ROLLBACK, GRANT y REVOKE.
SQL SELECT
Una de las sentencias SQL más importantes es SELECT, ya que permite realizar consultas sobre los datos
almacenados en la base de datos.
Si queremos consulta todos los nombres y primer apellido de todas las personas
nombre apellido1
====== =======
ANTONIO PEREZ
LUIS LOPEZ
ANTONIO GARCIA
SQL DISTINCT
Al realizar una consulta puede ocurrir que existan valores repetidos para algunas columnas. Por ejemplo
SELECT nombre FROM personas
nombre
=====
ANTONIO
LUIS
ANTONIO
Esto no es un problema, pero a veces queremos que no se repitan, por ejemplo, si queremos saber los
nombre diferentes que hay en la tabla “personas”, entonces utilizaremos DISTINCT.
nombre
=====
ANTONIO
LUIS
SQL WHERE
La cláusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente algunas
filas de la tabla que cumplan una determinada condición.
Por ejemplo:
En la tabla personas
nombre apellido1 apellido2
======== ======== =======
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO
ORDER BY se utiliza para ordenar los resultados de una consulta, según el valor de la columna
especificada.
Por defecto, se ordena de forma ascendente (ASC) según los valores de la columna.
Si se quiere ordenar por orden descendente se utiliza la palabra DES
SELECT nombre_columna(s)
ORDERBY
FROM nombre_tabla
nombre_columna(s) ASC|DESC
Por ejemplo:
En la tabla personas
nombre apellido1 apellido2
======== ======== =======
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO
Es posible insertar una nueva fila en una tabla de dos formas distintas:
INSERTINTO nombre_tabla
VALUES (valor1, valor2, valor3, …)
Ejemplo:
En la 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:
Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila en la tabla personas,
quedando así dicha tabla:
La cláusula SET establece los nuevos valores para las columnas indicadas.
La cláusula WHERE sirve para seleccionar las filas que queremos modificar.
Ojo: Si omitimos la cláusula WHERE, por defecto, modificará los valores en todas las filas de la tabla.
Tabla ‘personas’:
nombre apellido1 apellido2
======== ======== =======
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO
PEDRO RUIZ GONZALEZ
UPDATE personas SET apellido2= ‘RODRIGUEZ’ WHERE nombre = ‘ANTONIO’ AND apellido1 =
‘GARCIA’ AND apellido2= ‘BENITO’
Tabla ‘personas’:
nombre apellido1 apellido2
======== ======== =======
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
SQL DELETE
Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia:
DELETE*
Ejemplo de FROM
SQL DELETE para borrar una fila de la tabla:
nombre_tabla;
Tabla ‘personas’:
nombre apellido1 apellido2
======== ======== =======
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
DELETE FROM personas WHERE nombre= ‘LUIS’ AND apellido1 = ‘LOPEZ’ AND apellido2=
‘PEREZ’
SQL TOP
La sentencia SQL TOP se utiliza para especificar el número de filas a mostrar en el resultado.
Esta cláusula SQL TOP es útil en tablas con muchos registros, para limitar el número de filas a mostrar en
la consulta, y así sea más rápida la consulta, consumiendo también menos recursos en el sistema.
Esta cláusula se especifica de forma diferente según el sistema de bases de datos utilizado.
Si quiero seleccionar los nombres que empiezan por ‘AN’ en la tabla ‘personas’, ejecutaría el comando
siguiente:
Este es el resultado
Los caracteres Wildcards (comodines) son caracteres especiales que se utilizan para realizar búsquedas
especiales, como por ejemplo, buscar palabras que empiecen por una letra determinada (letra%) o que
contengan la letra a (%a%), o que contengan alguna vocal ([aeiou]), etc.
Los caracteres Wildcards se utilizan con el operador SQL LIKE en una sentencia SELECT.Los caracteres
Wildcards son :
Ejemplos:
Ejemplos Wildcards
Sintaxis SQL IN
Ejemplo SQL IN
El operador BETWEEN se utiliza en la cláusula WHERE para seleccionar valores entre un rango de
datos.
SELECT columna FROM tabla WHERE columna BETWEEN valor1 AND valor2
Un alias, es otra forma de llamar a una tabla o a una columna, y se utiliza para simplificar las sentencias
SQL cuando los nombre de tablas o columnas son largos o complicados.
Utilizamos el alias ‘p’ para la tabla ‘personas’, para simplificar la sentencia SELECT
SELECT p.apellido1, p.apellido2 FROM personas ASp WHERE p.nombre = ‘ANTONIO’
apellido1 apellido2
======== =======
PEREZ GOMEZ
GARCIA RODRIGUEZ
apellido1 apellido2
======== =======
PEREZ GOMEZ
GARCIA RODRIGUEZ
SQL JOINS
Dichas tablas estarán relacionadas entre ellas de alguna forma, a través de alguna de sus columnas.
Una clave primaria es una columna con un valor único para cada registro de una tabla.
El propósito del JOIN es unir información de diferentes tablas, para no tener que repetir datos en
diferentes tablas.
Ejemplo:
Si tenemos las siguientes tablas
Si queremos saber los nombres de las personas que trabajan en INFORMATICA, tendríamos que hacer
un JOIN de las 2 tablas “personas” y “departamentos”, que se relacionarían por la columna
“cpdepartamento”.
Es decir, que desde la tabla “personas” y mediante la columna “cpdepartamento”, podemos acceder a la
información de la tabla “departamentos”.
SQL INNERJOIN
La sentencia INNERJOIN es el sentencia JOIN por defecto, y consiste en combinar cada fila de una tabla
con cada fila de la otra tabla, seleccionado aquellas filas que cumplan una determinada condición.
WHERE
SELECT * FROM
INNERJOIN tabla2tabla1 = tabla2.columna1
tabla1.columna1
La sentencia LEFTJOIN combina 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 condición.
Aunque el departamento ‘4’ de PEDRO RUIZ no existe en la tabla de departamentos, devolverá la fila
con esa columna ‘departamento’ en blanco.
SQL RIGHT JOIN
La sentencia RIGHT JOIN combina 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 condición.
Aunque no exista ninguna persona del departamento ‘COMERCIAL’ (3), esta fila aparecerá con las otras
columnas en blanco.
SQL FULL JOIN
La sentencia FULL JOIN combina los valores de la primera tabla con los valores de la segunda tabla.
Siempre devolverá las filas de las dos tablas, aunque no cumplan la condición.
La sentencia SQL UNION es utilizada para acumular los resultados de dos sentencias SELECT.
Las dos sentencias SELECT tienen que tener el mismo número de columnas, con el mismo tipo de dato y
en el mismo orden.
Sintaxis SQLUNION
Ejemplo SQLUNION
Tabla “personas_empresa1”
Tabla “personas_empresa2”
La persona ‘ANTONIO GARCIA RODRIGUEZ’ aparecerá solo una vez en el resultado, porque no
aparecerán las filas repetidas.
SQLUNIONALL
La sentencia SQL UNIONALL es utilizada para acumular los resultados de dos sentencias SELECT,
incluso aparecerán las filas que estén repetidas en los resultados de ambas SELECT.
Las dos sentencias SELECT tienen que tener el mismo número de columnas, con el mismo tipo de dato y
en el mismo orden.
Sintaxis SQLUNION
Ejemplo SQLUNIONALL
Tabla “personas_empresa1”
Tabla “personas_empresa2”
La persona ‘ANTONIO GARCIA RODRIGUEZ’ aparecerá dos veces, porque está en los dos resultados
de las sentencias SELECT.
SQL SELECT INTO
La sentencia SQL SELECT INTO se utiliza para seleccionar datos de una tabla y copiarlos en otra tabla
diferente.
Se suele utilizar para hacer una copia de seguridad (backup) de los datos de una tabla.
La sentencia CREATE TABLE se utiliza para crear una tabla en una base de datos existente.
nombrecolumna3 tipodato3,
….
}
Ejemplo CREATETABLE
CREATETABLE personas
{
nombre varchar(255),
apellido1 varchar(255),
apellido2 varchar(255),
cpdepartamento int
}
Existen diferentes tipos de datos, algunos son iguales en todas las bases de datos (MySQL, ORACLE,
DB2, ..) y otros pueden ser particulares para ser usados únicamente en alguna de estas bases de datos.
SQL CONSTRAINTS (RESTRICCIONES)
Las CONSTRAINTS son restricciones que se utilizan para limitar el tipo de dato que puede recibir una
columna de una tabla.
Las restricciones se puede definir cuando creamos la tabla (CREATE TABLE) o posteriormente con la
sentencia ALTERTABLE.
La restricción NOT NULL sirve para especificar que una columna no acepta el valor NULL, es decir, que
esa columna siempre tiene que tener algún valor, no puede estar vacía.
CREATETABLE personas
{
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255)
}
Esta sentencia crea una tabla denominada ‘personas’, donde tenemos 3 columnas.
Las columnas ‘nombre’ y ‘apellido’ llevan NOT NULL, esto quiere decir que cualquier fila insertada en
esta tabla tiene que tener algún valor para las columnas ‘nombre’ y ‘apellido1’.
SQLUNIQUE
Existen varias formas diferentes de sintaxis según el sistema de base de datos utilizado:
Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS
CREATETABLE personas
{
identificador int NOT NULLUNIQUE,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
}
SQLUNIQUE ALTERTABLE
La restricción UNIQUE se puede añadir a una columna de una tabla, después de ser creada, mediante la
sentencia ALTERTABLE.
La clave primaria, PRIMARY KEY, identifica de manera única cada fila de una tabla.
La columna definida como clave primaria (PRIMARYKEY) debe ser UNIQUE (valor único) y NOT
NULL (no puede contener valores nulos).
Cada tabla sólo puede tener una clave primaria (PRIMARYKEY).
CREATETABLE personas
{
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
PRIMARY KEY (identificador)
}
CREATETABLE personas
{
identificador int NOT NULL PRIMARY KEY,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
}
La clave primaria (PRIMARY KEY) puede estar compuesta por varias columnas, por ejemplo por las
columnas ‘identificador’ y ‘nombre’, entonces se define así:
CREATETABLE personas
{
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
CONSTRAINT cppersonas PRIMARY KEY
(identificador, nombre)
}
La clave primaria también se puede definir después de haber creado la tabla, para eso utilizaremos el
comando ALTERTABLE
La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para señalar cual es la
clave primaria de otra tabla.
La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya existan en la
clave primaria PRIMARY KEY de la otra tabla.
Tabla personas, con una clave externa FOREIGN KEY‘cpdepartamento’, que hace referencia a la clave
primaria ‘cpdepartamento’ de la tabla anterior ‘departamentos’ y por tanto, solo puede tener un valor de
los que tiene en esa tabla
CREATETABLE departamentos
{
cpdepartamento int NOT NULL PRIMARY KEY,
departamento varchar(255),
}
CREATETABLE personas
{
cppersona int NOT NULL PRIMARY KEY,
nombre varchar(255),
apellido1 varchar(255),
cpdepartamento int FOREIGN KEY REFERENCES departamentos (cpdepartamento)
}
Si la clave externa o foránea (FOREIGN KEY) está compuesta por varias columnas o queremos ponerle
un nombre, utilizaremos la fórmula siguiente:
CONSTRAINT fkpersonas
FOREIGN KEY (cpdepartamento, id)
REFERENCES departamentos(cpdepartamento,id).
Para borrar un clave externa (FOREIGN KEY) utilizamos DROP, pero varía según la base de dato:
La restricción CHECK se utiliza para limitar el rango de valores que puede tener una columna.
Se pueden definir varias restricciones CHECK en una tabla.
CREATETABLE departamentos
{
cpdepartamento int NOT NULL,
departamento varchar(255),
CHECK (cpdepartamento>0)
}
La restricción DEFAULT se utiliza para establecer un valor por defecto a una columna.
Si no se especifica un valor al insertar una fila, entonces se podrá el valor por defecto (DEFAULT) que
tenga cada columna.
CREATETABLE pedidos
{
idpedido int,
producto int,
cantidad int,
fecha date DEFAULT GETDATE()
}
Si al crear un pedido, no especificamos el valor de la columna ‘fecha’, entonces para esa columna se
insertará por defecto obtenido de ejecutar la funcion GETDATE(), que devuelve la fecha del sistema
En lugar de una función, podemos insertar una valor concreto ‘20010101’ o cualquier otro valor.
ALTERTABLE pedidos
ALTER fecha DEFAULT ‘20120101’
ALTERTABLE pedidos
ALTER COLUMN fecha SET DEFAULT ‘20120101’
ALTERTABLE pedidos
ALTER fecha DROP DEFAULT
ALTERTABLE pedidos
ALTER COLUMN fecha DROP DEFAULT
SQL CREATE INDEX
Un índice sirve para buscar datos rápidamente, y no tener que recorrer toda la tabla secuencialmente en
busca alguna fila concreta.
Si una columna es índice de una tabla, al buscar por un valor de esa columna, iremos directamente a la
fila correspondiente. La búsqueda así es mucho más óptima en recursos y más rápida en tiempo.
Si esa columna de búsqueda no fuese índice, entonces tendríamos que recorrer de forma secuencial la
tabla en busca de algún dato. Por eso, es importante crear un índice por cada tipo de búsqueda que
queramos hacer en la tabla.
Actualizar una tabla con índices tarda más tiempo porque también hay que actualizar los índices, así que
solo se deben poner índices en las columnas por las que buscamos frecuentemente.
Se pueden crear índices ÚNICOS, es decir, índices que no admiten valores duplicados.
La columna que forma parte de este índice admite valores duplicados en su columna.
Si queremos crear un índice sobre varias columnas, por ejemplo, apellido1 y apellido2
La sentencia DROP se utiliza para borrar definitivamente un índice, tabla o base de datos.
DROP INDEX
DROP TABLE
DROPTABLE nombretabla
DROP DATABASE
Este comando SQL TRUNCATE se utiliza para eliminar o borrar los datos que contiene una tabla.
Es útil cuando sólo se quiere borrar los datos, pero no se quiere borrar la tabla.
La sentencia SQL ALTER se utiliza para añadir, eliminar o modificar columnas de una tabla.
Dada la siguiente tabla de ‘personas’, queremos añadir una nueva columna con la fechadenacimiento
AUTO INCREMENT permite generar un número único cuando insertamos un nuevo registro en la tabla.
Se utiliza para tener una clave primaria de una tabla mediante la generación automática de un número
secuencial único en la tabla.
CREATETABLE personas
{
idpersona int NOT NULL AUTO_INCREMENT,
nombre varchar(255),
apellido1 varchar(255),
apellido2 varchar(255)
}
El valor inicial de una valor auto incremental (AUTO_INCREMENT) es 1, y se le va sumando 1 cada
nuevo registro grabado en la tabla.
SQL CREATEVIEW
Una vista es una tabla virtual basada en el resultado de una consulta (SELECT) a una tabla.
CREATEVIEW nombrevista AS
SELECT nombrecolumna(s)
FROM nombretabla
WHERE condición
En la tabla personas
nombre apellido1 apellido2 edad
======== ======== ======= ===
ANTONIO PEREZ GOMEZ 30
LUIS LOPEZ PEREZ 45
ANTONIO GARCIA BENITO 50
SQL REPLACEVIEW
Existen diferentes formatos para almacenar las fechas y horas en los distintos sistemas de bases de datos.
Los tipos de datos de cada columna se definen cuando se crea la tabla.
Funciones para SQL Server sobre los tipos de datos de fecha y hora anteriores
GETDATE Muestra la fecha y hora actuales
DATEPART Muestra parte de una fecha y hora
DATEADD Muestra una fecha como suma o resta de un intervalo de tiempo sobre una fecha
DATEDIFF Muestra el tiempo entre 2 fechas
CONVERT Muestra la fecha y hora en diferentes formatos
CREATETABLE pedidos
(
idpedido int NOT NULL,
nombreproducto varchar(50) NOT NULL,
fechapedido NOT NULL
datetime
PRIMARYKEY (idpedido)
)
Si queremos almacenar solo la fecha (y no la hora) utilizaremos el tipo de datos ‘date’ en lugar de
‘datetime’.
SQL valores NULL
El valor NULL representa a un valor desconocido.
Este valor NULL puede ser asignado como valor a cualquier columna de una tabla.
Si el valor de una columna es opcional, quiere decir, que podemos insertar una fila en la tabla sin
asignarle ningún valor a esa columna opcional, así que esa columna tomará el valor NULL.
El valor NULL es un valor especial, y por tanto, no se puede comparar con los operadores aritméticos
normales (=, >, <, <>), y en su lugar debemos utilizar los operadores IS
y IS NOT.
En la tabla personas, tenemos la columna ‘apellido2’ que es opcional y puede tener valores nulos:
nombre apellido1 apellido2 edad
======== ======== ======= ===
ANTONIO PEREZ 30
LUIS LOPEZ PEREZ 45
ANTONIO GARCIA 50