Introducción rápida a SQL

Post on 14-Dec-2014

1.346 views 0 download

description

Curso de introducción a SQL utilizando MySQL y Workbench.

Transcript of Introducción rápida a SQL

Introducción rápida a SQLUsando MySQL y Workbench

Carlos Hernando Carasolchernando@acm.org

5 y 9 de Mayo de 2011

Índice de contenidos

Introducción a las bases de datosIntroducción a MySQLSintaxis de SQL

Uso de MySQL Worbench

Advertencia

Esto no es un curso formal en teoríaEs una introducción rápida y sucia de SQLBasado en el temario del curso: MySQL for Developers

Introducción a las bases de datos

Conceptos

EntidadAtributo, una propiedad de la EntidadRegistro, una fi la que representa la Entidad con sus atributosTabla, una sucesión de registros tabulados por sus atributos de un mismo tipo de Entidad

Conceptos

Base de datos, conjunto de Tablas

Servidor, lugar dónde residen las Bases de DatosBases de datos relacionalesSQL, Structured Query Language

DDL, Data Defi nition LanguageDML, Data Manipulation Language

Introducción a MySQL

Servidor MySQL

Http://www.mysql.com/Comprado por OracleDisponible gratuitamenteMuy extendido

Estructura Cliente / Servidor

El servidor mantiene las bases de datosEl cliente realiza operaciones mediante sentencias SQL.La principal carga de trabajo recae en el servidor.

Instalación de MySQL

ServidorMySQL Community Serverhttp://www.mysql.com/downloads/mysql/

El CCFI ya ha instalado el servidor pero no está activado

MySQL Workbench

Herramienta de gestión, consulta y diseñohttp://wb.mysql.com/Lo utilizaremos como apoyo

Sintaxis SQL

Tipos de sentencias

De consulta:SHOWDESCSELECT

De manipulación:CREATEINSERTUPDATEALTER

Obtener información de una tabla

SHOW TABLESDESC tabla

http://dev.mysql.com/doc/refman/5.1/en/describe.html

QuerySELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]

[HAVING where_condition]

[ORDER BY {col_name | expr | position}

[ASC | DESC], ...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

[PROCEDURE procedure_name(argument_list)]

[INTO OUTFILE 'file_name'

[CHARACTER SET charset_name]

export_options

| INTO DUMPFILE 'file_name'

| INTO var_name [, var_name]]

[FOR UPDATE | LOCK IN SHARE MODE]]

http://dev.mysql.com/doc/refman/5.1/en/select.html

Condicionales

expr OR expr | expr || expr | expr XOR expr | expr AND expr | expr && expr | NOT expr | ! expr | boolean_primary IS [NOT] {TRUE | FALSE | UNKNOWN} | boolean_primary

comparison_operator: = | >= | > | <= | < | <> | !=

predicate: bit_expr [NOT] IN (subquery) | bit_expr [NOT] IN (expr [, expr] ...) | bit_expr [NOT] BETWEEN bit_expr AND predicate | bit_expr SOUNDS LIKE bit_expr | bit_expr [NOT] LIKE simple_expr [ESCAPE simple_expr] | bit_expr [NOT] REGEXP bit_expr | bit_expr

http://dev.mysql.com/doc/refman/5.1/en/expressions.html

Funciones

AVG()CONCAT()COUNT()CURRENT_DATE()IF()TRIM()LOWER()

http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html

Union

Agregación de tablasMismas columnas

SELECT ...UNION [ALL | DISTINCT] SELECT ...[UNION [ALL | DISTINCT] SELECT ...]

Creación de una base de datos

CREATE DATABASE curso;

Fijar la base de datos

Un servidor puede alojar múltiples bases de datosLas operaciones SQL pueden referirse a cualquiera de estas tablasPara utilizar una base de datos en concreto utilizamosUSE pruebas;

Destruir una base de datos

DROP DATABASE pruebas;

Cargar y guardar volcados

Base de datos � FicheroMySQLdump

Fichero � Base de datosEjecutar sentencias SQL

Creación de una tabla

CREATE TABLE `jugador` ( `id` int(11) NOT NULL, `nombre` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1

Propiedades de una tabla

Tipo de ENGINEMyISAMInnoDB

CharsetLatin1UTF8

Tipos de datos

NuméricosCadenasBinariosTiempo

Numéricos

EnterosTINYINTINTBIGINT

Coma fl otanteFLOAT

Coma fi jaDECIMAL

http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

Cadenas

CHARVARCHARBLOBENUMSET

http://dev.mysql.com/doc/refman/5.1/en/string-types.html

Binarios

BINARYVARBINARY

http://dev.mysql.com/doc/refman/5.1/en/binary-varbinary.html

Tiempo

DATETIMEDATETIMETIMESTAMPYEAR

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html

Tipos de datos (de nuevo) BIT[(length)] | TINYINT[(length)] [UNSIGNED] [ZEROFILL] | SMALLINT[(length)] [UNSIGNED] [ZEROFILL] | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] | INT[(length)] [UNSIGNED] [ZEROFILL] | INTEGER[(length)] [UNSIGNED] [ZEROFILL] | BIGINT[(length)] [UNSIGNED] [ZEROFILL] | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL] | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL] | DATE | TIME | TIMESTAMP | DATETIME | YEAR

| CHAR[(length)]

[CHARACTER SET charset_name] [COLLATE collation_name]

| VARCHAR(length)

[CHARACTER SET charset_name] [COLLATE collation_name]

| BINARY[(length)]

| VARBINARY(length)

| TINYBLOB

| BLOB

| MEDIUMBLOB

| LONGBLOB

| TINYTEXT [BINARY]

[CHARACTER SET charset_name] [COLLATE collation_name]

| TEXT [BINARY]

[CHARACTER SET charset_name] [COLLATE collation_name]

| MEDIUMTEXT [BINARY]

[CHARACTER SET charset_name] [COLLATE collation_name]

| LONGTEXT [BINARY]

[CHARACTER SET charset_name] [COLLATE collation_name]

| ENUM(value1,value2,value3,...)

[CHARACTER SET charset_name] [COLLATE collation_name]

| SET(value1,value2,value3,...)

[CHARACTER SET charset_name] [COLLATE collation_name]

| spatial_type

NULL y valores de fábrica

NULL | NOT NULLDEFAULT 'valor'

Alterar una tabla

ALTER TABLE jugador ADD COLUMN universo VARCHAR(20) NOT NULL AFTER nombre;

ALTER TABLE jugador DROP COLUMN universo;

ALTER TABLE jugador ADD KEY universo;

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Eliminar una tabla

DROP TABLE jugador;

Foreign Keys

En tiempo de creación: REFERENCES tbl_name (index_col_name,...) [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE] [ON DELETE reference_option] [ON UPDATE reference_option]

http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

Foreign Keys

Una vez creada la tabla:ALTER TABLE jugador ADD FOREIGN KEY index_name (index_col_name) reference_defi nition

CASCADE

ON UPDATEON DELETE

INSERT

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]

DELETE

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

UPDATE

UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

REPLACE

REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

INSERT ON DUPLICATE KEY

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

TRUNCATE

TRUNCATE [TABLE] tbl_name

Transacciones

START TRANSACTION [WITH CONSISTENT SNAPSHOT] | BEGIN [WORK]COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]SET autocommit = {0 | 1}

LOCK

LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name [[AS] alias] lock_type] ...

lock_type: READ [LOCAL] | [LOW_PRIORITY] WRITE

UNLOCK TABLES

Consultas a múltiples tablas

JOINSubquery

JOIN

SELECT t1.name, t2.salary FROM employee t1 INNER JOIN info t2 ON t1.name = t2.name

SELECT t1.name, t2.salay FROM employee t1, info t2 WHERE t1.name = t2.name

Tipos de JOIN

table_reference [INNER | CROSS] JOIN table_factor [join_condition] | table_reference STRAIGHT_JOIN table_factor | table_reference STRAIGHT_JOIN table_factor ON conditional_expr | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor

Subqueries

SELECT * FROM t1 WHERE column1 =(SELECT column1 FROM t2);

Vistas

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

Procedimientos

CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body

Triggers

CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body

Caso práctico

Ejercicio

Crear las tablas del siguiente diagramaCrear las vistas asociadas (SELECT)Insertar una Notifi cación al insertar una nueva tarea (TRIGGER)Crear un procedimiento “tarea_notifi cada” (STORED PROCEDURE) que elimine la notifi cación y ponga la tarea en el estado “progreso”

Diseño orientativo