SlideShare una empresa de Scribd logo
BASE DE DATOS MANUAL PRACTICO SQL SERVER
MANUAL PRACTICO SQL SERVER
MANUAL DE SQL
RECOPILADO Y ADAPTADO POR ING. CARLOS MANUEL FRANCISCO
El SQL es un lenguaje estándar de programación para el acceso a bases de datos.
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.
Este tutorial se divide en las siguientes partes:
 SQL Básico: Las instrucciones SQL básicas para la consulta de datos de cualquier base
de datos relacional.
 SQL Avanzado: Las instrucciones SQL avanzadas para un control completo sobre
cualquier base de datos relacional.
 Funciones SQL: SQL tiene múltiples funciones predefinidas para realizar ciertos cálculos
sobre los datos.
 Comandos SQL: Listado de todos los comandos SQL disponibles en este curso, para
una referencia rápida de los mismos.
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:
 Creación de una base de datos (CREATE DATABASE)
 Creación de una tabla (CREATE TABLE)
 Creación de una vista (CREATE VIEW)
 Creación de un índice de una tabla (CREATE INDEX)
 Creación de procedimientos almacenados (CREATE PROCEDURE)
 Creación de disparadores (CREATE TRIGGER)
 Consultar los datos almacenados en una tabla (SELECT)
 Insertar datos en una tabla (INSERT)
 Modificar datos ya existentes en una tabla (UPDATE)
 Borrar datos almacenados en una tabla (DELETE)
 Dar permiso de acceso a los datos de una tabla (GRANT)
 Eliminar permisos de acceso a datos de una tabla (REVOKE)
 Finalizar la transacción de una sentencia SQL (COMMIT)
 Retroceder la transacción de una sentencia SQL (ROLLBACK).
Estas son las instrucciones SQL básicas para el acceso a cualquier base de datos
relacional.
 SQL SELECT: SELECT se utiliza para consultar datos.
 SQL DISTINCT: DISTINCT sirve para eliminar los duplicados de las consultas de datos.
 SQL WHERE: WHERE se utiliza incluir las condiciones de los datos que queremos
consultar.
 AND OR: AND y OR se utilizan para incluir 2 o más condiciones a una consulta.
 SQL ORDER BY: ORDER BY se utiliza para ordenar los resultados de una consulta.
 SQL INSERT: INSERT se utiliza para insertar datos.
 SQL UPDATE: UPDATE se utiliza actualizar o modificar datos ya existentes.
 SQL DELETE: DELETE se utiliza borrar datos.
SQL > SQL Básico > Sintaxis
Un sistema de base de datos suele contener varias bases de datos.
Cada base de datos suele contener varias tablas.
Las tablas almacenan los datos organizados por filas.
Cada fila contiene varios campos.
Cada campo tiene una serie de propiedades, como por ejemplo, el nombre del campo, su
longitud, tipo de dato que se va a almacenar, etc.
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.
ESTA ES UNA FORMA BASICA DE CREAR TABLA POR MEDIO DE SENTENCIA
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
EJEMPLO PRACTICO CON DATOS DE CREACION DE TABLAS (PROBADO)
USE ESCUELA
CREATE TABLE TBESTUDIANTES
(
IDESTUDIANTE INT,
EST_NOMBRE1 VARCHAR (30),
EST_NOMBRE2 VARCHAR (30),
EST_APELLIDO1 VARCHAR (30),
EST_APELLIDO2 VARCHAR (30),
EST_FECHANACIMIENTO SMALLDATETIME,
EST_LUGARNACIMIENTO VARCHAR (30),
EST_CIUDAD VARCHAR (30),
EST_SECTOR VARCHAR (30),
EST_VARRIO VARCHAR (30),
EST_CALLE VARCHAR (30),
EST_CASA INT,
EST_TELEFONOCASA VARCHAR (13),
EST_CEL VARCHAR (13),
EST_EMAIL VARCHAR (40),
EST_NOMBREPADRE VARCHAR (30),
EST_CEDPADRE VARCHAR (30),
EST_PADREFECHANACIMIENTO SMALLDATETIME,
EST_PADRECIUDAD VARCHAR (30),
EST_PADRESECTOR VARCHAR (30),
EST_PADREVARRIO VARCHAR (30),
EST_PADRECALLE VARCHAR (30),
EST_PADRECASA INT,
EST_PADRETELEFONOCASA VARCHAR (13),
EST_PADRECEL VARCHAR (13),
EST_PADREEMAIL VARCHAR (40),
EST_NOMBREMADRE VARCHAR (30),
EST_CEDMADRE VARCHAR (30),
EST_MADREFECHANACIMIENTO SMALLDATETIME,
EST_MADRECIUDAD VARCHAR (30),
EST_MADRESECTOR VARCHAR (30),
EST_MADREVARRIO VARCHAR (30),
EST_MADRECALLE VARCHAR (30),
EST_MADRECASA INT,
EST_MADRETELEFONOCASA VARCHAR (13),
EST_MADRECEL VARCHAR (13),
EST_MADREEMAIL VARCHAR (40),
EST_GRADOACTIVO INT,
EST_SECCIONACTIVA INT,
EST_MATERIAS INT,
EST_CALIFICACIONES INT
)
CREATE DATATABASE mibasedeatos;
Las sentencias SQL se pueden agrupar por funcionalidades:
1.- Lenguaje de definición de datos (DDL).
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).
2.- Lenguaje de manipulación de datos (DML).
DML está compuesto por sentencias que sirven para :
consultar (SELECT)
insertar (INSERT)
modificar (UPDATE)
borrar (DELETE)
3.- Lenguaje de control de datos (DCL).
DCL está compuesto por sentencias SQL para controlar las funciones de administración:
Confirmar la operacion (COMMIT)
Retroceder la operacion (ROLLBACK)
Dar permisos (GRANT)
Quitar permisos (REVOKE)
SQL > SQL Básico > 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.
Sintaxis SQL SELECTc
SELECT * FROM nombretabla
SELECT columna1, columna2 FROM nombretabla
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
Si queremos consulta todos los nombres y primer apellido de todas las personas
SELECT nombre, apellido1 FROM personas
Este será el resultado:
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
SQL > SQL Básico > 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.
SELECT DISTINCT nombre FROM personas
nombre
ANTONIO
LUIS
SQL > SQL Básico > 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.
El valor de la condición debe ir entre comillas simples ''.
Por ejemplo:
Seleccionar las personas cuyo nombre sea ANTONIO
SELECT * FROM personas
WHERE nombre = 'ANTONIO'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
SQL > SQL Básico > AND OR
Los operadores AND y OR se utilizan para filtrar resultados con 2 condiciones.
El operador AND mostrará los resultados cuando se cumplan las 2 condiciones.
Condición1 AND condición2
El operador OR mostrará los resultados cuando se cumpla alguna de las 2 condiciones.
Condicion1 OR condicion2
En la tabla personas
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ
La siguiente sentencia (ejemplo AND) dará el siguiente resultado:
SELECT * FROM personas
WHERE nombre = 'ANTONIO'
AND apellido1 = 'GARCIA'
nombre apellido1 apellido2
ANTONIO GARCIA BENITO
La siguiente sentencia (ejemplo OR) dará el siguiente resultado:
SELECT * FROM personas
WHERE nombre = 'ANTONIO'
OR apellido1 = 'GARCIA'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
También se pueden combinar AND y OR, como el siguiente ejemplo:
SELECT * FROM personas
WHERE nombre = 'ANTONIO'
AND (apellido1 = 'GARCIA' OR apellido1 = 'LOPEZ)
nombre apellido1 apellido2
ANTONIO GARCIA BENITO
SQL > SQL Básico > ORDER BY
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)
FROM nombre_tabla
ORDER BY nombre_columna(s) ASC|DESC
Por ejemplo, en la tabla personas :
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO
SELECT nombre, apellido1
FROM personas
ORDER BY apellido1 ASC
Esta es la consulta resultante:
nombre apellido1
LUIS LOPEZ
ANTONIO GARCIA
ANTONIO PEREZ
Ejemplo de ordenación descendiente (DES)
SELECT nombre, apellido1
FROM personas
ORDER BY apellido1 DESC
Esta es la consulta resultante:
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
SQL > SQL Básico > INSERT
La 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_tabla
VALUES (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 personas
VALUES ('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
SQL > SQL Básico > UPDATE
La sentencia UPDATE se utiliza para modificar valores en una tabla.
La sintaxis de SQL UPDATE es:
UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3
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.
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 personas
SET 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 RODRIGUEZ
PEDRO RUIZ GONZALEZ
SQL > SQL Básico > DELETE
La sentencia DELETE sirve para borrar filas de una tabla.
La sintaxis de SQL DELETE es:
DELETE FROM nombre_tabla
WHERE 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 RODRIGUEZ
PEDRO RUIZ GONZALEZ
Si queremos borrar a la persona LUIS LOPEZ PEREZ, podemos ejecutar el comando:
DELETE FROM personas
WHERE nombre = 'LUIS'
AND apellido1 = 'LOPEZ'
AND apellido2 = 'PEREZ'
La tabla 'personas' resultante será:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
SQL > SQL Avanzado > 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.
Cláusula SQL TOP para SQL SERVER
SELECT TOP número
PERCENT nombre_columna
FROM nombre_tabla
Cláusula SQL TOP para MySQL
SELECT columna(s) FROM tabla
LIMIT númerofilas
Cláusula SQL TOP para ORACLE
SELECT columna(s) FROM tabla
WHERE ROWNUM <= númerofilas
Ejemplo SQL TOP para MySQL:
Dada la siguiente tabla 'personas', quiero obtener los 2 primeros valores.
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
SELECT * FROM personas LIMIT 2
Obtendríamos el siguiente resultado:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
SQL > SQL Avanzado > LITE
El operador LIKE se utiliza en la cláusula WHERE para buscar por un patrón.
Sintaxis de SQL LIKE
SELECT columna(s) FROM tabla WHERE columna LIKE '%patron%'
Ejemplos del uso de SQL LIKE
Dada la siguiente tabla 'personas'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
Si quiero seleccionar los nombres que empiezan por 'AN' en la tabla 'personas', ejecutaría el
comando siguiente:
SELECT * FROM personas
WHERE nombre LIKE 'AN%'
El carácter '%' es un comodín, que sirve para uno o más caracteres.
Este es el resultado
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
Otro ejemplo de SQL LIKE
Para seleccionar las personas que tienen un 'Z' en su apellido1, ejecutaríamos:
SELECT * FROM personas
WHERE apellido1 LIKE '%Z%'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
SQL > SQL Avanzado > WILDCARDS
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 :
% sustituye a cero o más caracteres
_ sustituye a 1 carácter cualquiera
[lista] sustituye a cualquier carácter de la lista
[^lista] o [!
lista]
sustituye a cualquier carácter excepto los caracteres de la
lista
Ejemplos:
Dada la siguiente tabla 'personas'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
Ejemplos Wildcards
Seleccionar las personas cuyo nombre contenga una 'R'
SELECT * FROM personas
WHERE nombre LIKE '%R%'
Resultado:
nombre apellido1 apellido2
PEDRO RUIZ GONZALEZ
Seleccionar las personas cuyo apellido1 empiece por 'GA'
SELECT * FROM personas
WHERE apellido1 LIKE 'PE_EZ'
Resultado:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
Seleccionar las personas cuyo apellido1 empiece por P o G
SELECT * FROM personas
WHERE apellido1 LIKE '[PG]%'
Resultado:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
SQL > SQL Avanzado > IN
El operador IN permite seleccionar múltiples valores en una cláusula WHERE
Sintaxis SQL IN
SELECT columna
FROM tabla
WHERE columna
IN (valor1, valor2, valor3, .)
Ejemplo SQL IN
Dada la siguiente tabla 'personas'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
Queremos seleccionar a las personas cuyo apellido1 sea 'PEREZ' o 'RUIZ'
SELECT * FROM personas
WHERE apellido1
IN ('PEREZ','RUIZ')
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
SQL > SQL Avanzado > BETWEEN
El operador BETWEEN se utiliza en la cláusula WHERE para seleccionar valores entre un
rango de datos.
Sintaxis de SQL BETWEEN
SELECT columna
FROM tabla WHERE columna
BETWEEN valor1 AND valor2
Ejemplo de SQL BETWEEN
Dada la siguiente tabla 'personas'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
Seleccionar personas cuyo apellido1 esté entre 'FERNANDEZ y 'HUERTAS'
SELECT *
FROM personas
WHERE apellido1
BETWEEN 'FERNANDEZ' AND 'HUERTAS'
nombre apellido1 apellido2
ANTONIO GARCIA RODRIGUEZ
Seleccionar personas cuyo apellido1 no esté entre 'FERNANDEZ y 'HUERTAS'
SELECT *
FROM personas
WHERE apellido1
NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
SQL > SQL Avanzado > ALIAS
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 largas o complicadas.
Sintaxis SQL ALIAS para una tabla:
SELECT columna
FROM nombretabla
AS aliastabla
Sintaxis SQL ALIAS para una columna
SELECT nombrecolumna
AS aliascolumna
FROM tabla
Ejemplos SQL ALIAS
Dada la siguiente tabla 'personas'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
Utilizamos el alias 'p' para la tabla 'personas', para simplificar la sentencia SELECT
SELECT p.apellido1, p.apellido2
FROM personas
AS p
WHERE p.nombre = 'ANTONIO'
apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ
Sin utilizar el alias, la sentencia SELECT quedaría un poco más larga:
SELECT personas.apellido1, personas.apellido2
FROM personas
WHERE personas.nombre = 'ANTONIO'
apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ
SQL > SQL Avanzado > JOINS
La sentencia SQL JOIN permite consultar datos de 2 o más tablas.
Dichas tablas estarán relacionadas entre ellas de alguna forma, a través de alguna de sus
columnas.
Existen 3 tipos de JOINS: JOIN interno, JOIN externo y JOIN cruzado.
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
Tabla personas, con la clave primaria "per "
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
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 "dep".
Es decir, que desde la tabla "personas" y mediante la columna "dep", podemos acceder a la
información de la tabla "departamentos".
SQL > SQL Avanzado > INNER JOIN
La sentencia INNER JOIN 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.
SELECT * FROM tabla1 INNER JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1
Ejemplo SQL INNER JOIN
Tabla personas, con la clave primaria "per "
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos
WHERE personas.dep = departamentos.dep
nombre apellido1 departamento
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ INFORMATICA
SQL > SQL Avanzado > LEFT JOIN
La sentencia LEFT JOIN 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.
SELECT * FROM tabla1
LEFT JOIN tabla2
WHERE tabla1.columna1 = tabla2.columna1
Ejemplo de SQL LEFT JOIN
Tabla personas, con la clave primaria "per "
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
SELECT nombre, apellido1, departamento
FROM personas
LEFT JOIN departamentos
WHERE personas.dep = departamentos.dep
nombre apellido1 departamento
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ
Aunque el departamento '4' de PEDRO RUIZ no existe en la tabla de departamentos,
devolverá la fila con esa columna 'departamento' en blanco.
SQL > SQL Avanzado > 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.
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
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
SELECT nombre, apellido1, departamento
FROM personas
RIGHT JOIN departamentos
WHERE personas.dep = departamentos.dep
nombre apellido1 departamento
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
COMERCIAL
Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila aparecerá
con las otras columnas en blanco
SQL > SQL Avanzado > 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 FULL JOIN es la unión de LEFT JOIN y RIGHT JOIN
SELECT * FROM tabla1 FULL JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1
EJEMPLO SQL FULL JOIN
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
SELECT nombre, apellido1, departamento
FROM personas
FULL JOIN departamentos
WHERE personas.dep = departamentos.dep
nombre apellido1 departamento
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ COMERCIAL
SQL > SQL Avanzado > UNION
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 SQL UNION
SELECT columna1, columna2 FROM tabla1
UNION
SELECT columna1, columna2 FROM tabla2
Ejemplo SQL UNION
Tabla "personas_empresa1"
per nombre apellido1 apellido2
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
Tabla "personas_empresa2"
per nombre apellido1 apellido2
1 JUAN APARICIO TENS
2 ANTONIO GARCIA RODRIGUEZ
3 LUIS LOPEZ VAZQUEZ
SELECT nombre, apellido1 FROM personas_empresa1
UNION
SELECT nombre, apellido1 FROM personas_empresa2
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
PEDRO RUIZ
JUAN APARICIO
LUIS LOPEZ
La persona 'ANTONIO GARCIA RODRIGUEZ' aparecerá solo una vez en el resultado,
porque no aparecerán las filas repetidas.
SQL > SQL Avanzado > UNION ALL
La sentencia SQL UNION ALL 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 SQL UNION
SELECT columna1, columna2 FROM tabla1
UNION ALL
SELECT columna1, columna2 FROM tabla2
Ejemplo SQL UNION ALL
Tabla "personas_empresa1"
per nombre apellido1 apellido2
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
Tabla "personas_empresa2"
per nombre apellido1 apellido2
1 JUAN APARICIO TENS
2 ANTONIO GARCIA RODRIGUEZ
3 LUIS LOPEZ VAZQUEZ
SELECT nombre, apellido1 FROM personas_empresa1
UNION ALL
SELECT nombre, apellido1 FROM personas_empresa2
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
PEDRO RUIZ
JUAN APARICIO
ANTONIO GARCIA
LUIS LOPEZ
La persona 'ANTONIO GARCIA RODRIGUEZ' aparecerá dos veces, porque está en los dos
resultados de las sentencias SELECT.
SQL > SQL Avanzado > 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.
Sintaxis SQL SELECT INTO
SELECT * INTO nuevatabla FROM tablaactual
Esta sentencia copiará todos los registros de la tabla 'tablaactual' en la tabla 'nuevatabla'.
La nueva tabla puede incluso estar en una base de datos diferente
SELECT *
INTO nuevatabla [IN nuevabasedatos]
FROM tablaactual
Si queremos hacer un backup de una tabla en otra
SELECT *
INTO personasBackup
FROM personas
También se pueden seleccionar sólo algunas columnas
SELECT columna1, columna2
INTO personasBackup
FROM personas
También se puede incluir una condición (WHERE)
SELECT *
INTO personasBackup
FROM personas
WHERE nombre = 'ANTONIO'
Se puede utilizar SELECT INTO con JOIN
SELECT personas.nombre, personas.apellido1, departamentos.departamento
INTO personasInformatica
FROM personas INNER JOIN departamentos
ON personas.dep = 'INFORMATICA'
SQL > SQL Avanzado > CREATE DATABASE
La sentencia CREATE DATABASE se utiliza para crear bases de datos.
Sintaxis CREATE DATABASE:
CREATE DATABASE nombreBaseDatos
Ejemplo CREATE DATABASE
CREATE DATABASE mibasededatos
SQL > SQL Avanzado > CREATE TABLE
La sentencia CREATE TABLE se 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),
dep int
}
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
alfanuméricos hasta una longitud máxima de 255 caracteres.
La columna 'dep' es de tipo 'int', es decir, acepta sólo números.
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 > SQL Avanzado > 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 ALTER TABLE.
Las posibles restricciones son:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
SQL > SQL Avanzado > NOT NULL
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.
Ejemplo SQL NULL
CREATE TABLE 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'.
SQL > SQL Avanzado > UNIQUE
La restricción UNIQUE identifica de manera única a cada fila de una tabla.
Puede haber varias restricciones UNIQUE en diferentes columnas de una tabla.
Existen varias formas diferentes de sintaxis según el sistema de base de datos utilizado:
Ejemplo SQL UNIQUE para la base de datos MySQL
CREATE TABLE personas
{
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
UNIQUE (identificador)
}
La sentencia anterior crea la tabla 'personas' con 4 columnas, donde la columna 'identifcador'
tiene un valor diferente para cada fila de la tabla.
Si intentamos insertar un fila con un identificador que ya exista, nos dará un error, y no nos
dejará insertarlo.
Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS
CREATE TABLE personas
{
identificador int NOT NULL UNIQUE,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
}
SQL > SQL Avanzado > UNIQUE ALTER TABLE
La restricción UNIQUE se puede añadir a una columna de una tabla, después de ser creada,
mediante la sentencia ALTER TABLE.
Sintaxis de UNIQUE ALTER TABLE
ALTER TABLE personas
ADD UNIQUE (identificador)
Crea una restricción UNIQUE (valor único en toda la tabla) para la columna 'identificador'.
Se puede crear también restricciones para varias columnas a la vez
ALTER TABLE peronas
ADD CONSTRAINT copersonas
UNIQUE (identificador, apellido1)
Para eliminar una restricción en la base de datos MySQL
ALTER TABLE personas
DROP INDEX copersonas
Para eliminar una restricción en ORACLE, SQLSERVER y ACCESS
ALTER TABLE personas
DROP CONSTRAINT copersonas
SQL > SQL Avanzado > PRIMARY KEY
La clave primaria, PRIMARY KEY, identifica de manera única cada fila de una tabla.
La columna definida como clave primaria (PRIMARY KEY) debe ser UNIQUE (valor único) y
NOT NULL (no puede contener valores nulos).
Cada tabla sólo puede tener una clave primaria (PRIMARY KEY).
Ejemplo PRIMARY KEY , clave primaria en MySQL
CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL, PRIMARY KEY (identificador) }
Ejemplo PRIMARY KEY , clave primaria en ORACLE, SQLSERVER, ACCESS
CREATE TABLE 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í:
CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL, CONSTRAINT pers PRIMARY KEY (identificador,
nombre) }
La clave primaria también se puede definir después de haber creado la tabla, para eso
utilizaremos el comando ALTER TABLE
Ejemplo PRIMARY KEY con ALTER TABLE ALTER TABLE personas ADD PRIMARY KEY
(identificador)
Ejemplo PRIMARY KEY multiple ALTER TABLE ALTER TABLE personas CONSTRAINT
pers PRIMARY KEY (identificador, nombre)
SQL > SQL Avanzado > FOREIGN KEY
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.
Ejemplo de FOREIGN KEY
Tabla "departamentos", con la clave primaria "dep"
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave
primaria 'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de
los que tiene en esa tabla
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4
Definiciones de FOREIGN KEY en CREATE TABLE para MySQL
CREATE TABLE departamentos { dep int NOT NULL,
departamento varchar(255),
PRIMARY KEY (dep)
}
CREATE TABLE personas
{
per int NOT NULL,
nombre varchar(255),
apellido1 varchar(255),
dep int NOT NULL,
PRIMARY KEY (per),
FOREIGN KEY (dep) REFERENCES departamentos(dep)
}
Definiciones de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER
CREATE TABLE departamentos
{
dep int NOT NULL PRIMARY KEY,
departamento varchar(255),
}
CREATE TABLE personas
{
per int NOT NULL PRIMARY KEY,
nombre varchar(255),
apellido1 varchar(255),
dep int FOREIGN KEY REFERENCES departamentos (dep)
}
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 (dep, id) REFERENCES departamentos(dep,id).
Ejemplo FOREIGN KEY con ALTER TABLE
ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep)
Ejemplo FOREIGN KEY múltiple (varias columnas) con ALTER TABLE:
ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES
departamentos(dep)
Para borrar un clave externa (FOREIGN KEY) utilizamos DROP, pero varía según la base de
dato:
Borrar FOREIGN KEY en MySQL ALTER TABLE personas DROP FOREIGN KEY dep
Borrar FOREIGN KEY en ORACLE, SQLSERVER y ACCESS
ALTER TABLE personas DROP CONSTRAINT dep
SQL > SQL Avanzado > CHECK
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.
Ejemplo CHECK en MySQL
CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255), CHECK
(dep>0) }
Ejemplo CHECK en ORACLE, SQLSERVER y ACCESS:
CREATE TABLE departamentos { dep int NOT NULL CHECK (dep>0) departamento
varchar(255), }
Ejemplo CHECK en ALTER TABLE en MySQL
ALTER TABLE departamentos ADD CHECK (dep>0)
Ejemplo CHECK (con múltiples columnas) en ALTER TABLE en MySQL
ALTER TABLE personas ADD CHECK (per>0, edad>35)
Ejemplo CHECK en ALTER TABLE en ORACLE, SQLSERVER y ACCESS
ALTER TABLE departamentos ADD CONSTRAINT ckdepart CHECK (dep>0)
Ejemplo CHECK en ALTER TABLE con varias columnas
ALTER TABLE personas ADD CONSTRAINT ckpersona CHECK (pers>0, nombre='antonio')
SQL > SQL Avanzado > DEFAULT
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.
SQL DEFAULT en la sentencia CREATE TABLE
CREATE TABLE 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 '2001-01-01' o cualquier otro
valor.
SQL DEFAULT en la sentencia ALTER TABLE para MySQL
ALTER TABLE pedidos ALTER fecha DEFAULT '2012-01-01'
SQL DEFAULT en la sentencia ALTER TABLE para ORACLE, SQLSERVER, ACCESS:
ALTER TABLE pedidos ALTER COLUMN fecha SET DEFAULT '2012-01-01'
Para borrar DEFAULT en MySQL
ALTER TABLE pedidos ALTER fecha DROP DEFAULT
Para borrar DEFAULT en ORACLE, SQLSERVER, ACCESS:
ALTER TABLE pedidos ALTER COLUMN fecha DROP DEFAULT
SQL > SQL Avanzado > CREATE INDEX
CREATE INDEX se utiliza para crear índices en una tabla.
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.
Sintaxis para SQL CREATE INDEX
CREATE INDEX nombreindice
ON nombretabla (nombrecolumna)
La columna que forma parte de este índice admite valores duplicados en su columna.
Sintaxis para SQL CREATE UNIQUE INDEX
CREATE UNIQUE INDEX nombreindice
ON nombretabla (nombrecolumna)
La columna que forma parte de este índice NO admite valores duplicados en su columna,
porque es una clave única.
Ejemplos para SQL CREATE INDEX
Creamos la índice 'indicepersonas' sobre la columna 'persona' de la tabla 'personas'
CREATE INDEX indicepersonas
ON personas (persona)
Si queremos crear un índice sobre varias columnas, por ejemplo, apellido1 y apellido2
CREATE INDEX indice2personas
ON personas(apellido1, apellido2)
SQL > SQL Avanzado > DROP
La sentencia DROP se utiliza para borrar definitivamente un índice, tabla o base de datos.
DROP INDEX
Sintaxis DROP INDEX para MySQL
ALTER TABLE nombretabla
DROP INDEX nombreindice
Sintaxis DROP INDEX para DB2 y ORACLE
DROP INDEX nombreindice
Sintaxis DROP INDEX para ACCESS
DROP INDEX nombreindice
ON nombretabla
Sintaxis DROP INDEX para SQLSERVER
DROP INDEX nombretabla.nombreindice
DROP TABLE
Se utiliza DROP TABLE para borrar definitivamente una tabla
DROP TABLE nombretabla
DROP DATABASE
Se utiliza para borrar una base de datos definitivamente.
DROP DATABASE nombrebasededatos
SQL > SQL Avanzado > TRUNCATE
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.
Este comando deja vacía una tabla, es decir, sin datos.
TRUNCATE TABLE nombretabla
SQL > SQL Avanzado > ALTER
La sentencia SQL ALTER se utiliza para añadir, eliminar o modificar columnas de una tabla.
Sintaxis SQL ALTER
Para añadir una nueva columna a una tabla
ALTER TABLE nombretabla
ADD nombrecolumna tipodatocolumna
Para borrar una columna de una tabla
ALTER TABLE nombretabla
DROP COLUMN nombrecolumna
Para modificar el tipo de dato de una columna de una tabla
ALTER TABLE nombretabla
ALTER COLUMN nombrecolumna tipodatocolumna
Ejemplos de SQL ALTER
per nombre apellido1 apellido2
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
Dada la siguiente tabla de 'personas', queremos añadir una nueva columna, denominada
'fechadenacimiento'
ALTER TABLE personas
ADD fechadenacimiento date
per nombre apellido1 apellido2 fechadenacimiento
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
Si queremos modificar el tipo de dato de la columna 'fecha', y ponerle tipo 'year' en lugar de
tipo 'date'
ALTER TABLE personas
ALTER COLUMN fechadenacimiento year
Si queremos borrar la columna 'fechadenacimiento', y dejarlo igual que al principio
ALTER TABLE personas
DROP COLUMN fechadenacimiento
per nombre apellido1 apellido2
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
SQL > SQL Avanzado > AUTO INCREMENT
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.
Sintaxis SQL AUTO INCREMENT
CREATE TABLE personas { persona 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.
Si queremos que el valor inicial sea 100 en lugar de 1
ALTER TABLE personas AUTO_INCREMENT=100
Para SQL SERVER se utiliza IDENTITY en lugar de AUTO_INCREMENT
Para ACCESS se utiliza AUTOINCREMENT en lugar de AUTO_INCREMENT
Para ORACLE se define de forma diferente
CREATE SEQUENCE persona MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10
SQL > SQL Avanzado > VIEWS
Una vista es una tabla virtual.
SQL CREATE VIEW
Una vista es una tabla virtual basada en el resultado de una consulta (SELECT) a una tabla.
CREATE VIEW nombrevista AS
SELECT nombrecolumna(s)
FROM nombretabla
WHERE condición
Las vista muestran siempre datos reales de una o varias tablas.
Cada vez que un usuario pregunta o consulta una vista, el sistema de base de datos,
actualiza los datos de la vista, para mostrar siempre datos reales.
Ejemplo SQL CREATE VIEW
En la tabla personas
>
nombre apellido1 apellido2 edad
ANTONIO PEREZ GOMEZ 30
ANTONIO GARCIA RODRIGUEZ 45
PEDRO RUIZ GONZALEZ 50
Creamos una vista con las personas que se llaman ANTONIO
CREATE VIEW [personas que se llaman ANTONIO] AS
SELECT nombre, apellido1, apellido2,edad
FROM personas
WHERE nombre = 'ANTONIO'
Para consultar los datos de una vista
SELECT * FROM [personas que se llama ANTONIO]
En la vista [personas que se llama ANTONIO] tenemos los datos siguientes:
>
nombre apellido1 apellido2 edad
ANTONIO PEREZ GOMEZ 30
ANTONIO GARCIA RODRIGUEZ 45
SQL REPLACE VIEW
Para reemplazar o modificar los datos de una vista:
REPLACE VIEW [personas que se llama ANTONIO] AS
SELECT nombre, apellido1, apellido2, edad
FROM personas
WHERE edad > 20
SQL DROP VIEW
Para borrar una vista
DROP VIEW nombrevista
Ejemplo borrado de la vista antes creada:
DROP VIEW [personas que se llama ANTONIO]
SQL > SQL Avanzado > DATES
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.
Tipos de Datos para las fechas y horas en la base de datos MySQL
Tipo Formato Ejemplo
DATE YYYY-MM-DD 2008-11-11
DATETIME YYYY-MM-DD HH:MM:SS 2008-11-11 13:23:44
TIMESTAMP YYYY-MM-DD HH:MM:SS
YEAR YYYY o YY
Funciones para MySQL sobre estos tipos de datos de fecha anteriores
NOW Muestra la fecha y hora actuales. Por ejemplo: 2008-11-11 12:45:34
CURDATE Muestra la fecha actual. Por ejemplo: 2008-11-11
CURTIME Muestra la hora actual. Por ejemplo: 12:45:34
DATE Muestra la parte fecha de una expresión fecha/hora
EXTRACT Muestra una parte de una expresión fecha/hora
DATE_ADD Muestra una fecha como suma de un intervalo de tiempo a una fecha
DATE_SUB Muestra una fecha como resta de un intervalo de tiempo a una fecha
DATEDIFF Muestra el número de días entre 2 fechas
DATE_FORMAT Muestra una fecha y hora con diferentes formatos
Tipos de Datos para fechas y horas en la base de datos SQL Server
DATE Formato YYYY-MM-DD
DATETIME Formato YYYY-MM-DD HH:MM:SS
SMALLDATETIME Formato YYYY-MM-DD HH:MM:SS
TIMESTAMP Se genera un valor basado en la hora del sistema. Se actualiza
automáticamente.
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
Ejemplos del uso de fecha y hora
CREATE TABLE pedidos
(
idpedido int NOT NULL,
nombreproducto varchar(50) NOT NULL,
fechapedido datetime NOT NULL
PRIMARY KEY (idpedido)
)
idpedido nombreproducto fechapedido
1 papel oficina 2012-02-23 14:05:00
Si queremos almacenar solo la fecha (y no la hora) utilizaremos el tipo de datos 'date' en
lugar de 'datetime'.
SQL > SQL Avanzado > 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
Ejemplo de uso de IS NULL
SELECT * FROM personas WHERE apellido2 IS NULL
>
nombre apellido1 apellido2 edad
ANTONIO PEREZ 30
ANTONIO GARCIA 50
Ejemplo de uso de IS NOT NULL
SELECT * FROM personas WHERE apellido2 IS NOT NULL
>
nombre apellido1 apellido2 edad
LUIS LOPEZ PEREZ 45
SQL > SQL Avanzado > FUNCIONES NULL
Si queremos cambiar un valor NULL por otro valor cualquiera, utilizaremos las siguientes
funciones (ISNULL, IFNULL, NVL, COLACESCE) según el sistema de base de datos.
Para nuestros ejemplos, queremos que si el valor es NULL se cambie por el valor 0
Ejemplo para SQL SERVER se utiliza ISNULL:
SELECT producto,
preciounidad * (unidadesstock + ISNULL(unidadespedido, 0)
FROM productos
Ejemplo para ORACLE se utiliza NVL:
SELECT producto,
preciounidad * (unidadesstock + NVL(unidadespedido, 0)
FROM productos
Ejemplo para MySQL, hay 2 funciones equivalentes (IFNULL, COALESCE):
SELECT producto,
preciounidad * (unidadesstock + IFNULL(unidadespedido, 0)
FROM productos
SELECT producto,
preciounidad * (unidadesstock + COALESCE(unidadespedido, 0)
FROM productos
SQL > SQL Avanzado > DATOS TEXTO para MySQL
Tipos de datos y rango de datos para el sistema de gestión de bases de datosMySQL
Tipos de datos de TEXTO en MySQL
CHAR
El tipo de dato CHAR sirve para almacenar una cadena de datos de longitud fija.
Puede contener caracteres, números y caracteres especiales.
La longitud fija se define entre paréntesis, y siempre reservará espacio para esta longitud
aunque no se utilice.
Por ejemplo, CHAR(50), será un campo de longitud fija de 50 posiciones.
La longitud máxima que podemos definir un campo CHAR es de 255.
VARCHAR
El tipo de datos VARCHAR sirve para almacenar una cadena de datos (caracteres, números
y caracteres especiales) de longitud variable.
La longitud máxima es de 255 caracteres.
Hace un buen uso del espacio en disco, porque no reserva el espacio de la longitud máxima
definida, si no que solo ocupa espacio el tamaño real de los datos almacenados en ese
campo.
Es el tipo de dato más utilizado para campos pequeños.
TINYTEXT
El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo caracteres, no
admite número ni caracteres especiales) de una longitud máxima de 255 caracteres.
TEXT
El tipo de dato TEXT sirve para almacenar una cadena de caracteres de longitud máxima de
65,535 caracteres.
BLOB
El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object).
Admite una longitud máxima de 65,535 bytes de datos.
MEDIUMTEXT
El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud máxima de
16.777.215 caracteres.
MEDIUMBLOB
El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud máxima
16.777.215 bytes.
LONGTEXT
El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud máxima de
4.294.967.295 caracteres.
LONGBLOB
El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud máxima de de
4.294.967.295 bytes.
ENUM
El tipo de dato ENUM sirve para introducir una lista de posibles valores.
La longitud máxima es de 65.535 posibles valores.
Si se intenta introducir un valor en este campo, que no esté incluido en la lista, no se
insertará nada y tendrá un valor vacío ('').
Por ejemplo si definimos una columna como ENUM('uno', 'dos'), entonces en esta columna
solo puede almacenar los valores 'uno' o 'dos'.
Si queremos insertar cualquier otro valor (por ejemplo 'tres'), no se grabará 'tres' y en su
lugar quedará el campo vacío, sin valor ('').
SET
El tipo de dato SET es similar a ENUM pero la longitud máxima de valores posibles es de 64,
y los valores posibles se pueden combinar.
Por ejemplo, si definimos una columna como SET ('uno', 'dos) entonces esa columna podrá
tomar los siguientes valores 'uno' o 'dos' o 'uno,dos', 'dos,uno'.
SQL > SQL Avanzado > DATOS NUMÉRICOS para MySQL
Tipos de datos numéricos para el sistema de gestión de bases de datosMySQL
MySQL admite los siguientes tipos de datos numéricos para sus columnas
TINYINT
El tipo de dato numérico TINYINT permite números desde -128 hasta 127.
También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 255.
Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis (tamaño).
SMALLINT
El tipo de dato numérico SMALLINT permite números desde -32768 hasta 32767.
También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 65535.
Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis
MEDIUMINT
El tipo de dato numérico MEDIUMINT permite números desde -8388608 hasta 8388607.
También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 16777215.
Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis
INT
El tipo de dato numérico INT permite números desde -2147483648 hasta 2147483647.
También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 4294967295.
Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis
BIGINT
El tipo de dato numérico BIGINT permite números desde -9223372036854775808 hasta
9223372036854775807.
También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 18446744073709551615.
Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis
FLOAT
El tipo de dato numérico FLOAT permite almacenar pequeños números decimales (de punto
flotante).
Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número
máximo de dígitos (tamaño) y el número de decimales (decimal).
FLOAT(6,2) tendrá 4 dígitos enteros y 2 decimales, por ejemplo, 5467.67
DOUBLE
El tipo de dato numérico DOUBLE permite almacenar grandes números decimales (de punto
flotante).
Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número
máximo de dígitos (tamaño) y el número de decimales (decimal).
DOUBLE(5,1) tendrá 4 dígitos enteros y 1 dígito decimal, por ejemplo, 5467.1
DECIMAL
El tipo de dato numéric DECIMAL permite almacenar grandes números decimales de punto
fijo, por tanto, los cálculos con este tipo DECIMAL son exactos.
Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales
(decimal). El número máximo de dígitos es de 65.
Por ejemplo DECIMAL(20,6) quiere decir que tendrá 14 dígitos enteros y 4 dígitos decimales.
SQL > SQL Avanzado > DATOS FECHA para MySQL
En MySQL pueden existir los siguientes tipos de datos para fechas
DATE
El tipo de dato DATE sirve para almacenar una fecha con el formato YYYY-MM-DD (4 dígitos
para el año, guión, 2 dígitos para el mes, guión, 2 dígitos para el día).
DATETIME
El tipo de dato DATETIME sirve para almacenar fecha y hora, con el formato YYYY-MM-DD
HH:MM:SS
TIMESTAMP
El tipo de dato TIMESTAMP es equivalente al tipo anterior, DATETIME, YYYY-MM-DD
HH:MM:SS
TIME
El tipo de dato TIME sirve para almacenar la hora con el formato HH:MM:SS
YEAR
El tipo de dato YEAR sirve para almacenar el año con el formato YYYY
MATERIAL DE TRABAJO PARA BASES DE DATOS.
EJEMPLOS PRACTICOS DE SQL
Por el profesor. Ing. Carlos M. Francisco
UNIDAD 1: CREACION DE BASES DE DATOS Y TABLAS.
Al abrir la consulta se abre por defecto la base de datos MASTER.
CUANDO QUIERES EJECUTAR UN COMANDO SE SOMBREA PARA QUE NO AFECTE OTRAS LINEAS
QUE HEMOS
ESCRITO O SIMPLEMENTE SE COMENTA CON -- LO QUE NO QUEREMOS QUE SE EJECUTA.
NOTAREMOS QUE EN EL CODIGO USAREMOS IDENTITY (1,1) INDICANDO QUE ESTE CAMPO
SERA AUTO INCREMENTABLE DE 1 EN UNO. Y ADEMAS AL FINA AGREGAMOS NOT NULL
INDICANDO AL SISTEMA QUE ESTE CAMPO NO DEBE ESTAR VACIO.
CREATE DATABASE ESCUELAFULL
USE ESCUELAFULL
CREATE TABLE [dbo].[TB_ESTUDIANTE](
ID_EST numeric(18, 0) IDENTITY(1,1) NOT NULL,
NOMBRE1_EST varchar(35) NULL,
NOMBRE2_EST varchar(35) NULL,
APELLIDO1_EST varchar(35) NULL,
APELLIDO2_EST varchar(35) NULL,
DIRECCION_EST varchar(50) NULL,
TELEFONO_EST varchar(13) NULL,
FECHANACIMIENTO_EST smalldatetime NULL,
PADRE_EST varchar(40) NULL,
MADRE_EST varchar(40) NULL,
GRADO_EST int NULL,
SECCION_EST int NULL,
PERIODO_EST [numeric(18, 0) NULL,
PROFESOR_EST numeric(18, 0) NULL,
FECHAINSCRIPCION smalldatetime NULL,
CEL_EST varchar(13) NULL,
CED_PADRE varchar(13) NULL,
CED_EST varchar(13) NULL,
PROVINCIA_EST varchar(30) NULL,
MUNICIPIO_EST varchar(30) NULL,
SECTOR_EST varchar(30) NULL,
BARRIO_EST varchar(30) NULL,
CALLE_EST varchar(50) NULL,
CASA_EST varchar(6) NULL,
IDMINERD_EST varchar(30) NULL,
PROCEDENCIA_EST varchar(50) NULL,
ESTATUS_EST int NULL,
NUMERO_EST int NULL
CREATE TABLE TB_PERIODO
(
ID_PER NUMERIC (18,0) IDENTITY (1,1) NOT NULL,
NOMBRE_PER VARCHAR (9)
)
CREATE TABLE TB_GRADO
(
ID_GRADO NUMERIC (18,0) identity (1,1) not null,
NOMBRE_GRADO VARCHAR (12),
DESCRIPCION_GRADO VARCHAR (35)
)
CREATE TABLE TB_SECCION
(
ID_SECCION NUMERIC (18,0)IDENTITY (1,1) NOT NULL,
NOMBRE_SECCION VARCHAR (3),
GRADO_SECCION INT,
ID_PROF NUMERIC (18,0)
)
CREATE TABLE TB_CALIFICACIONES
(
ID_CALIF numeric(18, 0) IDENTITY(1,1) NOT NULL,
CALIFICACION numeric(18, 0) NULL,
ID_EST numeric(18, 0) NULL,
ID_PER numeric(18, 0) NULL,
ID_MATERIA] INT NULL,
ID_AREA INT NULL
)
CREATE TABLE TB_PROFESORES
(
ID_PROF NUMERIC (18,0) IDENTITY (1,1) NOT NULL,
NOMBRE_PROF VARCHAR (50),
MATERIA_PROF NUMERIC (18,0),
SECCION_PROF NUMERIC (18,0),
FECHAINGRESO_PROF SMALLDATETIME,
)
CREATE TABLE TB_MATERIA
(
ID_MATERIA NUMERIC (18,0) IDENTITY (1,1) NOT NULL,
NOMBRE_MATERIA VARCHAR (40),
GRADO_MATERIA INT,
AREAMATERIA INT
)
CREATE TABLE TB_AREA
(
ID_AREA NUMERIC (18,0) IDENTITY (1,1) NOT NULL,
NOMBREA_AREA VARCHAR (40),
ENCARGADO_AREA NUMERIC (18,0)
)
UNIDAD 2: INSERCION DE DATOS EN LAS TABLAS
 Después de crear todas las tablas les introduciremos datos, para esto usamos la sentencia
INSERT.
 Deben fijarse que primero colocamos todos los campos a los que le deseamos insertar datos
y luego los datos que registraremos, no es obligatorio que sean todos los de la tabla si no se
requieren.
 fijarse que para los datos que se introducen y son tipo texto como Varchar los colocamos
dentro de comilla simple, de lo contrario se presentara un error.
 En este ejemplo de insert colocamos los datos tanto de manera vertical para que me sea
más fácil identificar cualquier error como horizontal y notamos que no tendrían problema.
 Cuando ya tenemos la estructura creada solo se cambiaran los datos a introducir ya que
tenemos los campos.
 Como elegimos el tipo de datos SMALLDATETIME
INSERT INTO TB_ESTUDIANTE
(
NOMBRE1_EST ,
NOMBRE2_EST ,
APELLIDO1_EST ,
APELLIDO2_EST,
DIRECCION_EST ,
TELEFONO_EST ,
FECHANACIMIENTO_EST ,
PADRE_EST ,
MADRE_EST ,
GRADO_EST ,
SECCION_EST ,
PERIODO_EST ,
PROFESOR_EST ,
FECHAINSCRIPCION
)
VALUES
(
'CANDIDO',
'AMARO',
'FERNANDEZ',
'DE LA ROSA',
'AV. SIEMPRE VIVA NO 8, FRENTE A LOS SIPSON',
'809-555-5555',
12/12/90,
'CALCULORIO JOSESITO MANDON',
'DONA AMALIA SATURNINA',
1,
1,
1,
2,
06/04/14
)
INSERT INTO TB_PERIODO
(NOMBRE_PER)
VALUES
('2000-2001')
INSERT INTO TB_GRADO (NOMBRE_GRADO , DESCRIPCION_GRADO ) VALUES ('1RO', 'PRI
MERO BACHILLER')
INSERT INTO TBSECCION
(NOMBRE_SECCION , GRADO_SECCION , CODIGO_PROF )
VALUES
('A', 1, 1)
INSERT INTO TB_CALIFICACIONES
(CALIFICACION ,CODIGO_EST ,CODIGO_PER )
VALUES
(90,1,1)
INSERT INTO TB_PROFESORES
(NOMBRE_PROF ,MATERIA_PROF ,SECCION_PROF )
VALUES
('CARLOS MANUEL FRANCISCO', 1,1)
INSERT INTO TBMATERIA
(NOMBRE_MATERIA ,GRADO_MATERIA ,AREAMATERIA )
VALUES
('BASE DE DATOS', 1,1)
INSERT INTO TB_AREA
(NOMBREA_AREA ,ENCARGADO_AREA )
VALUES
('INFORMATICA',2)
Listo, se creó una base de datos, crearon tablas y se introdujeron datos. Ahora la práctica
consiste en insertar 4 elementos a cada tabla.
Preguntas sobre la práctica:
1. ¿Cuál es la sentencia usada para crear una base de datos?
2. ¿Cuál es la sentencia usada para crear una tabla y cuál es su
estructura?
3. ¿Cómo se comenta una línea en sql server?
4. ¿Cómo crear un campo auto numérico o auto incrementable en
SQL server?
5. Dos formas de ejecutar una sentencia en SQL serian:
6. ¿Es falso que en un campo not null no puede registrarse datos?
7. ¿Cuándo insertamos datos tipo texto es imprescindible
agregarles?
8. ¿Cuándo usamos la sentencia insert solo se puede colocar en
forma vertical?
9. ¿Cuáles diferencias existen entre el tipo de dato INT Y
NUMERIC?
10. Para ejecutar una sentencia especifica o un fragmento de
sentencia dejando lo demás sin ejecutarse ¿Qué podemos hacer?
UNIDAD 3: CONSULTAS DE DATOS:
La sentencia SELECT se utiliza para consultar datos de una o
varias tablas:
SELECT * FROM TB_ESTUDIANTE
En la sentencia acabamos de escribir podremos ver todos los
datos de la tabla estudiante, por lo que inferimos que el * significa
todos los campos de esta tabla.
--CONSULTANDO DATOS EN SQL UNA TABLA EJEMPLOS PRACTICOS
TODOS LOS CAMPOS DE LA TABLA
SELECT * FROM TB_ESTUDIANTE
CONSULTANDO CAMPOS ESPECIFICOS DE LA TABLA
select CODIGO_EST , nombre1_est, apellido1_est from TB_ESTUDIANTE
USANDO LA CLAUSULA WEHERE (CONSIULTAR SOLO DONDE ESXISTE EL DATO DESPUE DE
WHERE)
SELECT * FROM TB_ESTUDIANTE WHERE CODIGO_EST = 1
USANDO LA CLAUSULA WEHERE (CONSIULTAR SOLO DONDE ESXISTE EL DATO DESPUE DE
WHERE PERO CON CARACTERES DE TEXTO)
SELECT * FROM TB_ESTUDIANTE WHERE NOMBRE1_EST LIKE '%SOLO%'
--EJEMPLO DE CONSULTA MULTITABLA
SELECT TB_ESTUDIANTE .CODIGO_EST ,
TB_ESTUDIANTE .NOMBRE1_EST ,
TB_CALIFICACIONES .CALIFICACION,
TBMATERIA.NOMBRE_MATERIA FROM TB_CALIFICACIONES
INNER JOIN TB_ESTUDIANTE
ON TB_ESTUDIANTE .CODIGO_EST = TB_CALIFICACIONES .CODIGO_EST
INNER JOIN TBMATERIA
ON TBMATERIA .CODIGO_MATERIA = TB_CALIFICACIONES .CODIGO_MAT
--EN ESTE EJEMPLO MOSTRARA LAS CALIFICACIONES Y LAS MATERIAS DE TODOS LOS
ESTUDIANTES
--SI LE AGREGAMOS LA CLAUSULA WHERE HAREMOS CONSULLTAS ESPECIFICAS SEGUN EL
CAMPO QUE QUEREMOS
WHERE TB_ESTUDIANTE.CODIGO_EST =2
--OTRO EJEMPLO DE CONSULTA MULTITABLA
SELECT * FROM TB_AREA
SELECT * FROM TBMATERIA
SELECT TB_AREA .CODIGO_AREA ,
TB_AREA .NOMBREA_AREA ,
TBMATERIA .CODIGO_MATERIA ,
TBMATERIA .NOMBRE_MATERIA
FROM TB_AREA
INNER JOIN TBMATERIA
ON TB_AREA .CODIGO_AREA = TBMATERIA .AREAMATERIA
--EJEMPLO DE CONSULTA MULTITABLA USANDO ALIAS.
--UN ALIAS ES UN APODO QUE LE DAMOS A UNA TABLA O UN CAMPO PARA FALITAR SU
COMPRENSION O PARA REDUCIR LA COMPLEJIDAD EN
--LA BUSQUEDA AL MOENTO DE ESCRIBIR.
--EN ESTE EJEMPLO VEREMOS LOS ESTUDIANTES CON SUS CALIFICACIONES
select TB_ESTUDIANTE .NOMBRE1_EST ,
TB_CALIFICACIONES .CALIFICACION from TB_ESTUDIANTE
inner join TB_CALIFICACIONES
on TB_ESTUDIANTE .ID_EST = TB_CALIFICACIONES .ID_EST
NOMBRE1_EST CALIFICACION
CANDIDO 90
CANDIDO 100
CANDIDO 95
CANDIDO 98
CANDIDO 99
CANDIDO 95
--SI QUEREMOS MAS DE DOS TABLAS SIMPLEMENTE LAS VAMOS AGREGANDO CON OTRO
INNER JOIN.
select TB_ESTUDIANTE .NOMBRE1_EST ,
TB_MATERIA .NOMBRE_MATERIA ,
TB_CALIFICACIONES .CALIFICACION
from TB_ESTUDIANTE
inner join TB_CALIFICACIONES
on TB_ESTUDIANTE .ID_EST = TB_CALIFICACIONES .ID_EST
INNER JOIN TB_MATERIA
ON TB_CALIFICACIONES .ID_MATERIA = TB_MATERIA .CODIGO_MATERIA
ORDER BY TB_ESTUDIANTE .NOMBRE1_EST
--FIJARSE COMO SE AGREGO EL TB_MATERIA.NOMBRE_MATERIA.
NOMBRE1_EST NOMBRE_MATERIA CALIFICACION
CANDIDO ESPANOL 90
CANDIDO MATEMATICAS 100
CANDIDO SOCIALES 95
CANDIDO NATURALES 98
CANDIDO INGLES 99
CANDIDO FRANCES 95
CANDIDO INFORMATICA BASIC 98
CANDIDO FORMACION 96
CANDIDO ARTISTICA 91
JOSE ESPANOL 70
JOSE MATEMATICAS 71
JOSE SOCIALES 72
JOSE NATURALES 73
JOSE INGLES 74
JOSE FRANCES 75
JOSE INFORMATICA BASIC 76
JOSE FORMACION 77
JOSE ARTISTICA 78
JOSE ORIENTACION 79
PETRONILA ESPANOL 80
PETRONILA MATEMATICAS 81
PETRONILA SOCIALES 82
PETRONILA NATURALES 83
PETRONILA INGLES 84
PETRONILA FRANCES 85
PETRONILA INFORMATICA BASIC 86
PETRONILA FORMACION 87
PETRONILA ARTISTICA 88
SELECT E.CODIGO_EST ,
E .NOMBRE1_EST ,
C .CALIFICACION,
M.NOMBRE_MATERIA FROM TB_CALIFICACIONES AS C
INNER JOIN TB_ESTUDIANTE AS E
ON E.CODIGO_EST = C .CODIGO_EST
INNER JOIN TBMATERIA AS M
ON M .CODIGO_MATERIA = C.CODIGO_MAT
SELECT A.CODIGO_AREA ,
A .NOMBREA_AREA ,
M.CODIGO_MATERIA ,
M .NOMBRE_MATERIA
FROM TB_AREA AS A
INNER JOIN TBMATERIA AS M
ON A.CODIGO_AREA = M.AREAMATERIA
SELECT E.NOMBRE1_EST,
M.NOMBRE_MATERIA,
C.CALIFICACION,
P.NOMBRE_PER
FROM TB_ESTUDIANTE AS E
INNER JOIN TB_CALIFICACIONES AS C
ON E.CODIGO_EST = C.CODIGO_EST
INNER JOIN TBMATERIA AS M
ON C.CODIGO_MAT = M.CODIGO_MATERIA
INNER JOIN TB_PERIODO AS P
ON C.CODIGO_PER = P.CODIGO_PER

Más contenido relacionado

DOCX
SQL.docx
PPTX
Introduccion al sql query
PPT
Sql 2010
PDF
Clase 3 El lenguaje DML de SQL
PPTX
Lenguaje estructurado sql
PDF
EJERCICIO SENTENCIAS SQL_Completo.pdf
PDF
Comandos de consultas.pdf
PDF
Operaciones basicas de sql
SQL.docx
Introduccion al sql query
Sql 2010
Clase 3 El lenguaje DML de SQL
Lenguaje estructurado sql
EJERCICIO SENTENCIAS SQL_Completo.pdf
Comandos de consultas.pdf
Operaciones basicas de sql

Similar a MANUAL PRACTICO SQL SERVER para practicar lo aprendido.docx (20)

PDF
Consultas
PPT
Comandos SQL
DOC
Sql comamdo
PPTX
Base de datos - Clase 2
PDF
BD cap 5 SQL.pdf
PDF
sql-es.13 manual teorico practico myql
PPTX
SENTENCIAS SQL
PPTX
SQL-2022-2023.pptx
PDF
Bdii 04 sql
PDF
Guía 02. Consultas MySQL sobre una tabla - José J Sánchez H
PDF
SQL-b.pdf
PDF
PDF
Almacenamiento en bases de datos ejercicio maestria
DOC
Sentencias Sql
PPT
SQL SERVER COMPUTACION E INFORMATICA.ppt
PPTX
Tema5 sql - dml
PPTX
diapositiva-clase-unidad-4-sql.pptx
PPTX
diapositiva-clase-unidad-4-sql.pptx
PPTX
Introduccion a SQL
PPTX
Lenguaje estructurado de consulta sql
Consultas
Comandos SQL
Sql comamdo
Base de datos - Clase 2
BD cap 5 SQL.pdf
sql-es.13 manual teorico practico myql
SENTENCIAS SQL
SQL-2022-2023.pptx
Bdii 04 sql
Guía 02. Consultas MySQL sobre una tabla - José J Sánchez H
SQL-b.pdf
Almacenamiento en bases de datos ejercicio maestria
Sentencias Sql
SQL SERVER COMPUTACION E INFORMATICA.ppt
Tema5 sql - dml
diapositiva-clase-unidad-4-sql.pptx
diapositiva-clase-unidad-4-sql.pptx
Introduccion a SQL
Lenguaje estructurado de consulta sql
Publicidad

Más de JAVIERARTUROGARCIAMI (8)

PDF
Manual de base de datos sql server con ejemplos.pdf
PDF
QUE ES UN DATA CENTER (CENTRO DE DATOS).pdf
PPTX
fundamentos de base de datos en sql server.pptx
PPTX
introducciona las redes informaticas.pptx
PPTX
Juego de un gran juego para ti Sonic.pptx
PPTX
Presentación Centro de Estética Orgánico Verde.pptx
PPTX
Guia de ejercioccios de estudio c#.pptx
DOCX
Actividad integradora
Manual de base de datos sql server con ejemplos.pdf
QUE ES UN DATA CENTER (CENTRO DE DATOS).pdf
fundamentos de base de datos en sql server.pptx
introducciona las redes informaticas.pptx
Juego de un gran juego para ti Sonic.pptx
Presentación Centro de Estética Orgánico Verde.pptx
Guia de ejercioccios de estudio c#.pptx
Actividad integradora
Publicidad

Último (20)

PPTX
Contexto Normativo NSR10, presentacion 2025
PDF
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
DOC
informacion acerca de la crianza tecnificada de cerdos
PDF
manual-electricidad-automotriz-sistemas-electricos-bateria-alumbrado-iluminac...
PPTX
ISOTOPOS.pptx.universida.introduccion al tema
PPTX
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
PPTX
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
PDF
Módulo-de Alcance-proyectos - Definición.pdf
PDF
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
PDF
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
PPT
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
PDF
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
PDF
Marcos legales de la gestion tecnologica en venezuela yefferson reyes.pdf
PDF
Comité de Seguridad y Salud en el Trabajo.pdf
PDF
SEC formula cargos al Consejo Directivo del Coordinador y a ocho eléctricas p...
PDF
Marco Legal de la Gestión Tecnológica en Venezuela - Enderson Mendez
PDF
SUBDIVISIÓN URBANA PUEDE ENFRENTAR SERVIDUMBRE DE PASO.pdf
PDF
Oficio SEC de formulación de cargos por el apagón del 25F en contra del CEN
PPTX
Software para la educación instituciones superiores
PDF
Durabilidad del concreto en zonas costeras
Contexto Normativo NSR10, presentacion 2025
fulguracion-medicina-legal-418035-downloable-2634665.pdf lesiones por descarg...
informacion acerca de la crianza tecnificada de cerdos
manual-electricidad-automotriz-sistemas-electricos-bateria-alumbrado-iluminac...
ISOTOPOS.pptx.universida.introduccion al tema
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
Módulo-de Alcance-proyectos - Definición.pdf
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
Marcos legales de la gestion tecnologica en venezuela yefferson reyes.pdf
Comité de Seguridad y Salud en el Trabajo.pdf
SEC formula cargos al Consejo Directivo del Coordinador y a ocho eléctricas p...
Marco Legal de la Gestión Tecnológica en Venezuela - Enderson Mendez
SUBDIVISIÓN URBANA PUEDE ENFRENTAR SERVIDUMBRE DE PASO.pdf
Oficio SEC de formulación de cargos por el apagón del 25F en contra del CEN
Software para la educación instituciones superiores
Durabilidad del concreto en zonas costeras

MANUAL PRACTICO SQL SERVER para practicar lo aprendido.docx

  • 1. BASE DE DATOS MANUAL PRACTICO SQL SERVER MANUAL PRACTICO SQL SERVER MANUAL DE SQL RECOPILADO Y ADAPTADO POR ING. CARLOS MANUEL FRANCISCO El SQL es un lenguaje estándar de programación para el acceso a bases de datos. 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. Este tutorial se divide en las siguientes partes:  SQL Básico: Las instrucciones SQL básicas para la consulta de datos de cualquier base de datos relacional.  SQL Avanzado: Las instrucciones SQL avanzadas para un control completo sobre cualquier base de datos relacional.  Funciones SQL: SQL tiene múltiples funciones predefinidas para realizar ciertos cálculos sobre los datos.  Comandos SQL: Listado de todos los comandos SQL disponibles en este curso, para una referencia rápida de los mismos. 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:  Creación de una base de datos (CREATE DATABASE)  Creación de una tabla (CREATE TABLE)  Creación de una vista (CREATE VIEW)  Creación de un índice de una tabla (CREATE INDEX)  Creación de procedimientos almacenados (CREATE PROCEDURE)  Creación de disparadores (CREATE TRIGGER)  Consultar los datos almacenados en una tabla (SELECT)  Insertar datos en una tabla (INSERT)  Modificar datos ya existentes en una tabla (UPDATE)  Borrar datos almacenados en una tabla (DELETE)  Dar permiso de acceso a los datos de una tabla (GRANT)  Eliminar permisos de acceso a datos de una tabla (REVOKE)  Finalizar la transacción de una sentencia SQL (COMMIT)  Retroceder la transacción de una sentencia SQL (ROLLBACK). Estas son las instrucciones SQL básicas para el acceso a cualquier base de datos relacional.  SQL SELECT: SELECT se utiliza para consultar datos.
  • 2.  SQL DISTINCT: DISTINCT sirve para eliminar los duplicados de las consultas de datos.  SQL WHERE: WHERE se utiliza incluir las condiciones de los datos que queremos consultar.  AND OR: AND y OR se utilizan para incluir 2 o más condiciones a una consulta.  SQL ORDER BY: ORDER BY se utiliza para ordenar los resultados de una consulta.  SQL INSERT: INSERT se utiliza para insertar datos.  SQL UPDATE: UPDATE se utiliza actualizar o modificar datos ya existentes.  SQL DELETE: DELETE se utiliza borrar datos. SQL > SQL Básico > Sintaxis Un sistema de base de datos suele contener varias bases de datos. Cada base de datos suele contener varias tablas. Las tablas almacenan los datos organizados por filas. Cada fila contiene varios campos. Cada campo tiene una serie de propiedades, como por ejemplo, el nombre del campo, su longitud, tipo de dato que se va a almacenar, etc. 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. ESTA ES UNA FORMA BASICA DE CREAR TABLA POR MEDIO DE SENTENCIA CREATE TABLE table_name ( column_name1 data_type(size), column_name2 data_type(size), column_name3 data_type(size), .... );
  • 3. EJEMPLO PRACTICO CON DATOS DE CREACION DE TABLAS (PROBADO) USE ESCUELA CREATE TABLE TBESTUDIANTES ( IDESTUDIANTE INT, EST_NOMBRE1 VARCHAR (30), EST_NOMBRE2 VARCHAR (30), EST_APELLIDO1 VARCHAR (30), EST_APELLIDO2 VARCHAR (30), EST_FECHANACIMIENTO SMALLDATETIME, EST_LUGARNACIMIENTO VARCHAR (30), EST_CIUDAD VARCHAR (30), EST_SECTOR VARCHAR (30), EST_VARRIO VARCHAR (30), EST_CALLE VARCHAR (30), EST_CASA INT, EST_TELEFONOCASA VARCHAR (13), EST_CEL VARCHAR (13), EST_EMAIL VARCHAR (40), EST_NOMBREPADRE VARCHAR (30), EST_CEDPADRE VARCHAR (30), EST_PADREFECHANACIMIENTO SMALLDATETIME, EST_PADRECIUDAD VARCHAR (30),
  • 4. EST_PADRESECTOR VARCHAR (30), EST_PADREVARRIO VARCHAR (30), EST_PADRECALLE VARCHAR (30), EST_PADRECASA INT, EST_PADRETELEFONOCASA VARCHAR (13), EST_PADRECEL VARCHAR (13), EST_PADREEMAIL VARCHAR (40), EST_NOMBREMADRE VARCHAR (30), EST_CEDMADRE VARCHAR (30), EST_MADREFECHANACIMIENTO SMALLDATETIME, EST_MADRECIUDAD VARCHAR (30), EST_MADRESECTOR VARCHAR (30), EST_MADREVARRIO VARCHAR (30), EST_MADRECALLE VARCHAR (30), EST_MADRECASA INT, EST_MADRETELEFONOCASA VARCHAR (13), EST_MADRECEL VARCHAR (13), EST_MADREEMAIL VARCHAR (40), EST_GRADOACTIVO INT, EST_SECCIONACTIVA INT, EST_MATERIAS INT, EST_CALIFICACIONES INT )
  • 5. CREATE DATATABASE mibasedeatos; Las sentencias SQL se pueden agrupar por funcionalidades: 1.- Lenguaje de definición de datos (DDL). 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). 2.- Lenguaje de manipulación de datos (DML). DML está compuesto por sentencias que sirven para : consultar (SELECT) insertar (INSERT) modificar (UPDATE) borrar (DELETE) 3.- Lenguaje de control de datos (DCL). DCL está compuesto por sentencias SQL para controlar las funciones de administración: Confirmar la operacion (COMMIT) Retroceder la operacion (ROLLBACK) Dar permisos (GRANT) Quitar permisos (REVOKE) SQL > SQL Básico > 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. Sintaxis SQL SELECTc SELECT * FROM nombretabla SELECT columna1, columna2 FROM nombretabla 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
  • 6. 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 Si queremos consulta todos los nombres y primer apellido de todas las personas SELECT nombre, apellido1 FROM personas Este será el resultado: nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA LUIS LOPEZ SQL > SQL Básico > DISTINCT Al realizar una consulta puede ocurrir que existan valores repetidos para algunas columnas. Por ejemplo SELECT nombre FROM personas nombre ANTONIO
  • 7. 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. SELECT DISTINCT nombre FROM personas nombre ANTONIO LUIS SQL > SQL Básico > 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. El valor de la condición debe ir entre comillas simples ''. Por ejemplo: Seleccionar las personas cuyo nombre sea ANTONIO SELECT * FROM personas WHERE nombre = 'ANTONIO' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA BENITO SQL > SQL Básico > AND OR Los operadores AND y OR se utilizan para filtrar resultados con 2 condiciones.
  • 8. El operador AND mostrará los resultados cuando se cumplan las 2 condiciones. Condición1 AND condición2 El operador OR mostrará los resultados cuando se cumpla alguna de las 2 condiciones. Condicion1 OR condicion2 En la tabla personas nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA BENITO LUIS LOPEZ PEREZ La siguiente sentencia (ejemplo AND) dará el siguiente resultado: SELECT * FROM personas WHERE nombre = 'ANTONIO' AND apellido1 = 'GARCIA' nombre apellido1 apellido2 ANTONIO GARCIA BENITO La siguiente sentencia (ejemplo OR) dará el siguiente resultado: SELECT * FROM personas WHERE nombre = 'ANTONIO' OR apellido1 = 'GARCIA' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA BENITO También se pueden combinar AND y OR, como el siguiente ejemplo: SELECT * FROM personas
  • 9. WHERE nombre = 'ANTONIO' AND (apellido1 = 'GARCIA' OR apellido1 = 'LOPEZ) nombre apellido1 apellido2 ANTONIO GARCIA BENITO SQL > SQL Básico > ORDER BY 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) FROM nombre_tabla ORDER BY nombre_columna(s) ASC|DESC Por ejemplo, en la tabla personas : nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ LUIS LOPEZ PEREZ ANTONIO GARCIA BENITO SELECT nombre, apellido1 FROM personas ORDER BY apellido1 ASC Esta es la consulta resultante: nombre apellido1 LUIS LOPEZ ANTONIO GARCIA ANTONIO PEREZ
  • 10. Ejemplo de ordenación descendiente (DES) SELECT nombre, apellido1 FROM personas ORDER BY apellido1 DESC Esta es la consulta resultante: nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA LUIS LOPEZ SQL > SQL Básico > INSERT La 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_tabla VALUES (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 personas
  • 11. VALUES ('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 SQL > SQL Básico > UPDATE La sentencia UPDATE se utiliza para modificar valores en una tabla. La sintaxis de SQL UPDATE es: UPDATE nombre_tabla SET columna1 = valor1, columna2 = valor2 WHERE columna3 = valor3 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. Ejemplo del uso de SQL UPDATE nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ LUIS LOPEZ PEREZ ANTONIO GARCIA BENITO
  • 12. PEDRO RUIZ GONZALEZ Si queremos cambiar el apellido2 'BENITO' por 'RODRIGUEZ' ejecutaremos: UPDATE personas SET 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 RODRIGUEZ PEDRO RUIZ GONZALEZ SQL > SQL Básico > DELETE La sentencia DELETE sirve para borrar filas de una tabla. La sintaxis de SQL DELETE es: DELETE FROM nombre_tabla WHERE 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
  • 13. ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Si queremos borrar a la persona LUIS LOPEZ PEREZ, podemos ejecutar el comando: DELETE FROM personas WHERE nombre = 'LUIS' AND apellido1 = 'LOPEZ' AND apellido2 = 'PEREZ' La tabla 'personas' resultante será: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ SQL > SQL Avanzado > 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. Cláusula SQL TOP para SQL SERVER SELECT TOP número PERCENT nombre_columna FROM nombre_tabla Cláusula SQL TOP para MySQL SELECT columna(s) FROM tabla
  • 14. LIMIT númerofilas Cláusula SQL TOP para ORACLE SELECT columna(s) FROM tabla WHERE ROWNUM <= númerofilas Ejemplo SQL TOP para MySQL: Dada la siguiente tabla 'personas', quiero obtener los 2 primeros valores. nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ SELECT * FROM personas LIMIT 2 Obtendríamos el siguiente resultado: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ SQL > SQL Avanzado > LITE El operador LIKE se utiliza en la cláusula WHERE para buscar por un patrón. Sintaxis de SQL LIKE SELECT columna(s) FROM tabla WHERE columna LIKE '%patron%' Ejemplos del uso de SQL LIKE Dada la siguiente tabla 'personas' nombre apellido1 apellido2
  • 15. ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Si quiero seleccionar los nombres que empiezan por 'AN' en la tabla 'personas', ejecutaría el comando siguiente: SELECT * FROM personas WHERE nombre LIKE 'AN%' El carácter '%' es un comodín, que sirve para uno o más caracteres. Este es el resultado nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ Otro ejemplo de SQL LIKE Para seleccionar las personas que tienen un 'Z' en su apellido1, ejecutaríamos: SELECT * FROM personas WHERE apellido1 LIKE '%Z%' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ PEDRO RUIZ GONZALEZ SQL > SQL Avanzado > WILDCARDS 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.
  • 16. Los caracteres Wildcards se utilizan con el operador SQL LIKE en una sentencia SELECT.Los caracteres Wildcards son : % sustituye a cero o más caracteres _ sustituye a 1 carácter cualquiera [lista] sustituye a cualquier carácter de la lista [^lista] o [! lista] sustituye a cualquier carácter excepto los caracteres de la lista Ejemplos: Dada la siguiente tabla 'personas' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Ejemplos Wildcards Seleccionar las personas cuyo nombre contenga una 'R' SELECT * FROM personas WHERE nombre LIKE '%R%' Resultado: nombre apellido1 apellido2 PEDRO RUIZ GONZALEZ Seleccionar las personas cuyo apellido1 empiece por 'GA' SELECT * FROM personas WHERE apellido1 LIKE 'PE_EZ' Resultado:
  • 17. nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ Seleccionar las personas cuyo apellido1 empiece por P o G SELECT * FROM personas WHERE apellido1 LIKE '[PG]%' Resultado: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ SQL > SQL Avanzado > IN El operador IN permite seleccionar múltiples valores en una cláusula WHERE Sintaxis SQL IN SELECT columna FROM tabla WHERE columna IN (valor1, valor2, valor3, .) Ejemplo SQL IN
  • 18. Dada la siguiente tabla 'personas' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Queremos seleccionar a las personas cuyo apellido1 sea 'PEREZ' o 'RUIZ' SELECT * FROM personas WHERE apellido1 IN ('PEREZ','RUIZ') nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ PEDRO RUIZ GONZALEZ SQL > SQL Avanzado > BETWEEN El operador BETWEEN se utiliza en la cláusula WHERE para seleccionar valores entre un rango de datos. Sintaxis de SQL BETWEEN SELECT columna FROM tabla WHERE columna BETWEEN valor1 AND valor2 Ejemplo de SQL BETWEEN Dada la siguiente tabla 'personas' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ
  • 19. Seleccionar personas cuyo apellido1 esté entre 'FERNANDEZ y 'HUERTAS' SELECT * FROM personas WHERE apellido1 BETWEEN 'FERNANDEZ' AND 'HUERTAS' nombre apellido1 apellido2 ANTONIO GARCIA RODRIGUEZ Seleccionar personas cuyo apellido1 no esté entre 'FERNANDEZ y 'HUERTAS' SELECT * FROM personas WHERE apellido1 NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ PEDRO RUIZ GONZALEZ SQL > SQL Avanzado > ALIAS 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 largas o complicadas. Sintaxis SQL ALIAS para una tabla: SELECT columna FROM nombretabla AS aliastabla Sintaxis SQL ALIAS para una columna SELECT nombrecolumna AS aliascolumna FROM tabla
  • 20. Ejemplos SQL ALIAS Dada la siguiente tabla 'personas' nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Utilizamos el alias 'p' para la tabla 'personas', para simplificar la sentencia SELECT SELECT p.apellido1, p.apellido2 FROM personas AS p WHERE p.nombre = 'ANTONIO' apellido1 apellido2 PEREZ GOMEZ GARCIA RODRIGUEZ Sin utilizar el alias, la sentencia SELECT quedaría un poco más larga: SELECT personas.apellido1, personas.apellido2 FROM personas WHERE personas.nombre = 'ANTONIO' apellido1 apellido2 PEREZ GOMEZ GARCIA RODRIGUEZ SQL > SQL Avanzado > JOINS La sentencia SQL JOIN permite consultar datos de 2 o más tablas. Dichas tablas estarán relacionadas entre ellas de alguna forma, a través de alguna de sus columnas.
  • 21. Existen 3 tipos de JOINS: JOIN interno, JOIN externo y JOIN cruzado. 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 Tabla personas, con la clave primaria "per " per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 2 Tabla "departamentos", con la clave primaria "dep" dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL 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 "dep". Es decir, que desde la tabla "personas" y mediante la columna "dep", podemos acceder a la información de la tabla "departamentos". SQL > SQL Avanzado > INNER JOIN La sentencia INNER JOIN 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.
  • 22. SELECT * FROM tabla1 INNER JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 Ejemplo SQL INNER JOIN Tabla personas, con la clave primaria "per " per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 2 Tabla "departamentos", con la clave primaria "dep" dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos WHERE personas.dep = departamentos.dep nombre apellido1 departamento ANTONIO PEREZ ADMINISTRACION ANTONIO GARCIA INFORMATICA PEDRO RUIZ INFORMATICA SQL > SQL Avanzado > LEFT JOIN La sentencia LEFT JOIN 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. SELECT * FROM tabla1
  • 23. LEFT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 Ejemplo de SQL LEFT JOIN Tabla personas, con la clave primaria "per " per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Tabla "departamentos", con la clave primaria "dep" dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL SELECT nombre, apellido1, departamento FROM personas LEFT JOIN departamentos WHERE personas.dep = departamentos.dep nombre apellido1 departamento ANTONIO PEREZ ADMINISTRACION ANTONIO GARCIA INFORMATICA PEDRO RUIZ Aunque el departamento '4' de PEDRO RUIZ no existe en la tabla de departamentos, devolverá la fila con esa columna 'departamento' en blanco. SQL > SQL Avanzado > RIGHT JOIN
  • 24. 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. 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 per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Tabla "departamentos", con la clave primaria "dep" dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL SELECT nombre, apellido1, departamento FROM personas RIGHT JOIN departamentos WHERE personas.dep = departamentos.dep nombre apellido1 departamento ANTONIO PEREZ ADMINISTRACION ANTONIO GARCIA INFORMATICA COMERCIAL Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila aparecerá con las otras columnas en blanco
  • 25. SQL > SQL Avanzado > 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 FULL JOIN es la unión de LEFT JOIN y RIGHT JOIN SELECT * FROM tabla1 FULL JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 EJEMPLO SQL FULL JOIN per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Tabla "departamentos", con la clave primaria "dep" dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL SELECT nombre, apellido1, departamento FROM personas FULL JOIN departamentos WHERE personas.dep = departamentos.dep nombre apellido1 departamento ANTONIO PEREZ ADMINISTRACION ANTONIO GARCIA INFORMATICA PEDRO RUIZ COMERCIAL
  • 26. SQL > SQL Avanzado > UNION 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 SQL UNION SELECT columna1, columna2 FROM tabla1 UNION SELECT columna1, columna2 FROM tabla2 Ejemplo SQL UNION Tabla "personas_empresa1" per nombre apellido1 apellido2 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ Tabla "personas_empresa2" per nombre apellido1 apellido2 1 JUAN APARICIO TENS 2 ANTONIO GARCIA RODRIGUEZ 3 LUIS LOPEZ VAZQUEZ SELECT nombre, apellido1 FROM personas_empresa1 UNION SELECT nombre, apellido1 FROM personas_empresa2 nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA
  • 27. PEDRO RUIZ JUAN APARICIO LUIS LOPEZ La persona 'ANTONIO GARCIA RODRIGUEZ' aparecerá solo una vez en el resultado, porque no aparecerán las filas repetidas. SQL > SQL Avanzado > UNION ALL La sentencia SQL UNION ALL 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 SQL UNION SELECT columna1, columna2 FROM tabla1 UNION ALL SELECT columna1, columna2 FROM tabla2 Ejemplo SQL UNION ALL Tabla "personas_empresa1" per nombre apellido1 apellido2 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ Tabla "personas_empresa2" per nombre apellido1 apellido2
  • 28. 1 JUAN APARICIO TENS 2 ANTONIO GARCIA RODRIGUEZ 3 LUIS LOPEZ VAZQUEZ SELECT nombre, apellido1 FROM personas_empresa1 UNION ALL SELECT nombre, apellido1 FROM personas_empresa2 nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA PEDRO RUIZ JUAN APARICIO ANTONIO GARCIA LUIS LOPEZ La persona 'ANTONIO GARCIA RODRIGUEZ' aparecerá dos veces, porque está en los dos resultados de las sentencias SELECT. SQL > SQL Avanzado > 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. Sintaxis SQL SELECT INTO SELECT * INTO nuevatabla FROM tablaactual
  • 29. Esta sentencia copiará todos los registros de la tabla 'tablaactual' en la tabla 'nuevatabla'. La nueva tabla puede incluso estar en una base de datos diferente SELECT * INTO nuevatabla [IN nuevabasedatos] FROM tablaactual Si queremos hacer un backup de una tabla en otra SELECT * INTO personasBackup FROM personas También se pueden seleccionar sólo algunas columnas SELECT columna1, columna2 INTO personasBackup FROM personas También se puede incluir una condición (WHERE) SELECT * INTO personasBackup FROM personas WHERE nombre = 'ANTONIO' Se puede utilizar SELECT INTO con JOIN SELECT personas.nombre, personas.apellido1, departamentos.departamento INTO personasInformatica FROM personas INNER JOIN departamentos ON personas.dep = 'INFORMATICA' SQL > SQL Avanzado > CREATE DATABASE La sentencia CREATE DATABASE se utiliza para crear bases de datos. Sintaxis CREATE DATABASE: CREATE DATABASE nombreBaseDatos Ejemplo CREATE DATABASE
  • 30. CREATE DATABASE mibasededatos SQL > SQL Avanzado > CREATE TABLE La sentencia CREATE TABLE se 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), dep int } 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 alfanuméricos hasta una longitud máxima de 255 caracteres. La columna 'dep' es de tipo 'int', es decir, acepta sólo números. 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 > SQL Avanzado > Restricciones Las CONSTRAINTS son restricciones que se utilizan para limitar el tipo de dato que puede
  • 31. recibir una columna de una tabla. Las restricciones se puede definir cuando creamos la tabla (CREATE TABLE) o posteriormente con la sentencia ALTER TABLE. Las posibles restricciones son: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT SQL > SQL Avanzado > NOT NULL 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. Ejemplo SQL NULL CREATE TABLE 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'. SQL > SQL Avanzado > UNIQUE La restricción UNIQUE identifica de manera única a cada fila de una tabla. Puede haber varias restricciones UNIQUE en diferentes columnas de una tabla. Existen varias formas diferentes de sintaxis según el sistema de base de datos utilizado: Ejemplo SQL UNIQUE para la base de datos MySQL CREATE TABLE personas { identificador int NOT NULL,
  • 32. nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, apellido2 varchar(255), UNIQUE (identificador) } La sentencia anterior crea la tabla 'personas' con 4 columnas, donde la columna 'identifcador' tiene un valor diferente para cada fila de la tabla. Si intentamos insertar un fila con un identificador que ya exista, nos dará un error, y no nos dejará insertarlo. Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS CREATE TABLE personas { identificador int NOT NULL UNIQUE, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, apellido2 varchar(255), } SQL > SQL Avanzado > UNIQUE ALTER TABLE La restricción UNIQUE se puede añadir a una columna de una tabla, después de ser creada, mediante la sentencia ALTER TABLE. Sintaxis de UNIQUE ALTER TABLE ALTER TABLE personas ADD UNIQUE (identificador) Crea una restricción UNIQUE (valor único en toda la tabla) para la columna 'identificador'. Se puede crear también restricciones para varias columnas a la vez ALTER TABLE peronas ADD CONSTRAINT copersonas UNIQUE (identificador, apellido1) Para eliminar una restricción en la base de datos MySQL ALTER TABLE personas DROP INDEX copersonas Para eliminar una restricción en ORACLE, SQLSERVER y ACCESS
  • 33. ALTER TABLE personas DROP CONSTRAINT copersonas SQL > SQL Avanzado > PRIMARY KEY La clave primaria, PRIMARY KEY, identifica de manera única cada fila de una tabla. La columna definida como clave primaria (PRIMARY KEY) debe ser UNIQUE (valor único) y NOT NULL (no puede contener valores nulos). Cada tabla sólo puede tener una clave primaria (PRIMARY KEY). Ejemplo PRIMARY KEY , clave primaria en MySQL CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, PRIMARY KEY (identificador) } Ejemplo PRIMARY KEY , clave primaria en ORACLE, SQLSERVER, ACCESS CREATE TABLE 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í: CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, CONSTRAINT pers PRIMARY KEY (identificador, nombre) } La clave primaria también se puede definir después de haber creado la tabla, para eso utilizaremos el comando ALTER TABLE Ejemplo PRIMARY KEY con ALTER TABLE ALTER TABLE personas ADD PRIMARY KEY (identificador) Ejemplo PRIMARY KEY multiple ALTER TABLE ALTER TABLE personas CONSTRAINT pers PRIMARY KEY (identificador, nombre) SQL > SQL Avanzado > FOREIGN KEY
  • 34. 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. Ejemplo de FOREIGN KEY Tabla "departamentos", con la clave primaria "dep" dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave primaria 'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de los que tiene en esa tabla per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Definiciones de FOREIGN KEY en CREATE TABLE para MySQL CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255), PRIMARY KEY (dep) } CREATE TABLE personas { per int NOT NULL, nombre varchar(255), apellido1 varchar(255), dep int NOT NULL, PRIMARY KEY (per), FOREIGN KEY (dep) REFERENCES departamentos(dep)
  • 35. } Definiciones de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER CREATE TABLE departamentos { dep int NOT NULL PRIMARY KEY, departamento varchar(255), } CREATE TABLE personas { per int NOT NULL PRIMARY KEY, nombre varchar(255), apellido1 varchar(255), dep int FOREIGN KEY REFERENCES departamentos (dep) } 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 (dep, id) REFERENCES departamentos(dep,id). Ejemplo FOREIGN KEY con ALTER TABLE ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep) Ejemplo FOREIGN KEY múltiple (varias columnas) con ALTER TABLE: ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES departamentos(dep) Para borrar un clave externa (FOREIGN KEY) utilizamos DROP, pero varía según la base de dato: Borrar FOREIGN KEY en MySQL ALTER TABLE personas DROP FOREIGN KEY dep Borrar FOREIGN KEY en ORACLE, SQLSERVER y ACCESS ALTER TABLE personas DROP CONSTRAINT dep SQL > SQL Avanzado > CHECK
  • 36. 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. Ejemplo CHECK en MySQL CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255), CHECK (dep>0) } Ejemplo CHECK en ORACLE, SQLSERVER y ACCESS: CREATE TABLE departamentos { dep int NOT NULL CHECK (dep>0) departamento varchar(255), } Ejemplo CHECK en ALTER TABLE en MySQL ALTER TABLE departamentos ADD CHECK (dep>0) Ejemplo CHECK (con múltiples columnas) en ALTER TABLE en MySQL ALTER TABLE personas ADD CHECK (per>0, edad>35) Ejemplo CHECK en ALTER TABLE en ORACLE, SQLSERVER y ACCESS ALTER TABLE departamentos ADD CONSTRAINT ckdepart CHECK (dep>0) Ejemplo CHECK en ALTER TABLE con varias columnas ALTER TABLE personas ADD CONSTRAINT ckpersona CHECK (pers>0, nombre='antonio')
  • 37. SQL > SQL Avanzado > DEFAULT 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. SQL DEFAULT en la sentencia CREATE TABLE CREATE TABLE 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 '2001-01-01' o cualquier otro valor. SQL DEFAULT en la sentencia ALTER TABLE para MySQL ALTER TABLE pedidos ALTER fecha DEFAULT '2012-01-01' SQL DEFAULT en la sentencia ALTER TABLE para ORACLE, SQLSERVER, ACCESS: ALTER TABLE pedidos ALTER COLUMN fecha SET DEFAULT '2012-01-01' Para borrar DEFAULT en MySQL ALTER TABLE pedidos ALTER fecha DROP DEFAULT Para borrar DEFAULT en ORACLE, SQLSERVER, ACCESS: ALTER TABLE pedidos ALTER COLUMN fecha DROP DEFAULT SQL > SQL Avanzado > CREATE INDEX
  • 38. CREATE INDEX se utiliza para crear índices en una tabla. 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. Sintaxis para SQL CREATE INDEX CREATE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este índice admite valores duplicados en su columna. Sintaxis para SQL CREATE UNIQUE INDEX CREATE UNIQUE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este índice NO admite valores duplicados en su columna, porque es una clave única. Ejemplos para SQL CREATE INDEX Creamos la índice 'indicepersonas' sobre la columna 'persona' de la tabla 'personas' CREATE INDEX indicepersonas ON personas (persona) Si queremos crear un índice sobre varias columnas, por ejemplo, apellido1 y apellido2 CREATE INDEX indice2personas ON personas(apellido1, apellido2)
  • 39. SQL > SQL Avanzado > DROP La sentencia DROP se utiliza para borrar definitivamente un índice, tabla o base de datos. DROP INDEX Sintaxis DROP INDEX para MySQL ALTER TABLE nombretabla DROP INDEX nombreindice Sintaxis DROP INDEX para DB2 y ORACLE DROP INDEX nombreindice Sintaxis DROP INDEX para ACCESS DROP INDEX nombreindice ON nombretabla Sintaxis DROP INDEX para SQLSERVER DROP INDEX nombretabla.nombreindice DROP TABLE Se utiliza DROP TABLE para borrar definitivamente una tabla DROP TABLE nombretabla DROP DATABASE Se utiliza para borrar una base de datos definitivamente. DROP DATABASE nombrebasededatos SQL > SQL Avanzado > TRUNCATE 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. Este comando deja vacía una tabla, es decir, sin datos. TRUNCATE TABLE nombretabla
  • 40. SQL > SQL Avanzado > ALTER La sentencia SQL ALTER se utiliza para añadir, eliminar o modificar columnas de una tabla. Sintaxis SQL ALTER Para añadir una nueva columna a una tabla ALTER TABLE nombretabla ADD nombrecolumna tipodatocolumna Para borrar una columna de una tabla ALTER TABLE nombretabla DROP COLUMN nombrecolumna Para modificar el tipo de dato de una columna de una tabla ALTER TABLE nombretabla ALTER COLUMN nombrecolumna tipodatocolumna Ejemplos de SQL ALTER per nombre apellido1 apellido2 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ Dada la siguiente tabla de 'personas', queremos añadir una nueva columna, denominada 'fechadenacimiento' ALTER TABLE personas ADD fechadenacimiento date per nombre apellido1 apellido2 fechadenacimiento 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ
  • 41. 3 PEDRO RUIZ GONZALEZ Si queremos modificar el tipo de dato de la columna 'fecha', y ponerle tipo 'year' en lugar de tipo 'date' ALTER TABLE personas ALTER COLUMN fechadenacimiento year Si queremos borrar la columna 'fechadenacimiento', y dejarlo igual que al principio ALTER TABLE personas DROP COLUMN fechadenacimiento per nombre apellido1 apellido2 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ SQL > SQL Avanzado > AUTO INCREMENT 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. Sintaxis SQL AUTO INCREMENT CREATE TABLE personas { persona 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. Si queremos que el valor inicial sea 100 en lugar de 1 ALTER TABLE personas AUTO_INCREMENT=100
  • 42. Para SQL SERVER se utiliza IDENTITY en lugar de AUTO_INCREMENT Para ACCESS se utiliza AUTOINCREMENT en lugar de AUTO_INCREMENT Para ORACLE se define de forma diferente CREATE SEQUENCE persona MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10 SQL > SQL Avanzado > VIEWS Una vista es una tabla virtual. SQL CREATE VIEW Una vista es una tabla virtual basada en el resultado de una consulta (SELECT) a una tabla. CREATE VIEW nombrevista AS SELECT nombrecolumna(s) FROM nombretabla WHERE condición Las vista muestran siempre datos reales de una o varias tablas. Cada vez que un usuario pregunta o consulta una vista, el sistema de base de datos, actualiza los datos de la vista, para mostrar siempre datos reales. Ejemplo SQL CREATE VIEW En la tabla personas > nombre apellido1 apellido2 edad ANTONIO PEREZ GOMEZ 30 ANTONIO GARCIA RODRIGUEZ 45 PEDRO RUIZ GONZALEZ 50 Creamos una vista con las personas que se llaman ANTONIO CREATE VIEW [personas que se llaman ANTONIO] AS SELECT nombre, apellido1, apellido2,edad FROM personas
  • 43. WHERE nombre = 'ANTONIO' Para consultar los datos de una vista SELECT * FROM [personas que se llama ANTONIO] En la vista [personas que se llama ANTONIO] tenemos los datos siguientes: > nombre apellido1 apellido2 edad ANTONIO PEREZ GOMEZ 30 ANTONIO GARCIA RODRIGUEZ 45 SQL REPLACE VIEW Para reemplazar o modificar los datos de una vista: REPLACE VIEW [personas que se llama ANTONIO] AS SELECT nombre, apellido1, apellido2, edad FROM personas WHERE edad > 20 SQL DROP VIEW Para borrar una vista DROP VIEW nombrevista Ejemplo borrado de la vista antes creada: DROP VIEW [personas que se llama ANTONIO] SQL > SQL Avanzado > DATES 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. Tipos de Datos para las fechas y horas en la base de datos MySQL Tipo Formato Ejemplo
  • 44. DATE YYYY-MM-DD 2008-11-11 DATETIME YYYY-MM-DD HH:MM:SS 2008-11-11 13:23:44 TIMESTAMP YYYY-MM-DD HH:MM:SS YEAR YYYY o YY Funciones para MySQL sobre estos tipos de datos de fecha anteriores NOW Muestra la fecha y hora actuales. Por ejemplo: 2008-11-11 12:45:34 CURDATE Muestra la fecha actual. Por ejemplo: 2008-11-11 CURTIME Muestra la hora actual. Por ejemplo: 12:45:34 DATE Muestra la parte fecha de una expresión fecha/hora EXTRACT Muestra una parte de una expresión fecha/hora DATE_ADD Muestra una fecha como suma de un intervalo de tiempo a una fecha DATE_SUB Muestra una fecha como resta de un intervalo de tiempo a una fecha DATEDIFF Muestra el número de días entre 2 fechas DATE_FORMAT Muestra una fecha y hora con diferentes formatos Tipos de Datos para fechas y horas en la base de datos SQL Server DATE Formato YYYY-MM-DD DATETIME Formato YYYY-MM-DD HH:MM:SS SMALLDATETIME Formato YYYY-MM-DD HH:MM:SS TIMESTAMP Se genera un valor basado en la hora del sistema. Se actualiza automáticamente.
  • 45. 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 Ejemplos del uso de fecha y hora CREATE TABLE pedidos ( idpedido int NOT NULL, nombreproducto varchar(50) NOT NULL, fechapedido datetime NOT NULL PRIMARY KEY (idpedido) ) idpedido nombreproducto fechapedido 1 papel oficina 2012-02-23 14:05:00 Si queremos almacenar solo la fecha (y no la hora) utilizaremos el tipo de datos 'date' en lugar de 'datetime'. SQL > SQL Avanzado > 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
  • 46. nulos: > nombre apellido1 apellido2 edad ANTONIO PEREZ 30 LUIS LOPEZ PEREZ 45 ANTONIO GARCIA 50 Ejemplo de uso de IS NULL SELECT * FROM personas WHERE apellido2 IS NULL > nombre apellido1 apellido2 edad ANTONIO PEREZ 30 ANTONIO GARCIA 50 Ejemplo de uso de IS NOT NULL SELECT * FROM personas WHERE apellido2 IS NOT NULL > nombre apellido1 apellido2 edad LUIS LOPEZ PEREZ 45 SQL > SQL Avanzado > FUNCIONES NULL Si queremos cambiar un valor NULL por otro valor cualquiera, utilizaremos las siguientes funciones (ISNULL, IFNULL, NVL, COLACESCE) según el sistema de base de datos. Para nuestros ejemplos, queremos que si el valor es NULL se cambie por el valor 0 Ejemplo para SQL SERVER se utiliza ISNULL: SELECT producto, preciounidad * (unidadesstock + ISNULL(unidadespedido, 0)
  • 47. FROM productos Ejemplo para ORACLE se utiliza NVL: SELECT producto, preciounidad * (unidadesstock + NVL(unidadespedido, 0) FROM productos Ejemplo para MySQL, hay 2 funciones equivalentes (IFNULL, COALESCE): SELECT producto, preciounidad * (unidadesstock + IFNULL(unidadespedido, 0) FROM productos SELECT producto, preciounidad * (unidadesstock + COALESCE(unidadespedido, 0) FROM productos SQL > SQL Avanzado > DATOS TEXTO para MySQL Tipos de datos y rango de datos para el sistema de gestión de bases de datosMySQL Tipos de datos de TEXTO en MySQL CHAR El tipo de dato CHAR sirve para almacenar una cadena de datos de longitud fija. Puede contener caracteres, números y caracteres especiales. La longitud fija se define entre paréntesis, y siempre reservará espacio para esta longitud aunque no se utilice.
  • 48. Por ejemplo, CHAR(50), será un campo de longitud fija de 50 posiciones. La longitud máxima que podemos definir un campo CHAR es de 255. VARCHAR El tipo de datos VARCHAR sirve para almacenar una cadena de datos (caracteres, números y caracteres especiales) de longitud variable. La longitud máxima es de 255 caracteres. Hace un buen uso del espacio en disco, porque no reserva el espacio de la longitud máxima definida, si no que solo ocupa espacio el tamaño real de los datos almacenados en ese campo. Es el tipo de dato más utilizado para campos pequeños. TINYTEXT El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo caracteres, no admite número ni caracteres especiales) de una longitud máxima de 255 caracteres. TEXT El tipo de dato TEXT sirve para almacenar una cadena de caracteres de longitud máxima de 65,535 caracteres. BLOB El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object). Admite una longitud máxima de 65,535 bytes de datos. MEDIUMTEXT El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud máxima de 16.777.215 caracteres. MEDIUMBLOB El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud máxima 16.777.215 bytes. LONGTEXT El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud máxima de 4.294.967.295 caracteres. LONGBLOB El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud máxima de de
  • 49. 4.294.967.295 bytes. ENUM El tipo de dato ENUM sirve para introducir una lista de posibles valores. La longitud máxima es de 65.535 posibles valores. Si se intenta introducir un valor en este campo, que no esté incluido en la lista, no se insertará nada y tendrá un valor vacío (''). Por ejemplo si definimos una columna como ENUM('uno', 'dos'), entonces en esta columna solo puede almacenar los valores 'uno' o 'dos'. Si queremos insertar cualquier otro valor (por ejemplo 'tres'), no se grabará 'tres' y en su lugar quedará el campo vacío, sin valor (''). SET El tipo de dato SET es similar a ENUM pero la longitud máxima de valores posibles es de 64, y los valores posibles se pueden combinar. Por ejemplo, si definimos una columna como SET ('uno', 'dos) entonces esa columna podrá tomar los siguientes valores 'uno' o 'dos' o 'uno,dos', 'dos,uno'. SQL > SQL Avanzado > DATOS NUMÉRICOS para MySQL Tipos de datos numéricos para el sistema de gestión de bases de datosMySQL MySQL admite los siguientes tipos de datos numéricos para sus columnas TINYINT El tipo de dato numérico TINYINT permite números desde -128 hasta 127. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 255. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis (tamaño). SMALLINT El tipo de dato numérico SMALLINT permite números desde -32768 hasta 32767. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
  • 50. empiezan en 0 hasta 65535. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis MEDIUMINT El tipo de dato numérico MEDIUMINT permite números desde -8388608 hasta 8388607. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 16777215. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis INT El tipo de dato numérico INT permite números desde -2147483648 hasta 2147483647. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 4294967295. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis BIGINT El tipo de dato numérico BIGINT permite números desde -9223372036854775808 hasta 9223372036854775807. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 18446744073709551615. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis FLOAT El tipo de dato numérico FLOAT permite almacenar pequeños números decimales (de punto flotante). Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal). FLOAT(6,2) tendrá 4 dígitos enteros y 2 decimales, por ejemplo, 5467.67
  • 51. DOUBLE El tipo de dato numérico DOUBLE permite almacenar grandes números decimales (de punto flotante). Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal). DOUBLE(5,1) tendrá 4 dígitos enteros y 1 dígito decimal, por ejemplo, 5467.1 DECIMAL El tipo de dato numéric DECIMAL permite almacenar grandes números decimales de punto fijo, por tanto, los cálculos con este tipo DECIMAL son exactos. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal). El número máximo de dígitos es de 65. Por ejemplo DECIMAL(20,6) quiere decir que tendrá 14 dígitos enteros y 4 dígitos decimales. SQL > SQL Avanzado > DATOS FECHA para MySQL En MySQL pueden existir los siguientes tipos de datos para fechas DATE El tipo de dato DATE sirve para almacenar una fecha con el formato YYYY-MM-DD (4 dígitos para el año, guión, 2 dígitos para el mes, guión, 2 dígitos para el día). DATETIME El tipo de dato DATETIME sirve para almacenar fecha y hora, con el formato YYYY-MM-DD HH:MM:SS TIMESTAMP El tipo de dato TIMESTAMP es equivalente al tipo anterior, DATETIME, YYYY-MM-DD HH:MM:SS TIME
  • 52. El tipo de dato TIME sirve para almacenar la hora con el formato HH:MM:SS YEAR El tipo de dato YEAR sirve para almacenar el año con el formato YYYY MATERIAL DE TRABAJO PARA BASES DE DATOS. EJEMPLOS PRACTICOS DE SQL Por el profesor. Ing. Carlos M. Francisco UNIDAD 1: CREACION DE BASES DE DATOS Y TABLAS. Al abrir la consulta se abre por defecto la base de datos MASTER. CUANDO QUIERES EJECUTAR UN COMANDO SE SOMBREA PARA QUE NO AFECTE OTRAS LINEAS QUE HEMOS ESCRITO O SIMPLEMENTE SE COMENTA CON -- LO QUE NO QUEREMOS QUE SE EJECUTA. NOTAREMOS QUE EN EL CODIGO USAREMOS IDENTITY (1,1) INDICANDO QUE ESTE CAMPO SERA AUTO INCREMENTABLE DE 1 EN UNO. Y ADEMAS AL FINA AGREGAMOS NOT NULL INDICANDO AL SISTEMA QUE ESTE CAMPO NO DEBE ESTAR VACIO. CREATE DATABASE ESCUELAFULL USE ESCUELAFULL CREATE TABLE [dbo].[TB_ESTUDIANTE]( ID_EST numeric(18, 0) IDENTITY(1,1) NOT NULL, NOMBRE1_EST varchar(35) NULL, NOMBRE2_EST varchar(35) NULL, APELLIDO1_EST varchar(35) NULL, APELLIDO2_EST varchar(35) NULL, DIRECCION_EST varchar(50) NULL, TELEFONO_EST varchar(13) NULL, FECHANACIMIENTO_EST smalldatetime NULL, PADRE_EST varchar(40) NULL, MADRE_EST varchar(40) NULL, GRADO_EST int NULL, SECCION_EST int NULL, PERIODO_EST [numeric(18, 0) NULL, PROFESOR_EST numeric(18, 0) NULL, FECHAINSCRIPCION smalldatetime NULL, CEL_EST varchar(13) NULL, CED_PADRE varchar(13) NULL, CED_EST varchar(13) NULL, PROVINCIA_EST varchar(30) NULL, MUNICIPIO_EST varchar(30) NULL, SECTOR_EST varchar(30) NULL, BARRIO_EST varchar(30) NULL,
  • 53. CALLE_EST varchar(50) NULL, CASA_EST varchar(6) NULL, IDMINERD_EST varchar(30) NULL, PROCEDENCIA_EST varchar(50) NULL, ESTATUS_EST int NULL, NUMERO_EST int NULL CREATE TABLE TB_PERIODO ( ID_PER NUMERIC (18,0) IDENTITY (1,1) NOT NULL, NOMBRE_PER VARCHAR (9) ) CREATE TABLE TB_GRADO ( ID_GRADO NUMERIC (18,0) identity (1,1) not null, NOMBRE_GRADO VARCHAR (12), DESCRIPCION_GRADO VARCHAR (35) ) CREATE TABLE TB_SECCION ( ID_SECCION NUMERIC (18,0)IDENTITY (1,1) NOT NULL, NOMBRE_SECCION VARCHAR (3), GRADO_SECCION INT, ID_PROF NUMERIC (18,0) ) CREATE TABLE TB_CALIFICACIONES ( ID_CALIF numeric(18, 0) IDENTITY(1,1) NOT NULL, CALIFICACION numeric(18, 0) NULL, ID_EST numeric(18, 0) NULL, ID_PER numeric(18, 0) NULL, ID_MATERIA] INT NULL, ID_AREA INT NULL ) CREATE TABLE TB_PROFESORES ( ID_PROF NUMERIC (18,0) IDENTITY (1,1) NOT NULL, NOMBRE_PROF VARCHAR (50), MATERIA_PROF NUMERIC (18,0), SECCION_PROF NUMERIC (18,0), FECHAINGRESO_PROF SMALLDATETIME, ) CREATE TABLE TB_MATERIA
  • 54. ( ID_MATERIA NUMERIC (18,0) IDENTITY (1,1) NOT NULL, NOMBRE_MATERIA VARCHAR (40), GRADO_MATERIA INT, AREAMATERIA INT ) CREATE TABLE TB_AREA ( ID_AREA NUMERIC (18,0) IDENTITY (1,1) NOT NULL, NOMBREA_AREA VARCHAR (40), ENCARGADO_AREA NUMERIC (18,0) ) UNIDAD 2: INSERCION DE DATOS EN LAS TABLAS  Después de crear todas las tablas les introduciremos datos, para esto usamos la sentencia INSERT.  Deben fijarse que primero colocamos todos los campos a los que le deseamos insertar datos y luego los datos que registraremos, no es obligatorio que sean todos los de la tabla si no se requieren.  fijarse que para los datos que se introducen y son tipo texto como Varchar los colocamos dentro de comilla simple, de lo contrario se presentara un error.  En este ejemplo de insert colocamos los datos tanto de manera vertical para que me sea más fácil identificar cualquier error como horizontal y notamos que no tendrían problema.  Cuando ya tenemos la estructura creada solo se cambiaran los datos a introducir ya que tenemos los campos.  Como elegimos el tipo de datos SMALLDATETIME INSERT INTO TB_ESTUDIANTE ( NOMBRE1_EST , NOMBRE2_EST , APELLIDO1_EST , APELLIDO2_EST, DIRECCION_EST , TELEFONO_EST , FECHANACIMIENTO_EST , PADRE_EST , MADRE_EST , GRADO_EST , SECCION_EST , PERIODO_EST , PROFESOR_EST , FECHAINSCRIPCION ) VALUES (
  • 55. 'CANDIDO', 'AMARO', 'FERNANDEZ', 'DE LA ROSA', 'AV. SIEMPRE VIVA NO 8, FRENTE A LOS SIPSON', '809-555-5555', 12/12/90, 'CALCULORIO JOSESITO MANDON', 'DONA AMALIA SATURNINA', 1, 1, 1, 2, 06/04/14 ) INSERT INTO TB_PERIODO (NOMBRE_PER) VALUES ('2000-2001') INSERT INTO TB_GRADO (NOMBRE_GRADO , DESCRIPCION_GRADO ) VALUES ('1RO', 'PRI MERO BACHILLER') INSERT INTO TBSECCION (NOMBRE_SECCION , GRADO_SECCION , CODIGO_PROF ) VALUES ('A', 1, 1) INSERT INTO TB_CALIFICACIONES (CALIFICACION ,CODIGO_EST ,CODIGO_PER ) VALUES (90,1,1) INSERT INTO TB_PROFESORES (NOMBRE_PROF ,MATERIA_PROF ,SECCION_PROF ) VALUES ('CARLOS MANUEL FRANCISCO', 1,1) INSERT INTO TBMATERIA (NOMBRE_MATERIA ,GRADO_MATERIA ,AREAMATERIA ) VALUES ('BASE DE DATOS', 1,1) INSERT INTO TB_AREA (NOMBREA_AREA ,ENCARGADO_AREA ) VALUES ('INFORMATICA',2) Listo, se creó una base de datos, crearon tablas y se introdujeron datos. Ahora la práctica consiste en insertar 4 elementos a cada tabla.
  • 56. Preguntas sobre la práctica: 1. ¿Cuál es la sentencia usada para crear una base de datos? 2. ¿Cuál es la sentencia usada para crear una tabla y cuál es su estructura? 3. ¿Cómo se comenta una línea en sql server? 4. ¿Cómo crear un campo auto numérico o auto incrementable en SQL server? 5. Dos formas de ejecutar una sentencia en SQL serian: 6. ¿Es falso que en un campo not null no puede registrarse datos? 7. ¿Cuándo insertamos datos tipo texto es imprescindible agregarles? 8. ¿Cuándo usamos la sentencia insert solo se puede colocar en forma vertical? 9. ¿Cuáles diferencias existen entre el tipo de dato INT Y NUMERIC? 10. Para ejecutar una sentencia especifica o un fragmento de sentencia dejando lo demás sin ejecutarse ¿Qué podemos hacer? UNIDAD 3: CONSULTAS DE DATOS: La sentencia SELECT se utiliza para consultar datos de una o varias tablas: SELECT * FROM TB_ESTUDIANTE
  • 57. En la sentencia acabamos de escribir podremos ver todos los datos de la tabla estudiante, por lo que inferimos que el * significa todos los campos de esta tabla. --CONSULTANDO DATOS EN SQL UNA TABLA EJEMPLOS PRACTICOS TODOS LOS CAMPOS DE LA TABLA SELECT * FROM TB_ESTUDIANTE CONSULTANDO CAMPOS ESPECIFICOS DE LA TABLA select CODIGO_EST , nombre1_est, apellido1_est from TB_ESTUDIANTE USANDO LA CLAUSULA WEHERE (CONSIULTAR SOLO DONDE ESXISTE EL DATO DESPUE DE WHERE) SELECT * FROM TB_ESTUDIANTE WHERE CODIGO_EST = 1 USANDO LA CLAUSULA WEHERE (CONSIULTAR SOLO DONDE ESXISTE EL DATO DESPUE DE WHERE PERO CON CARACTERES DE TEXTO) SELECT * FROM TB_ESTUDIANTE WHERE NOMBRE1_EST LIKE '%SOLO%' --EJEMPLO DE CONSULTA MULTITABLA SELECT TB_ESTUDIANTE .CODIGO_EST , TB_ESTUDIANTE .NOMBRE1_EST , TB_CALIFICACIONES .CALIFICACION, TBMATERIA.NOMBRE_MATERIA FROM TB_CALIFICACIONES INNER JOIN TB_ESTUDIANTE ON TB_ESTUDIANTE .CODIGO_EST = TB_CALIFICACIONES .CODIGO_EST INNER JOIN TBMATERIA ON TBMATERIA .CODIGO_MATERIA = TB_CALIFICACIONES .CODIGO_MAT --EN ESTE EJEMPLO MOSTRARA LAS CALIFICACIONES Y LAS MATERIAS DE TODOS LOS ESTUDIANTES --SI LE AGREGAMOS LA CLAUSULA WHERE HAREMOS CONSULLTAS ESPECIFICAS SEGUN EL CAMPO QUE QUEREMOS WHERE TB_ESTUDIANTE.CODIGO_EST =2 --OTRO EJEMPLO DE CONSULTA MULTITABLA SELECT * FROM TB_AREA SELECT * FROM TBMATERIA SELECT TB_AREA .CODIGO_AREA , TB_AREA .NOMBREA_AREA , TBMATERIA .CODIGO_MATERIA , TBMATERIA .NOMBRE_MATERIA FROM TB_AREA INNER JOIN TBMATERIA ON TB_AREA .CODIGO_AREA = TBMATERIA .AREAMATERIA
  • 58. --EJEMPLO DE CONSULTA MULTITABLA USANDO ALIAS. --UN ALIAS ES UN APODO QUE LE DAMOS A UNA TABLA O UN CAMPO PARA FALITAR SU COMPRENSION O PARA REDUCIR LA COMPLEJIDAD EN --LA BUSQUEDA AL MOENTO DE ESCRIBIR. --EN ESTE EJEMPLO VEREMOS LOS ESTUDIANTES CON SUS CALIFICACIONES select TB_ESTUDIANTE .NOMBRE1_EST , TB_CALIFICACIONES .CALIFICACION from TB_ESTUDIANTE inner join TB_CALIFICACIONES on TB_ESTUDIANTE .ID_EST = TB_CALIFICACIONES .ID_EST NOMBRE1_EST CALIFICACION CANDIDO 90 CANDIDO 100 CANDIDO 95 CANDIDO 98 CANDIDO 99 CANDIDO 95 --SI QUEREMOS MAS DE DOS TABLAS SIMPLEMENTE LAS VAMOS AGREGANDO CON OTRO INNER JOIN. select TB_ESTUDIANTE .NOMBRE1_EST , TB_MATERIA .NOMBRE_MATERIA , TB_CALIFICACIONES .CALIFICACION from TB_ESTUDIANTE inner join TB_CALIFICACIONES on TB_ESTUDIANTE .ID_EST = TB_CALIFICACIONES .ID_EST INNER JOIN TB_MATERIA ON TB_CALIFICACIONES .ID_MATERIA = TB_MATERIA .CODIGO_MATERIA ORDER BY TB_ESTUDIANTE .NOMBRE1_EST --FIJARSE COMO SE AGREGO EL TB_MATERIA.NOMBRE_MATERIA. NOMBRE1_EST NOMBRE_MATERIA CALIFICACION CANDIDO ESPANOL 90 CANDIDO MATEMATICAS 100 CANDIDO SOCIALES 95 CANDIDO NATURALES 98 CANDIDO INGLES 99 CANDIDO FRANCES 95 CANDIDO INFORMATICA BASIC 98 CANDIDO FORMACION 96 CANDIDO ARTISTICA 91 JOSE ESPANOL 70 JOSE MATEMATICAS 71 JOSE SOCIALES 72 JOSE NATURALES 73 JOSE INGLES 74 JOSE FRANCES 75 JOSE INFORMATICA BASIC 76 JOSE FORMACION 77 JOSE ARTISTICA 78 JOSE ORIENTACION 79 PETRONILA ESPANOL 80 PETRONILA MATEMATICAS 81
  • 59. PETRONILA SOCIALES 82 PETRONILA NATURALES 83 PETRONILA INGLES 84 PETRONILA FRANCES 85 PETRONILA INFORMATICA BASIC 86 PETRONILA FORMACION 87 PETRONILA ARTISTICA 88 SELECT E.CODIGO_EST , E .NOMBRE1_EST , C .CALIFICACION, M.NOMBRE_MATERIA FROM TB_CALIFICACIONES AS C INNER JOIN TB_ESTUDIANTE AS E ON E.CODIGO_EST = C .CODIGO_EST INNER JOIN TBMATERIA AS M ON M .CODIGO_MATERIA = C.CODIGO_MAT SELECT A.CODIGO_AREA , A .NOMBREA_AREA , M.CODIGO_MATERIA , M .NOMBRE_MATERIA FROM TB_AREA AS A INNER JOIN TBMATERIA AS M ON A.CODIGO_AREA = M.AREAMATERIA SELECT E.NOMBRE1_EST, M.NOMBRE_MATERIA, C.CALIFICACION, P.NOMBRE_PER FROM TB_ESTUDIANTE AS E INNER JOIN TB_CALIFICACIONES AS C ON E.CODIGO_EST = C.CODIGO_EST INNER JOIN TBMATERIA AS M ON C.CODIGO_MAT = M.CODIGO_MATERIA INNER JOIN TB_PERIODO AS P ON C.CODIGO_PER = P.CODIGO_PER