Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
sql [2018/10/04 21:57] – lmachuca | sql [2025/06/16 19:14] (actual) – lmachuca | ||
---|---|---|---|
Línea 4: | Línea 4: | ||
* Información General - [[wp> | * Información General - [[wp> | ||
+ | * Cosas más específicas para Helpcom, por motor: [[f1: | ||
- | =====Expresiones | + | =====Expresiones |
+ | |||
+ | |||
+ | ==== Schemas ==== | ||
+ | Un schema es una unidad lógica estructural que reúne tablas, vistas y funciones. Un schema está bien definido en SQ93 y en PostgreSQL; en MySQL, un schema es equivalente a una base de datos. | ||
+ | |||
+ | <code sql> | ||
+ | CREATE SCHEMA helpcomschema OWNER usuario; -- crear un schema | ||
+ | GRANT USAGE ON SCHEMA helpcomschema TO usuario2; -- permitir conectar | ||
+ | DROP SCHEMA helpcomschema; | ||
+ | DROP SCHEMA helpcomschema CASCADE; -- bajar un schema y todos sus objetos. | ||
+ | </ | ||
+ | |||
+ | |||
+ | En PostgreSQL se muestra los schemas de una conexión con '' | ||
+ | |||
+ | En SQLite y MySQL no existe una forma estandarizada de mostrar los schemas de una conexión. | ||
==== Tablas ==== | ==== Tablas ==== | ||
Línea 24: | Línea 41: | ||
Por ejemplo: | Por ejemplo: | ||
- | < | + | < |
CREATE TABLE libro ( | CREATE TABLE libro ( | ||
- | isbn VARCHAR(20) NOT NULL, | + | isbn VARCHAR(20) NOT NULL UNIQUE, |
- | titulo | + | titulo |
- | | + | |
- | | + | |
- | | + | |
hardprint BOOLEAN, | hardprint BOOLEAN, | ||
hardcover BOOLEAN, | hardcover BOOLEAN, | ||
Línea 40: | Línea 57: | ||
< | < | ||
Table " | Table " | ||
- | Column | + | Column |
- | -----------+-----------------------+-----------+----------+--------- | + | ------------+-----------------------+-----------+----------+--------- |
- | | + | |
- | | + | |
- | author | + | author_id |
- | edicion | + | edicion_id |
- | anyo | + | año |
- | | + | |
- | | + | |
Indexes: | Indexes: | ||
" | " | ||
Línea 58: | Línea 75: | ||
En MySQL es posible recuperar la sentencia que creó una tabla con '' | En MySQL es posible recuperar la sentencia que creó una tabla con '' | ||
+ | En PostgreSQL, SQLite, etc, y en SQ92 no existe una sentencia directa para observar el schema. Aunque la tabla mostrada anteriormente se puede componer usando los registros del schema de sistema '' | ||
- | En lenguaje SQL no hay una forma estandarizada para listar tablas. En distintos motores existen distintos mecanismos. | + | <code sql> |
+ | select column_name, | ||
+ | from information_schema.columns | ||
+ | where table_catalog=' | ||
+ | </ | ||
- | ^ ^ PostgreSQL | ||
- | ^ | ||
- | ^ | ||
+ | Lo que resulta en la siguiente salida: | ||
- | ==== Mostrar ==== | + | < |
+ | | ||
+ | -------------+-------------------+------+-------+----------+----------------------- | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
- | La instrucción **SELECT** es para buscar información. | + | </ |
- | <code sql> | ||
- | SELECT campos | ||
- | FROM tablas | ||
- | WHERE (condicion1 [AND/OR] condicion2 [AND/ | ||
- | [ORDER BY orden [ASC/DESC] ] | ||
- | ; | ||
- | </ | ||
- | En la consulta: | ||
- | | + | **Mostrar |
- | * '' | + | |
- | * '' | + | |
- | | + | |
- | Ojo: Distintos | + | En lenguaje SQL no hay una forma estandarizada para listar tablas. En distintos |
- | **Ejemplos de búsquedas en bases de datos de Helpcom** | + | |
+ | | ||
+ | | ||
- | Buscar aquellos clientes en una tabla de clientes que pertenecen a cierta comuna: | + | En SQL92 se puede obtener |
- | < | + | |
- | | + | < |
- | WHERE cli_comuna LIKE '%comuna%' | + | select table_name, table_type |
+ | from information_schema.tables | ||
+ | where table_catalog=' | ||
</ | </ | ||
- | Top 5 de las comunas | + | Las tablas |
- | < | + | |
- | | + | **Eliminar una tabla** |
- | GROUP BY cli_comuna | + | |
- | ORDER BY cantidad DESC LIMIT 5 | + | < |
+ | DROP TABLE libro; -- eliminar si no hay depedencias | ||
+ | DROP TABLE libro CASCADE; -- eliminar la tabla, y todas sus filas y tablas dependientes. | ||
</ | </ | ||
- | Buscar todos aquellos folios | + | ==== Vistas ==== |
- | < | + | |
- | SELECT | + | Una vista es una tabla virtual cuya estructura calza la definición |
- | | + | |
+ | < | ||
+ | CREATE VIEW vista AS | ||
+ | SELECT | ||
+ | | ||
+ | | ||
+ | ; | ||
</ | </ | ||
- | Buscar todos los RUT de los clientes | + | Para que una vista esté definida, la consulta debe ser resoluble |
- | < | + | |
- | | + | **Eliminar una vista** |
- | WHERE cli_rut NOT REGEXP ' | + | |
+ | < | ||
+ | DROP VIEW vista; | ||
</ | </ | ||
- | Explicación del filtro: | ||
- | | REGEXP | + | ==== Funciones ==== |
- | | '' | + | |
- | | '' | + | |
- | | '' | + | |
- | | '' | + | |
- | | '' | + | |
- | || https:// | + | |
+ | :FIXME: TBD | ||
- | A veces tener comillas simples o dobles como parte de un campo puede causar errores en bases de datos de MySQL no sanitizadas. Busquemos todos los clientes que tengan comillas dobles en la dirección (cosas como O' | + | ==== Tipos de Datos ==== |
- | <code mysql> | + | |
- | SELECT cli_id, cli_rut, cli_direccion as nombre_antes, | + | |
- | WHERE cli_direccion LIKE ' | + | |
- | </ | + | |
- | ==== Agregar Datos==== | + | Los siguientes tipos de datos son globales en SQL: |
- | Las instrucciones | + | {| class=" |
+ | |- | ||
+ | ! INTEGER || Un número entero, con signo, de hasta 32 o 64 bits. || '' | ||
+ | |- | ||
+ | ! REAL || Un número flotante en rango de IEEE754 '' | ||
+ | |- | ||
+ | ! CHAR(n) | ||
+ | |- | ||
+ | ! TEXT || Un blob de tamaño variable, \\ parseado como texto **en el collation de la tabla**. || ''" | ||
+ | |- | ||
+ | ! BLOB || Un blob tratado como un binario. || | ||
+ | |- | ||
+ | |} | ||
- | <code mysql> | + | Cada motor agrega sus tipos de datos propios. Algunos tipos que son bastante comunes son '' |
- | INSERT INTO tablas VALUES | + | |
- | | + | |
- | ; | + | |
- | UPDATE | + | |
+ | ==== UDL ==== | ||
+ | |||
+ | :FIXME: TBD | ||
+ | |||
+ | |||
+ | ===== CRUD ===== | ||
+ | ==== Mostrar Registros ==== | ||
+ | |||
+ | La instrucción **SELECT** es para buscar información. | ||
+ | |||
+ | <code sql> | ||
+ | SELECT campos | ||
+ | FROM tablas | ||
WHERE (condicion1 [AND/OR] condicion2 [AND/ | WHERE (condicion1 [AND/OR] condicion2 [AND/ | ||
+ | [ORDER BY orden [ASC/DESC] ] | ||
; | ; | ||
- | |||
</ | </ | ||
En la consulta: | En la consulta: | ||
- | * '' | + | * '' |
- | * '' | + | * '' |
- | * '' | + | * '' |
+ | * '' | ||
- | **Ejemplos de búsquedas en bases de datos de Helpcom** | + | ==== Escribir Registros ==== |
- | Actualizar el nombre de una comuna mal escrita: | + | Las instrucciones **INSERT** y **UPDATE** agregan o actualizan información. |
- | <code mysql> | + | |
- | | + | |
- | SET cli_comuna = ' | + | |
- | WHERE cli_comuna = ' | + | |
- | </ | + | |
- | + | ||
- | Corregir todos los RUT con " | + | |
<code mysql> | <code mysql> | ||
- | | + | |
- | | + | (fila1),(fila2), ... |
- | </ | + | ; |
- | Cambiar las comillas normales por comillas tipográficas, | + | UPDATE tablas SET cambios... |
+ | WHERE (condicion1 [AND/OR] condicion2 [AND/ | ||
+ | ; | ||
- | <code mysql> | ||
- | UPDATE mae_clientes | ||
- | SET cli_direccion= replace(cli_direccion, | ||
- | WHERE cli_direccion LIKE ' | ||
</ | </ | ||
- | Marcar un grupo de folios de nota de crédito DTE como no impresos: | + | La sintaxis en general es la misma entre MySQL, PostgreSQL y SQLite. |
- | + | ||
- | <code mysql> | + | |
- | UPDATE dte_folios | + | |
- | SET fol_archivo_generado = ' | + | |
- | WHERE tdo_id = 61 AND fol_numero IN (101, 102, 104, 107, 109) | + | |
- | </ | + | |
+ | MySQL y SQLite permiten '' | ||
==== Eliminar Datos==== | ==== Eliminar Datos==== | ||
Línea 211: | Línea 242: | ||
====Motores==== | ====Motores==== | ||
- | * MySQL Server Community - https:// | + | |
+ | | ||
* PostgreSQL Server - http:// | * PostgreSQL Server - http:// | ||
* SQLite - https:// | * SQLite - https:// | ||
Línea 219: | Línea 251: | ||
====Gestores==== | ====Gestores==== | ||
- | * DBeaver Community - https:// | + | * [[: |
+ | * MySQL Query Browser (desahuciado en 2019). | ||
+ | * SQYog Community. | ||
+ | * MySQL Workbench. | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * SQLitebrowser | ||
- | DBeaver es un GUI (interface gráfica) para la gestión de base de datos en varios motores. Es abierto y multiplataforma basado en Java FX y está disponible en los recursos compartidos de Helpcom. Ofrecen descargas tanto para Linux como Windows. | + | =====Más Información===== |
- | Para la instalación ver [[Dbeaver]]. | + | Páginas que pueden tener información relacionada: |
- | * MySQL Query Browser | + | {{topic> |
- | * MySQL Workbench | + | |
- | Query Browser es un GUI (interface gráfica) para la consulta de base de datos MySQL Server 4.1 a 5.5. MySQL Workbench es el sucesor de Query Browser y soporta modelos de bases de datos de MySQL 5.1 a 8.x, y está disponible en Linux en el gestor de paquetes con un nombre como '' | + | {{topic>mysql}} |
- | + | ||
- | Para la instalación ver [[Query Browser]]. | + | |
- | + | ||
- | * '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | * '' | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | * SQLitebrowser | + | |
- | SQLitebrowser es una interface gráfica para crear, gestionar y respaldar archivos de base de datos en SQLite2 (no en SQLite3). En Linux está disponible con el nombre de paquete '' | + | {{topic> |