Está en la página 1de 9

CURSO SQL

Comando+clausula+operadores+funciones

No importa mayúscula o minúscula

Select es un comando
SELECT EMPRESA, DIRECCIÓN, POBLACIÓN FROM clients ## la línea de código

Cláusulas

From: especifica la tabla de la que se quieren obtener los registros

Where: especifica las condiciones o creiterios de los registros


seleccionados

Group by agrupar por sección

Having especifica las condiciones o criterios que deben cumplir los


grupos

Order by ordena los registros seleccionados en función de un campo.

Operadores de comparación <>=<>, between (rangos), like, in

Operadores lógicos: and, or, not

Orden de escritura:

Comando+clausula from+clausula where+…+(en el orden que escribí las


clausulas)

Si queremos ver todos las columnas de la tabla select *

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO FROM productos WHERE


SECCIÓN="CERÁMICA" ## artículos que cumplen la condición sección=cerámica

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO FROM productos WHERE


SECCIÓN="CERÁMICA" OR SECCIÓN="DEPORTES" ##con cosos lógicos

SELECT * FROM productos WHERE FECHA BETWEEN '2000-03-01' AND '2000-04-30'


#ejemplo de cuando se usa between # En Access toca entre numerales las
fechas

SELECT * FROM productos WHERE PRECIO>500

ORDER BY

SELECT * FROM productos where SECCIÓN="CERÁMICA" OR SECCIÓN="DEPORTES"


ORDER BY SECCIÓN . #ORDENA SEGÚN UNA CATEGORÍA POR SECCIÓN. SI ES DE
TEXTO LA CATEGORIA ORDENA ALFABETICAMENTE

SELECT * FROM productos where SECCIÓN="CERÁMICA" OR SECCIÓN="DEPORTES"


ORDER BY SECCIÓN DESC #SI SE COLOCA DESC. Lo ordena pero en orden
descendente
SELECT * FROM productos where SECCIÓN="CERÁMICA" OR SECCIÓN="DEPORTES"
ORDER BY SECCIÓN, PRECIO #SE PUEDEN COLOCAR DOS CRITERIOS PARA ORDENAR

CONSULTAS DE AGRUPACIÓN O TOTALES

FUNCIONES DE AGREGADO: AVG, COUNT, SUM, MAX, MIN

CAMPO DE AGRUPACIÓN O CAMPO DE CÁLCULO

SELECT SECCIÓN, SUM(PRECIO) FROM PRODUCTOS GROUP BY SECCIÓN

SELECT SECCIÓN, SUM(PRECIO)AS SUMA_ARTICULOS FROM PRODUCTOS GROUP BY


SECCIÓN ORDER BY SUMA_ARTICULOS #PARA DAR UNA ALIAS A UNA FUNCIÓN DE
AGRUPACIÓN SE COLOCA EL AS

#En las consultas de agrupación se sustituye el where por having

SELECT SECCIÓN, SUM(PRECIO)AS SUMA_ARTICULOS FROM PRODUCTOS GROUP BY


SECCIÓN HAVING SECCIÓN="DEPORTES" OR SECCIÓN= "CERÁMICA" ORDER BY
SUMA_ARTICULO

SELECT POBLACIÓN, COUNT(CÓDIGOCLIENTE) FROM clientes GROUP BY POBLACIÓN

SELECT SECCIÓN, MAX(PRECIO) FROM productos GROUP BY SECCIÓN HAVING


SECCIÓN="CONFECCIÓN"
#EL ARTÍCULO CON PRECIO MÁS ALTO DE LA SECCIÓN DE CONFECCIÓN.

CONSULTAS DE CALCULO
SOBRE REGISTROS INDIVIDUALES NO SOBRE GRUPOS
Funciones frecuentes
Now: fecha actual
Datediff()
Date_format()
Concat()
Round()
Truncate()

#Se pueden crear variables con operaciones de las mismas


SELECT NOMBREARTÍCULO SECCIÓN, PRECIO, PRECIO*1.21 FROM productos

SELECT NOMBREARTÍCULO SECCIÓN, PRECIO, ROUND(PRECIO*1.21, 1) AS


PRECIOCONIVA FROM productos

SELECT NOMBREARTÍCULO SECCIÓN, PRECIO, ROUND(PRECIO*1.21, 1) AS


PRECIOCONIVA FROM productos #para redondear se usa round

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, FECHA, NOW() AS DÍADEHOY,


DATEDIFF(NOW(),FECHA) FROM productos WHERE SECCIÓN="DEPORTES"

NOW PARA LA FECHA DE HOY,


DATE DIFF PARA LA DIFERENCIA DE DÍAS

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, FECHA, DATE_FORMAT(NOW(),"%D-%M")


AS DÍADEHOY, DATEDIFF(NOW(),FECHA) FROM productos WHERE
SECCIÓN="DEPORTES"
#CONSULTAS MULTITABLAS

Unión externa y unión interna.


Unión externa= unión, unión all, except, intersect, minus

#el formato de tabla de las dos tablas sea igual


#los mismos campos (columnas)

SELECT * from productos WHERE SECCIÓN="DEPORTES" UNION SELECT * FROM


productosnuevos WHERE SECCIÓN="DEPORTES DE RIESGO"

SELECT * FROM productos WHERE PRECIO>500 UNION SELECT * FROM


productosnuevos WHERE SECCIÓN= "ALTA COSTURA"

UNION ALL

Muestra todos los registros así estén repetidos

Unión interna: Inner join, lef join, right join

INNER JOIN: REGISTROS QUE ESTÁN EN TABLAS RELACIONADAS.LOS CLIENTES QUE


PIDEN PEDIDOS. CLIENTES QUE NO HAN REALIZADO PEDIDOS

LEFT JOIN: DEVUELVE LOS REGISTROS QUE ESTÁN EN AMBAS TABLAS, PERO NOS
DEVUELVE LOS REGISTROS QUE ESTÁN EN LA PRIMERA TABLA

RIGHT JOIN: DEVUELVE LOS REGISTROS QUE ESTÁN EN AMBAS, PERO NOS DEVUELVE
LOS REGISTROS QUE ESTÁN EN LA PRIMERA TABLA.

SELECT * FROM CLIENTES INNER JOIN hoja1 ON


CLIENTES.CÓDIGOCLIENTE=hoja1.CÓDIGOCLIENTE WHERE POBLACIÓN="MADRID"

SELECT * FROM CLIENTES LEFT JOIN hoja1 ON


CLIENTES.CÓDIGOCLIENTE=hoja1.CÓDIGOCLIENTE WHERE POBLACIÓN="MADRID"

SELECT * FROM CLIENTES RIGHT JOIN hoja1 ON


CLIENTES.CÓDIGOCLIENTE=hoja1.CÓDIGOCLIENTE WHERE POBLACIÓN="MADRID"

#SE DEBE CREAR INDICE CON LA VARIABLE INDEX PARA LUEGO ESTABLECER
RELACIONES

Subconsultas.

Subconsulta escalonada.

SELECT NOMBREARTÍCULO, SECCIÓN FROM productos WHERE PRECIO>(SELECT


AVG(PRECIO) FROM productos)

#UNA CONSULTA DENTRO DE OTRA CONSULTA.

SELECT * FROM productos WHERE PRECIO > ALL(SELECT PRECIO FROM


productos WHERE SECCIÓN="CERÁMICA")

#EL ALL SIRVE PARA INDICAR QUE ES MAYOR QUE TODOS LOS VALORES DE
LA CONSULTA MENOR
ALL= TODOS
ANY= CUALQUIERA

SELECT * FROM productos WHERE PRECIO > ANY(SELECT PRECIO FROM


productos WHERE SECCIÓN="CERÁMICA")
SELECT * FROM productos WHERE PRECIO > All(SELECT PRECIO FROM
productos WHERE SECCIÓN="CERÁMICA")

IN, NOT IN

Estan y no están podría ser una Buena traducción

La primera consulta nos da una columna de resultados, luego con el


in y not in podemos ver si están o no en otra tabla.

SELECT NOMBREARTÍCULO, PRECIO FROM PRODUCTOS WHERE CÓDIGOARTÍCULO


IN (SELECT CÓDIGOARTÍCULO FROM PRODUCTOSPEDIDOS WHERE UNIDADES>20)

Te filtra por los código artículos que estén en la subconsulta.

#Otras formas de hacer la misma consulta de arriba:

SELECT NOMBREARTÍCULO PRECIO FROM PRODUCTOS INNER JOIN PRODUCTOSPEDIDOS


ON PRODUCTOS.CÓDIGOARTÍCULO=PRODUCTOSPEDIDOS.CÓDIGOARTÍCULO WHERE
UNIDADES>20

SELECT EMPRESA POBLACIÓN FROM CLIENTES WHERE CÓDIGOCLIENTE NOT IN (SELECT


CÓDIGOCLIENTE FROM PEDIDOS WHERE FORMADEPAGO=”TARJETA”

CONSULTAS DE ACCIÓN

Modifican información que hay en las tablas

Actualización
Creación de tabla
Elimación
Datos anexados
Comando DML Y DDL (Create, Update, Delete, Insert Into, Select Into)

Actualización######

UPDATE productos SET precio=precio+10 where sección="deportes"

UPDATE productos SET precio=precio+10 where sección="deportes"

#Crear una tabla nueva apartir de otra tabla.


Es diferente en Access y mysql

SELECT * INTO CLIENTES_MADRID FROM CLIENTES WHERE POBLACIÓN=”MADRID”


CREATE TABLE CLIENTES_MADRID SELECT * FROM clientes WHERE
POBLACIÓN="MADRID" ## ESTA ES LA DE MYSQL

#CONSULTAS DE ELIMINACIÓN

DELETE FROM clientes WHERE POBLACIÓN="MADRID"

DELETE FROM productos WHERE SECCIÓN=”DEPORTIVOS” AND PRECIOS BETWEEN 50


AND 100

SELECT DISTINCT(EMPRESA) FROM clientes INNER JOIN hoja1 ON


clientes.CÓDIGOCLIENTE=hoja1.CÓDIGOCLIENTE ##DISTINCT SIRVE PARA QUE LOS
RESULTADOS DE UNA SELECCIÓN NO SE REPITAN

DISTINCT IMPIDE QUE LOS ELEMENTOS DE UN CAMPO SE REPITAN

DISTINCT ROW NO MOSTRAR REGISTROS REPETIDOS EN UNA FILA.

DELETE DISTINCTROW(CLIENTES.*), DISTINCTROW(hoja1.CÓDIGOCLIENTE) FROM


CLIENTES LEFT JOIN hoja1 ON clientes.CÓDIGOCLIENTE=hoja1.CÓDIGOCLIENTE
WHERE hoja1.CÓDIGOCLIENTE IS NULL

INSERT TO

SIRVE PARA ANEXAR DATOS A UNA TABLA QUE TIENE LOS MISMOS CAMPOS.

INSERT TO clientes

SELECT * FROM clientes_madrid

INSERT INTO CLIENTES (CÓDIGOCLIENTE, EMPRESA, POBLACIÓN, TELÉFONO)

SELECT CÓDIGOCLIENTE, EMPRESA, POBLACIÓN, TELÉFONO FROM clientes_madrid

Sí hay códigos clientes, estos deben incluirse.

REFERENCIAS CRUZADAS

Son como tablas dinámicas

No están disponibles para MySQL. Es para Access

Zona de columnas, zona de filas, zona de totales

Pivot, Groupby, Transform

TRANSFORM SUM(PRECIO) AS TOTAL

SELECT NOMBREARTÍCULO

FROM PRODUCTOS

GROUP BY NOMBRE ARTÍCULO

PIVOT SECCIÓN

#Se selecciona lo que se quiere poner en las filas y se agrupa


(resaltado)

SELECT EMPRESA, POBLACIÓN, FORMADEPAGO


FROM CLIENTES INNER JOIN PEDIDOS ON
CLIENTE.CÓDIGOCLIENTES=PEDIDOS.CÓDIGOCLIENTE

## NO SE PUEDEN HACER REFERENCIAS CRUZADAS DE DOS TABLAS SI SE NECESITA


ESO; PRIMERO SE HACE UNA CONSULTA SE GUARDA; Y DE ESA CONSULTA SÍ SE HACE
LA REFERENCIA (PREVIA)

## CONSULTA SELECCIÓN CAMPOS A VISUALIZAR

TRANSFORM COUNT(POBLACIÓN) AS TOTAL_FORMAPAGO

SELECT EMPRESA

FROM PREVIA

GROUP BY EMPRESA

PIVOT FORMADEPAGO

#Se pueden colocar más de un campo en el group by

Create: Crear nuevas tablas y nuevas bases de datos.

Alter: Modifiar

Drop: Eliminar

Truncate: Borrar todas las filas

CREATE TABLE PRUEBA (NOMBRE VARCHAR(20))

CREATE TABLE PRUEBA (NOMBRE TEXT(20))##PARA ACCESS

DROP TABLE prueba ## para eliminar una table

CREATE TABLE PRUEBA1 (id_alumno COUNTER, NOMBRE TEXT(20), APELLIDO


TEXT(20), EDAD BYTE, FECHA_NACIMIENTO DATE, CARNÉ BIT)# PARA ACCESS

CREATE TABLE PRUEBA1 (id_alumno FLOAT, NOMBRE VARCHAR(20), APELLIDO


VARCHAR(20), EDAD TINYINT, FECHA_NACIMIENTO DATE, CARNÉ BOOL)

MODIFICACIÓN DE TABLAS

ALTER TABLE CLIENTES_MADRID ADD COLUMN FECHA_BAJA DATE

alter table prueba1 drop column NOMBRE

ALTER TABLE CLIENTES_MADRID ALTER COLUMN FECHA_BAJA DATE #CAMBIAR FORMATO


A LA COLUMNA

ALTER TABLE prueba1 alter column LUGAR_NACIMIENTO SET DEFAULT


'desconocido'

ALTER TABLE prueba1 alter column LUGAR_NACIMIENTO DROP DEFAULT

#INSERTA FILAS!!!

INSERT INTO clientes (CÓDIGOCLIENTE, DIRECCIÓN, EMPRESA) VALUES("CT50",


"CASABLANCA", "JAVIERMARIÑO")

###índices###
Sirven para hacer busquedas con mayor rapidez

Indices de clave primaria (CADA VALOR ES ÚNICO, NO NULL)

Indices ordinaries (PERMITE DUPLICADOS, SÍ NULL)

Indices únicos (No permite duplicados, sí null)

Indices compuestos (Más de un campo, sí null, no repetidos)

#indices de clave primaria

CREATE TABLE EJEMPLO (DNI TEXT, NOMBRE TEXT, APELLIDO TEXT, EDAD NUMBER,
PRIMARY KEY (DNI))

Primary key es para poner la clave primaria

ALTER TABLE EJEMPLO ADD PRIMARY KEY (DNI) ## AGREGAR CLAVE UNICA A
POSTERIORI

CREATE INDEX MIINDICE ON EJEMPLO (APELLIDO)## AGREGAR INDICE ORDINARIO

CREATE UNIQUE INDEX MIINDICE ON EJEMPLO (APELLIDO) #CREAR INDICE ÚNICO

CREATE UNIQUE INDEX MIINDICE ON EJEMPLO (NOMBRE, APELLIDO) #INDICE


COMPUESTO

ELIMINAR INDICES

DROP INDEX MIINDICE ON EJEMPLO ## PARA BORRAR INDICE #BORRA INDICE


ORDINARIO

ALTER TABLE EJEMPLO DROP CONSTRAINT <NOMBRE CLAVE PRINICIPAL> ELIMINAR


CLAVE UNICA

ALTER TABLE EJEMPLO DROP PRIMARYKEY #EN MYSQL PARA BORRAR CLAVE UNICA

TRIGGERS

Para que se desencadene un evento. Evento es una acción que desencadena


cuando pasa algo.

Objeto que creas en la base de dato. Está asociado a la tabla.


Desencadena una acción cuando pasa algo en una tabla.

Cuando alguien inserte, update o elimine se desencandenará un evento.

Crear una table dónde queden los registros de datos insertados

Crear una table auxiliary

CREATE TABLE REG_PRODUCTOS (CÓDIGO ARTÍCULO VARCHAR(25), NOMBREARTÍCULO


VAR CHAR(20), PRECIO INT(4), INSERTADO DATETIME)

##EL trigger va a estar asociado a productos. Cuando se inserte (after)


en productos se va a generar una acción
CREATE TRIGGER PRODUCTOS_AI AFTER INSERT ON PRODUCTOS FOR EACH ROW INSERT
INTO REG_PRODUCTOS(CÓDIGOARTÍCULO, NOMBRE ARTÍCULO, PRECIO, INSERTADO)
VALUES (NEW.CÓDIGOARTÍCULO, NEW.NOMBREARTÍCULO, NEW.PRECIO, NOW())

INSERT INTO PRODUCTOS (CÓDIGOARTÍCULO, NOMBREARTÍCULO, PRECIO,


PAÍSODERÍGEN) VALUES(“AR75”, “PANTALÓN”, 50, “ESPAÑA)

TRIGGERS SE PUEDEN HACER CON UPDATE Y DELETE

CREATE PROCEDURE ACTUALIZAR(N_PRECIO INT, CÓDIGO VARCHAR(4)

UPDATE productos SET PRECIO=N_PRECIO WHERE CÓDIGOARTÍCULO=CÓDIGO

DELIMITER $$

CREATE PROCEDURE CALCULA_EDAD(AGNO_NACIMIENTO INT)

BEGIN

DECLARE AGNO_ACTUAL INT DEFAULT 2016;

DECLARE EDAD INT;

SET EDAD=AGNO_ACTUAL-AGNO_NACIMIENTO;

SELECT EDAD;

END;$$

DELIMITER;

CURRENTE_USER (FUNCIÓN QUE BOTA EL USUARIO QUE HIZO EL CAMBIO)

DELIMITER $

create TRIGGER revisión_precio before update on productos for each ROW

BEGIN

if (new.precio<0) THEN

set new.precio=0;

ELSEIF(new.precio>1000) THEN

SET NEW.PRECIO=1000 ; ##SE PODRÍA PONER NEW.PRECIO=OLD.PRECIO PARA DEJAR


EL MISMO PRECIO

END IF;

END;$

DELIMITER;

### VISTAS######

En access una vista es similar a una consulta

Create view <nombre> as

Select <>from <> where<>

## se pueden alterar con alter

También podría gustarte