WEBVTT

00:00.000 --> 00:03.980
Tienes que aprender sobre bases de datos, y lo
tienes que hacer ahora, y por ahora me refiero allÃ¡

00:04.240 --> 00:09.160
Las bases de datos son fundamentales, no solamente en
ciberseguridad, sino siendo sinceros en cualquier Ã¡rea tÃ©cnica

00:09.460 --> 00:13.360
ya que mismamente esta plataforma que estÃ¡s
usando para ver este video usa una base de datos

00:13.620 --> 00:18.460
Y conocer realmente cÃ³mo funcionan estas tecnologÃ­as
es algo fundamental, principalmente para ciberseguridad

00:18.580 --> 00:25.860
en cualquier dominio al que te vayas a dedicar. Esto es obligatorio, viejo. Por lo que en
este video vas a ver quÃ© es una base de datos, cÃ³mo funcionan, quÃ© elementos la componen

00:25.960 --> 00:31.280
y sobre todo, cÃ³mo hacer consultas dentro de dicha base de
datos. entendiendo siempre el trasfondo y lo que estÃ¡s haciendo

00:31.280 --> 00:35.920
porque aquÃ­ la intenciÃ³n no es que lances clÃ¡usulas de SQL
a lo loco es que realmente comprendas lo que estÃ¡s haciendo

00:35.920 --> 00:41.500
asÃ­ que mi recomendaciÃ³n toma un lÃ¡piz, toma un papel y
dedÃ­cale tiempo a este video las veces que sean necesarias

00:41.500 --> 00:45.220
repÃ­telo las veces que quieras para que de esta
forma puedas integrar bien estos conocimientos

00:45.220 --> 00:49.960
pero antes, te presento al patrocinador de este
video algo que le falta a la mayorÃ­a de pentesters

00:49.960 --> 00:55.780
o meramente personas que se quieran dedicar a ciberseguridad es el
poder crear mÃºltiples perfiles diferentes dentro de su propio navegador

00:55.780 --> 00:59.820
para que asÃ­ puedan por ejemplo interactuar con una
web y enviarle la huella digital que ellos desean

01:00.000 --> 01:05.620
Y por eso te quiero hablar de Octobowser. Y tÃº me dirÃ¡s, ya estÃ¡ quiÃ©n
es. Octobowser es un navegador que permite crear mÃºltiples perfiles

01:05.900 --> 01:12.440
Y tÃº me dirÃ¡s, Â¿y quÃ© es un perfil? Pues bÃ¡sicamente es una instancia dentro
del navegador, a la que le puedes configurar una IP Ãºnica, un user agent Ãºnico

01:12.720 --> 01:17.000
y las configuraciones que desees. Solo que dichas
configuraciones se van a aplicar solamente a dicho perfil

01:17.180 --> 01:24.300
por lo que tÃ©cnicamente puedes tener mÃºltiples navegadores dentro de uno solo,
consiguiendo asÃ­ que si eres pentester puedes auditar el activo que estÃ©s auditando

01:24.300 --> 01:31.760
desde diferentes contextos, sin que por ejemplo tengas que usar mÃºltiples navegadores. o
meramente el modo incÃ³gnito. O tambiÃ©n si eres una persona que le preocupa su ciberseguridad

01:31.980 --> 01:39.320
perfectamente puedes crearte un perfil mÃ¡s privado y usarlo solamente en los momentos que
quieras navegar en sitios web que no conoces. Y nosotros desde Hickseq hablamos con Octobowser

01:39.320 --> 01:43.260
para obtener una oferta especial para ustedes,
que bÃ¡sicamente son 4 dÃ­as de acceso gratuito

01:43.260 --> 01:47.600
a esta herramienta, y las primeras 20 personas
recibirÃ¡n, ademÃ¡s de esto, 100 perfiles inmediatamente

01:47.820 --> 01:51.460
que pueden usar por esos 4 dÃ­as gratuitos. E
importante, para que esta promociÃ³n te aplique

01:51.460 --> 01:55.400
tienes que usar el cÃ³digo XLMAX o meramente
acceder desde el enlace que tendrÃ¡s en la

01:55.400 --> 01:59.740
descripciÃ³n y en el comentario fijado. Dicho esto,
gracias a Autorowser por patrocinar este video

01:59.980 --> 02:10.039
Ahora sÃ­, continuemos. Muy bien, empecemos por lo bÃ¡sico,
que es una base de datos. Una base de datos es un sistema

02:10.039 --> 02:19.340
organizado para el almacenamiento, gestiÃ³n y recuperaciÃ³n de informaciÃ³n. Mismamente,
esta plataforma desde donde ves este curso usa por lo menos una base de datos. Pero bien

02:19.420 --> 02:26.840
no nos quedemos solamente en quÃ© es. AquÃ­ lo importante es saber cÃ³mo funciona. Para entender
cÃ³mo funciona una base de datos, podemos compararla con un sistema de archivo. En este

02:26.840 --> 02:31.080
sistema la informaciÃ³n se almacena en tablas, que
podrÃ­amos visualizar como cajones de ese archivo

02:31.300 --> 02:36.320
Cada cajÃ³n, o tabla, contiene informaciÃ³n que
puede estar, o no, relacionada entre sÃ­. Por ejemplo

02:36.600 --> 02:40.260
una tabla podrÃ¡ contener informaciÃ³n sobre
clientes, mientras que otra podrÃ¡ contener

02:40.260 --> 02:44.640
informaciÃ³n sobre los empleados de esa empresa.
Ahora, esta informaciÃ³n estÃ¡ almacenada dentro

02:44.640 --> 02:48.500
de una tabla de una forma en especÃ­fico, y
concretamente se hace a travÃ©s de registros

02:48.500 --> 02:52.880
y de columnas, registros de forma horizontal
y columnas de forma vertical. O dicho de otra

02:52.880 --> 02:56.900
forma, cada fila en una tabla representa un
registro, que es el conjunto Ãºnico de datos

02:56.900 --> 03:00.460
relacionados entre sÃ­. Siguiendo con nuestro
ejemplo, una fila en la tabla de clientes

03:00.460 --> 03:03.980
podrÃ­a contener toda la informaciÃ³n relacionada
con un cliente en especÃ­fico, mientras que

03:03.980 --> 03:08.280
por otro lado las columnas de la tabla representan
esos diferentes campos, concretamente esos

03:08.280 --> 03:12.020
campos que definen quÃ© informaciÃ³n se va
a almacenar en cada registro, como digamos

03:12.020 --> 03:15.680
el nombre del cliente, su direcciÃ³n, su nÃºmero
de telÃ©fono, si le clava el vistazo a la

03:15.680 --> 03:19.780
que le gusta, etc. Dicho de una forma mucho
mÃ¡s simple, si tenemos tres columnas, digamos

03:19.780 --> 03:24.700
nombre, apellido y estado civil, estas columnas,
las verticales, definen quÃ© informaciÃ³n

03:24.700 --> 03:29.020
se va a almacenar en cada una de ellas, mientras
que los registros, los horizontales, son como

03:29.020 --> 03:32.700
tal los datos relacionados entre sÃ­ de una
misma entidad, datos puestos en cada columna

03:32.920 --> 03:36.920
Al tener cada dato rellenado en cada columna, se
forma el registro, y asÃ­ pueden haber muchos

03:36.920 --> 03:40.960
mÃ¡s datos dentro de cada columna, que de forma
horizontal corresponderÃ­an a cada registro

03:41.100 --> 03:44.940
Ahora, para poder interactuar con una base
de datos, es decir, para aÃ±adir, modificar

03:44.940 --> 03:49.740
eliminar o consultar informaciÃ³n, se usa un
lenguaje llamado SQL. SQL son las siglas de

03:49.740 --> 03:54.420
Structured Query Language, inglÃ©s de Cambridge,
papÃ¡. Y este lenguaje es el que hace de nexo entre

03:54.420 --> 03:59.060
nosotros y la base de datos. Es decir, traduce
nuestras consultas a un lenguaje que la base de

03:59.060 --> 04:03.320
datos puede comprender, de esa forma ejecutÃ¡ndolo
y dÃ¡ndonos la informaciÃ³n. Un ejemplo muy simple

04:03.320 --> 04:08.060
de esto, que indagaremos al 100% en el futuro,
pero como spoiler, que es SelectNombreFromClientes

04:08.420 --> 04:12.220
Con esta clÃ¡usula le estamos pidiendo que nos
seleccione todos los registros, que estÃ©n dentro

04:12.220 --> 04:16.200
de la columna nombre, y que a su vez esta
columna estÃ© en la tabla clientes. Por lo

04:16.200 --> 04:19.740
que al ejecutar esto, la base de datos se
va a ir a la tabla clientes, va a irse a la

04:19.740 --> 04:24.140
columna nombres, va a tomar todos esos registros
y nos los va a devolver. Y obviamente la velocidad

04:24.140 --> 04:28.540
a la que lo haga dependerÃ¡ principalmente del
nÃºmero de registros que tenga que devolvernos

04:28.720 --> 04:32.480
Y ya por Ãºltimo, ten en cuenta que tenemos
varios tipos de bases de datos. Bueno, varios

04:32.660 --> 04:36.860
hay dos. Y cada uno estÃ¡ diseÃ±ado para diferentes
necesidades, a nivel del almacenamiento y

04:36.860 --> 04:40.900
gestiÃ³n de los datos. Y estas son las bases
de datos relacionales y las no relacionales

04:40.900 --> 04:44.640
En este curso indagaremos principalmente en
las relacionales, porque son las mÃ¡s comunes

04:44.820 --> 04:50.960
y son las que principalmente te vas a conseguir. A nivel de, por ejemplo, estar
testeando si existen inyecciones SQL en la aplicaciÃ³n web que estÃ©s auditando

04:51.180 --> 04:57.900
Ojo, esto no quiere decir que no existan inyecciones no SQL, que tambiÃ©n existen.
Y no es que como tal nunca vayas a toparte con bases de datos no relacionales

04:58.080 --> 05:01.880
Pero como te digo, en este caso indagaremos solamente
en las relacionales, por lo menos en este curso

05:02.080 --> 05:07.620
Pero bien, Â¿quÃ© diferencias existen entre una y otra? Brevemente,
las bases de datos relacionales organizan los datos en tablas

05:07.820 --> 05:13.620
que estÃ¡n relacionadas entre sÃ­, como el ejemplo que pusimos antes.
Adicionalmente, este tipo de bases de datos usa el lenguaje SQL

05:13.620 --> 05:17.760
El que tambiÃ©n comentamos antes Y se usan
principalmente para datos que ya estÃ¡n estructurados

05:17.760 --> 05:23.120
Y un ejemplo claro de sistemas gestores de
bases de datos Es MySQL o MySQL o MySQL

05:23.120 --> 05:28.920
O MySQL, como le quiere decir papÃ¡ PostgreSQL o SQLite
Que si lo pronunciamos a lo ponquecito es SQLite

05:28.920 --> 05:33.440
SÃ­, puede malinterpretarse Ahora, por otro
lado, estÃ¡n las bases de datos no relacionales

05:33.440 --> 05:37.920
O no SQL Donde aquÃ­ la arquitectura es mucho
mÃ¡s flexible Que en una base de datos relacional

05:37.920 --> 05:43.560
Adicionalmente que pueden almacenar datos en otros
formatos mÃ¡s variados, digamos JSON, BSON y demÃ¡s

05:43.820 --> 05:48.260
Y una de las diferencias mÃ¡s resaltables es que aquÃ­
no se utiliza el lenguaje SQL para hacer las consultas

05:48.500 --> 05:53.600
Aunque sÃ­ es verdad que en algunos casos se ofrecen variantes
o lenguajes de consultas similares, pero como tal no es SQL

05:53.880 --> 05:58.800
ya que como tal aquÃ­ las consultas se hacen principalmente
a travÃ©s de APIs o lenguajes de consultas especÃ­ficos

05:59.000 --> 06:03.320
que estÃ¡n adaptados al tipo de estructura de datos,
que tiene este tipo de base de datos, muchos datos

06:03.500 --> 06:09.900
Ya que como tal este tipo de base de datos estÃ¡ diseÃ±ada para ser
escalable, soportando asÃ­ un volumen de datos bastante alto, si aplicase

06:10.100 --> 06:15.820
Y ejemplos de sistemas gestores de bases de datos que usan
este modelo pueden ser MongoDB, Cassandra o Coaches Database

06:16.000 --> 06:23.460
Pero como te digo, en este curso principalmente vamos a ver bases de datos relacionales,
y no tanto las no relacionales, porque aquÃ­ apoyaremos siempre las relaciones, papÃ¡

06:23.540 --> 06:27.440
Aunque ten en cuenta que no es que una sea mejor que
otra, simplemente se usan para propÃ³sitos diferentes

06:27.740 --> 06:38.560
AsÃ­ que con esto explicado, continuemos. Muy bien, indaguemos ahora un poco mÃ¡s
sobre las tablas, las columnas, los registros y en este caso tambiÃ©n los datos

06:38.920 --> 06:42.840
Porque sÃ­, lo explicamos en la clase pasada. Pero
es importante que tengas claros estos conceptos

06:42.980 --> 06:47.900
AdemÃ¡s que son sÃºper simples, viejo. Repasando. Una base
de datos se divide prÃ¡cticamente en un conjunto de tablas

06:48.120 --> 06:53.420
Y las tablas tambiÃ©n se dividen. En este caso en columnas.
O campos. Donde a medida que se van almacenando datos

06:53.720 --> 06:57.300
Dentro de cada una de estas columnas.
Se crea por daÃ±o colateral un registro

06:57.500 --> 07:01.260
Como te expliquÃ© antes. Las columnas son
verticales. Los registros son horizontales

07:01.260 --> 07:04.780
Y la tabla es la uniÃ³n de las columnas
y los registros. Y adicionalmente

07:05.020 --> 07:08.560
Cada informaciÃ³n que estÃ¡ almacenada en
cada registro. Y en cada columna. es un dato

07:08.720 --> 07:13.540
Por lo que dicho de otra forma, las columnas, los
registros, las tablas y en general las bases de datos

07:13.540 --> 07:17.540
son simplemente un conjunto de datos
organizados, como yo te lo expliquÃ© antes

07:17.680 --> 07:22.160
Y te digo, en este tipo de cursos lo principal es que
vayamos a la parte prÃ¡ctica y por eso no voy a redundar

07:22.160 --> 07:25.660
tanto en este tema porque realmente es muy
simple de entender. Pero sÃ­ querÃ­a puntualizar

07:25.660 --> 07:29.460
concretamente en estos conceptos porque a lo
largo del curso voy a estar refiriÃ©ndome a tablas

07:29.620 --> 07:33.960
columnas, registros y datos. Y no quiero que tÃº te quedes
como bueno, quiero una columna porque si es asÃ­ papÃ¡

07:34.060 --> 07:39.380
pues te mando a la policÃ­a. Ahora, entendiendo esto,
ComprenderÃ¡s que una base de datos puede tener mÃºltiples tablas

07:39.380 --> 07:44.060
Tablas que a su vez pueden contener sus propias columnas Pero
estas tablas pueden llegar a estar relacionadas entre sÃ

07:44.060 --> 07:48.220
Y se relacionan precisamente a travÃ©s de alguna
columna Cuyos datos puedan compartir entre sÃ

07:48.220 --> 07:53.320
Para de cierta forma sincronizar la informaciÃ³n Dicho de
otra forma Mientras mÃ¡s compleja sea una base de datos

07:53.320 --> 07:57.980
VerÃ¡s que mÃ¡s tablas va a tener Esto es evidente Pero
tiene un motivo Y es que mientras mÃ¡s tablas tenga

07:57.980 --> 08:01.920
MÃ¡s se puede dividir la informaciÃ³n De forma
que sea mucho mÃ¡s prÃ¡ctico poder acceder a ella

08:01.920 --> 08:15.863
O lo que es igual No es lo mismo que por ejemplo una base de datos de una empresa tenga solamente una tabla que tenga m columnas para almacenar toda la
informaci Esto realmente casi nunca lo vas a ver Lo que posiblemente en entornos realistas te consigas Va a hacer que estas columnas se agrupan en m tablas

08:15.863 --> 08:19.443
Donde cada una de estas tablas va a
almacenar un tipo especÃ­fico de informaciÃ³n

08:19.443 --> 08:24.283
Y por ende, como es informaciÃ³n que puede llegar
a estar relacionada entre sÃ­ Existe otro concepto

08:24.283 --> 08:29.203
Que son las relaciones entre tablas Siguiendo con el
ejemplo Digamos que tenemos una tabla de proyectos

08:29.203 --> 08:33.163
Y una tabla de clientes En este caso estas
dos tablas pueden estar relacionadas entre sÃ

08:33.163 --> 08:38.123
y pueden estar relacionados a travÃ©s de, por ejemplo, el
campo de ID del cliente, dentro de la tabla de proyectos

08:38.323 --> 08:44.423
Para que de esta forma, si nosotros queremos ver cuÃ¡ntos proyectos tiene un
cliente asignado, simplemente tendrÃ­amos que filtrar por la tabla de proyectos

08:44.643 --> 08:49.023
pidiendo toda la informaciÃ³n, pero diciendo que
solamente nos devuelva las que tengan el ID del cliente

08:49.143 --> 08:53.583
del cual queremos consultar. Y para que todo esto sea
posible, como te dije, existe el concepto de claves

08:53.883 --> 09:00.383
o en algunos casos le pueden llamar
llaves. AsÃ­ que continuemos. Muy bien

09:00.383 --> 09:05.263
Hablemos ahora de la diferencia principal entre un
sistema gestor de bases de datos y una base de datos

09:05.263 --> 09:09.003
Porque mucha gente suele confundir estos
tÃ©rminos Pero tÃº estÃ¡s en GIGSEC, mi rey

09:09.003 --> 09:18.023
Y de aquÃ­ vas a poder salir de muchas formas, pero no confundido A ver, un sistema gestor de
bases de datos es un software diseÃ±ado para crear, administrar y operar una base de datos

09:18.023 --> 09:22.723
PiÃ©nsalo asÃ­ como el conjunto de herramientas y tÃ©cnicas
que se utilizan para procesar y organizar los datos

09:22.723 --> 09:26.423
BÃ¡sicamente, es este software que le
permite a los usuarios, como tÃº como yo

09:26.423 --> 09:30.083
Y a otros programas externos poder
interactuar con la base de datos en cuestiÃ³n

09:30.083 --> 09:33.703
A travÃ©s de, por ejemplo, el lenguaje SQL
Usando para esto, por ejemplo, clÃ¡usulas

09:33.703 --> 09:38.143
De este lenguaje Por otro lado, una base de
datos es una colecciÃ³n organizada de datos

09:38.143 --> 09:41.643
Como ya lo vimos antes Datos que estÃ¡n
organizados en tablas y columnas

09:41.643 --> 09:46.023
Como tambiÃ©n lo vimos antes De manera que un sistema
gestor de bases de datos puede acceder a estos

09:46.023 --> 09:50.303
Y bÃ¡sicamente los pueda gestionar En vez a las
Ã³rdenes que nosotros o programas de terceros le demos

09:50.303 --> 09:56.063
En pocas palabras, viejo La base de datos es el almacÃ©n de la
informaciÃ³n Mientras que el sistema gestor de bases de datos

09:56.063 --> 10:00.063
Es la interfaz a travÃ©s de la cual interactuamos
con ese almacÃ©n Por ponerte otro ejemplo

10:00.063 --> 10:04.383
mÃ¡s simple de entender. Una base de datos serÃ­a
la biblioteca, y el sistema gestor de bases de

10:04.383 --> 10:08.763
datos serÃ­a el bibliotecario, el cual tenemos
amenazado, y tiene que seguir nuestras Ã³rdenes

10:09.023 --> 10:12.583
o le va a ir mal. Ahora, existen varios tipos
de sistemas de gestiÃ³n de bases de datos

10:12.803 --> 10:19.723
donde cada uno estÃ¡ diseÃ±ado para trabajar con diferentes tipos de bases de datos,
dependiendo del contexto. Y estos sistemas gestores de bases de datos pueden ser tanto

10:19.723 --> 10:23.463
para bases de datos relacionales como no
relacionales, y son los que vimos antes

10:23.723 --> 10:28.343
por ejemplo, MySQL, PostgreSQL, u otros que
no mencionamos, por ejemplo el de Oracle

10:28.343 --> 10:32.603
o meramente el de Microsoft. Pero con lo que realmente
quiero que te quedes es que, por ejemplo, si dices

10:32.603 --> 10:36.703
tengo una base de datos MySQL o MySQL
o MySQL o como le quieras decir, viejo

10:36.843 --> 10:41.283
Al decir esto, pues realmente no es errÃ³neo y se puede
llegar a entender lo que estÃ¡s tratando de expresar

10:41.423 --> 10:45.563
Pero que tengas en cuenta, para ese Ãºltimo caso,
para esa afirmaciÃ³n, lo correcto serÃ¡ decir

10:45.563 --> 10:49.703
tengo una base de datos en el sistema
gestor de bases de datos MySQL o MySQL

10:49.943 --> 10:54.263
O bueno, no voy a decir todas las variantes que tiene ese nombre.
Y algo importante, el lenguaje que vamos a ver en este curso

10:54.263 --> 10:58.203
es el lenguaje SQL y este lenguaje es
global para todas las bases de datos

10:58.203 --> 11:03.263
que son relacionales. Es decir, el lenguaje
MySQL no existe, ni tampoco existe el lenguaje

11:03.263 --> 11:10.603
MariaDB, eso no existe. Por eso es que te digo que no hay que confundir sistemas gestores de
bases de datos con bases de datos, ni con el lenguaje de consultas que usamos para interactuar

11:10.603 --> 11:14.303
con dichos datos, que en este caso es SQL.
Porque a pesar de que todos estos elementos

11:14.303 --> 11:18.263
interactÃºan entre sÃ­, en esencia no son
exactamente lo mismo, y esto es importante

11:18.263 --> 11:27.283
entenderlo. AsÃ­ que con esto explicado, continuemos.
Muy bien, hablemos ahora del lenguaje SQL

11:27.283 --> 11:32.463
SQL son las siglas de Structured Query Language O lenguaje
de consulta estructurada, viejo, no nos compliquemos

11:32.463 --> 11:36.623
Y este es un lenguaje que hace de nexo entre
nosotros y el sistema gestor de bases de datos

11:36.623 --> 11:41.003
Para a travÃ©s de las consultas que le enviamos en este
lenguaje Realizar acciones en especÃ­fico a los datos

11:41.003 --> 11:45.583
Que estÃ¡n a su vez dentro de estas bases de datos Que estÃ¡n
a su vez dentro de los sistemas gestores de bases de datos

11:45.583 --> 11:50.663
Muchos datos Originalmente SQL fue
desarrollado en 1970 Por investigadores de IBM

11:50.663 --> 11:54.583
IBM en esa Ã©poca, para que entiendas, era
Jesucristo Ahora mismo no es que no sea buena

11:54.583 --> 11:59.903
Sino que pasÃ³ de ser Jesucristo al padre de tu
parroquia Pero bueno, ellos desarrollaron ese cuel

11:59.903 --> 12:03.523
Y este lenguaje se basa en los principios
del modelo relacional propuesto por Edgar Cod

12:03.523 --> 12:08.943
A lo que tÃº dirÃ¡s, Â¿quiÃ©n es este compa? Pues fÃ­jate, el compa Cod
fue un matemÃ¡tico Que incursionÃ³ tambiÃ©n en el mundo de la computaciÃ³n

12:08.943 --> 12:15.583
Y para no entrar en relleno Este compa propuso el uso de las relaciones
Para representar los datos y definir la estructura de una base de datos

12:15.583 --> 12:20.823
De una forma mÃ¡s organizada y lÃ³gica Lo que permitÃ­a en este
caso un almacenamiento, recuperaciÃ³n y manipulaciÃ³n de los datos

12:20.823 --> 12:24.323
De una forma mÃ¡s intuitiva y eficiente
Que con la que se trabajaba en ese entonces

12:24.323 --> 12:29.343
BÃ¡sicamente, este compa querÃ­a buscar hacer mÃ¡s
eficiente La forma de interactuar con una base de datos

12:29.343 --> 12:35.543
A lo que IBM, en base a lo que Code propuso, creÃ³ el lenguaje SQL Y
como podrÃ¡s intuir cÃ³mo estÃ¡ basado en este modelo que propuso Code

12:35.543 --> 12:39.943
Funciona principalmente sistemas gestores de bases
de datos A nivel de bases de datos relacionales

12:39.943 --> 12:47.143
Porque precisamente este fue el paradigma que propuso Code Pero bueno, volvamos a la
actualidad SQL como tal es catalogado en muchos casos como un lenguaje de programaciÃ³n

12:47.143 --> 12:51.303
y en cierto aspecto sÃ­ puede ser clasificado
como tal. Fuera de aquÃ­ HTML, tÃº no

12:51.383 --> 12:56.043
Pero la forma mÃ¡s precisa de describirlo es como un
lenguaje de manejo o de manipulaciÃ³n de bases de datos

12:56.043 --> 13:00.023
y no tanto como un lenguaje que estÃ¡ diseÃ±ado
para construir aplicaciones o sistemas de software

13:00.183 --> 13:03.783
Porque realmente SQL no estÃ¡ hecho para
construir aplicaciones, sino para hacer consultas

13:03.963 --> 13:08.123
Digamos que es el compa que estuvo contigo en el mÃ¡ster.
Ã‰l tambiÃ©n tuvo el tÃ­tulo. Y tÃº y Ã©l tienen ese mÃ¡ster

13:08.323 --> 13:12.043
pero tÃº ejerces y sabes. Eres un lenguaje de
programaciÃ³n, a lo que este otro compa no sabe nada

13:12.303 --> 13:16.143
pero tambiÃ©n tiene el tÃ­tulo. Es decir, es un lenguaje
de programaciÃ³n, entre comillas. Ahora, ten en cuenta

13:16.143 --> 13:22.263
Desde su creaciÃ³n SQL ha evolucionado muchÃ­simo, tanto
asÃ­ que en 1986 la ANSI lo estandarizÃ³ por primera vez

13:22.463 --> 13:26.143
a lo que los de la ISO dijeron nosotros tambiÃ©n
queremos, y en 1987 tambiÃ©n lo estandarizaron

13:26.943 --> 13:32.703
Por ende SQL pasÃ³ por varias revisiones y ampliaciones, para
incluir nuevas funcionalidades y mejorar la eficiencia del lenguaje

13:32.963 --> 13:37.163
lo que da origen que el lenguaje SQL que podemos
emplear actualmente tenga pinchados en cuenta esteroides

13:37.383 --> 13:44.963
en comparaciÃ³n con la primera versiÃ³n que se hizo, y esto es evidente. Ahora, ten en
cuenta algo muy importante, SQL se conforma de comandos, declaraciones y clÃ¡usulas

13:45.363 --> 13:49.723
Aunque siendo sinceros, esto es simplemente una
forma mÃ¡s prÃ¡ctica y ordenada, entre comillas

13:50.043 --> 13:55.003
de poder clasificar el nÃºmero de instrucciones que podemos enviar
a, por ejemplo, una base de datos, a travÃ©s del lenguaje SQL

13:55.203 --> 14:00.303
Te explico brevemente. Cuando hablamos de comandos, podemos englobar
a todas esas instrucciones que estÃ¡n dentro del lenguaje SQL

14:00.303 --> 14:05.003
Cuando hablamos de declaraciones, nos referimos
especÃ­ficamente a un tipo de instrucciÃ³n del lenguaje SQL

14:05.143 --> 14:13.723
pero que dicha instrucciÃ³n no necesariamente modifica los datos. Un ejemplo de esta puede ser
Select, ya que con esta declaraciÃ³n podemos consultar datos, pero no necesariamente los modificamos

14:13.723 --> 14:20.903
Y ya por Ãºltimo, tenemos las clÃ¡usulas, que las clÃ¡usulas se utilizan para
refinar, o mejor dicho, modificar, el comportamiento de una instrucciÃ³n SQL

14:21.263 --> 14:26.963
Un ejemplo claro de esto son clÃ¡usulas que nos permiten filtrar
la informaciÃ³n, digamos WHERE, ORDER BY, GROUP BY o HAVING

14:27.163 --> 14:31.583
Pero para efectos prÃ¡cticos, tanto las clÃ¡usulas
como las declaraciones son comandos o instrucciones

14:31.983 --> 14:41.883
Y como te digo, esto simplemente es una forma ordenada de llamarlo. Al final de cuentas decir que CL es una
declaraciÃ³n o un comando es lo mismo, o decir que por ejemplo WHERE es una clÃ¡usula o un comando es lo mismo

14:41.883 --> 14:48.263
Pero estÃ¡ bien que lo conozcas. Y ya por Ãºltimo, en base tambiÃ©n a este
nÃºmero de instrucciones o comandos que tenemos disponibles en el lenguaje SQL

14:48.763 --> 14:54.703
todas estas instrucciones, tanto declaraciones como clÃ¡usulas,
a su vez tambiÃ©n podemos dividirlas en 5 categorÃ­as

14:54.963 --> 14:59.683
A lo que se le conoce tambiÃ©n de forma coloquial como los
tipos del lenguaje SQL, que bueno, no son tipos del lenguaje SQL

14:59.923 --> 15:08.003
Es simplemente agrupar las instrucciones en 5 tipos. Y
estos tipos son los siguientes, DQL, DML, DDL, DCL y TCL

15:08.343 --> 15:12.003
SÃ­, muchas Ls. DML son todas esas instrucciones
que nos permiten manipular los datos

15:12.003 --> 15:18.963
DDL engloba las instrucciones que nos permiten definir los datos DCL
engloba las instrucciones que nos permiten tener un control sobre los datos

15:18.963 --> 15:23.003
TCL engloba todas las instrucciones que nos
permiten hacer transacciones entre los datos

15:23.003 --> 15:27.183
Y DQL es como PlutÃ³n O sea, antes era un planeta,
pero como que ahora nadie se acuerda de Ã©l

15:27.183 --> 15:31.043
Lo que pasa con DQL es que casi no se tiene en
cuenta Porque se tiende a meter dentro de DML

15:31.043 --> 15:36.943
O sea, no se mete DQL en DML, que la gente lo asocia asÃ­ Pero como
tal, DQL engloba las instrucciones que nos permiten consultar los datos

15:36.943 --> 15:42.223
Pero para efectos prÃ¡cticos, viejo En este
curso solamente nos centraremos en DDL y DML

15:42.523 --> 15:47.303
Pero ahora, indaguemos mÃ¡s sobre cada uno, y lo haremos en
la siguiente clase. AsÃ­ que con esto explicado, continuemos

15:50.183 --> 15:56.723
Muy bien, el total de las clÃ¡usulas que tenemos en el lenguaje
SQL, lo podemos dividir en cinco principales categorÃ­as

15:56.983 --> 16:01.003
Pero realmente en este curso nos vamos
a enfocar principalmente en DML y DDL

16:01.203 --> 16:05.683
ya que DQL, DCL y TCL para este
curso no son tan relevantes

16:05.683 --> 16:26.226
Si tÃº quieres ser administrador de bases de datos, pues sÃ­. Pero si lo que buscas es entender SQL para despu aplicarlo digamos a una auditor de seguridad y explotar inyecciones de SQL pues es mejor que
aprendas la informaci que s te va a ser Pero bueno veamos brevemente cada uno DML son las siglas de Data Manipulation Language y como tal est en global las cl que est destinadas a la manipulaci de datos

16:26.526 --> 16:30.826
Es decir, clÃ¡usulas que nos permiten insertar,
consultar, actualizar y eliminar los datos

16:31.186 --> 16:38.946
que se almacenan de forma individual en cada columna. BÃ¡sicamente, con las
clÃ¡usulas que conforman el DML, podemos precisamente hacer eso, manipular los datos

16:39.386 --> 16:43.866
Con lo que en este caso debes ir con cuidado, porque despuÃ©s
terminas borrando algo que no tienes que borrar, papÃ¡

16:43.866 --> 16:49.086
Seguidamente, tenemos la categorÃ­a DDL O Data
Definition Language Que esta diferencia de DML

16:49.086 --> 16:53.226
Como tal se centra en la definiciÃ³n y
modificaciÃ³n A nivel de la estructura de los datos

16:53.226 --> 16:59.206
Dentro de la base de datos Es decir, aquÃ­ agrupamos las
clÃ¡usulas A nivel de creaciÃ³n, modificaciÃ³n y eliminaciÃ³n

16:59.206 --> 17:03.026
Pero a nivel de tablas, Ã­ndices y
otros objetos De la base de datos

17:03.026 --> 17:08.946
Porque ten en cuenta, el DML nos permite interactuar con los
datos Y el DDL con la estructura general de la base de datos

17:08.946 --> 17:13.806
No es lo mismo, papÃ¡ Por otro
lado, tenemos el DCL DCL, no DLC

17:13.806 --> 17:17.626
AquÃ­ no te cobramos nada adicional, papÃ¡
DCL son las siglas de Data Control Language

17:17.626 --> 17:22.326
Y como tal, esta categorÃ­a abarca las clÃ¡usulas
Que controlan los derechos de acceso y de seguridad

17:22.326 --> 17:26.786
A la base de datos Y ten en cuenta Que el DCL es
mÃ¡s que todo un complemento a los anteriores

17:26.786 --> 17:31.446
Ya que este mÃ¡s que interactuar con los datos Se asegura
de que el acceso a estos Sea el correcto y el autorizado

17:31.446 --> 17:36.526
Por otro lado Tenemos el lenguaje TCL Que son
las siglas de Transaction Control Language

17:36.526 --> 17:41.046
Y este incluye instrucciones principalmente Para
manejar las transacciones Entre las bases de datos

17:41.046 --> 17:46.646
Y finalmente tendrÃ­amos DQL, que como ya te
dije, pues, Select querÃ­a tener protagonismo

17:46.886 --> 17:52.426
Y le dejaron crearse esto para que se callara. Porque
realmente DQL, a nivel realista, lo incluimos dentro de DML

17:52.686 --> 17:56.406
Pero bueno, como te dije, en este
curso Ãºnicamente veremos DML y DDL

17:56.586 --> 18:01.926
Y no es que las instrucciones que estÃ©n en los otros no sean
relevantes, lo son, si quieres ser un administrador de bases de datos

18:02.326 --> 18:08.166
Pero si tu interÃ©s es aprender bases de datos para entender
cÃ³mo operan y asÃ­ poder detectar de mejor forma inyecciones SQL

18:08.166 --> 18:11.766
Pues para este Ãºltimo caso es mucho mejor
que nos centremos en los que ya te dije

18:11.766 --> 18:15.986
AsÃ­ que para resumirte DML nos permite
manipular los datos de la base de datos

18:15.986 --> 18:19.966
DDL nos permite definir la estructura
de los datos en la base de datos

18:19.966 --> 18:26.246
DQL no deberÃ­a existir y es parte de DML DSL nos permite
manejar las transacciones de los datos en la base de datos

18:26.246 --> 18:31.846
Y DSL nos permite mantener un control a nivel de permisos
y seguridad De quÃ© o quiÃ©n puede acceder a estos datos

18:31.846 --> 18:37.366
Â¿Adivinas dÃ³nde? En efecto papÃ¡, en la base de datos
AsÃ­ que con esto explicado, ahora sÃ­ continuemos

18:38.166 --> 19:08.146
Â¿QuÃ© es el sistema gestor de bases de datos

19:08.146 --> 19:11.746
Y con metadatos, en este contexto,
nos referimos a datos sobre los datos

19:12.066 --> 19:17.326
SÃ­, una definiciÃ³n maravillosa, pero es asÃ­. Pero concretamente en
este caso hablarÃ­amos de, por ejemplo, la estructura de las tablas

19:17.566 --> 19:25.166
los tipos de datos de las columnas, las restricciones aplicadas a los campos, y de mÃ¡s
informaciÃ³n de la configuraciÃ³n que estÃ© aplicada en ese momento, sobre la base de datos

19:25.406 --> 19:30.086
Que como entenderÃ¡s, si conseguimos una inyecciÃ³n SQL,
pues consultar Information Schema nos servirÃ¡ de mucho

19:30.286 --> 19:35.726
para poder entender mejor el entorno, y por ejemplo ver hasta dÃ³nde
podemos llegar, dentro de la auditorÃ­a de seguridad, evidentemente

19:35.726 --> 19:40.326
Si lo queremos poner en una parÃ¡bola, pues Information
Schema es como un Ã­ndice de un libro que es muy enorme

19:40.546 --> 19:46.966
Y ese libro enorme puede ser el sistema gestor de bases de datos, que contiene todas las
bases de datos, las tablas, las columnas y todos los elementos que ya comentamos antes

19:47.206 --> 19:51.506
Ahora ten en cuenta, cuando nos referimos a Information
Schema, no nos referimos a un elemento ancestral

19:51.826 --> 19:58.486
sino simplemente a una base de datos, que ya viene incluida de forma
predeterminada en la mayorÃ­a de sistemas gestores de bases de datos, relacionales

19:58.686 --> 20:05.266
Y esencialmente esta base de datos contiene un conjunto de vistas, que
solamente son de lectura y que ofrecen asÃ­ una forma estandarizada

20:05.266 --> 20:10.706
para que cualquier usuario pueda consultar los metadatos de las
bases de datos halladas en dicho sistema gestor de bases de datos

20:11.006 --> 20:17.826
donde se encuentra esta base de datos. Ahora, esta base de datos, como te dije,
no tiene tablas por asÃ­ decirlo, en el modo tradicional que ya explicamos

20:18.086 --> 20:22.026
sino que estÃ¡ compuesta por un conjunto de vistas,
de solo lectura, como ya lo explicamos antes tambiÃ©n

20:22.246 --> 20:27.746
Y concretamente estas vistas son las siguientes. Tenemos la
vista tables, que abarca toda la informaciÃ³n de todas las tablas

20:28.006 --> 20:34.366
de todas las bases de datos encontradas en el sistema gestor de bases de datos.
TambiÃ©n tenemos la vista columns, donde se almacena toda la informaciÃ³n

20:34.366 --> 20:40.246
pero en este caso solamente de las columnas. Y
finalmente tendrÃ­amos kcolumnusage y tableconstrains

20:40.466 --> 20:47.386
donde de igual forma estas vistas abarcan informaciÃ³n de todas las bases de datos,
pero limitando su alcance solamente a las restricciones de claves en la base de datos

20:47.806 --> 20:53.946
incluyendo claves primarias y claves forÃ¡neas. Por lo que
entenderÃ¡s que si por ejemplo un atacante logra inyectar cÃ³digo SQL

20:53.946 --> 20:57.566
en una consulta que no estÃ© sanitizada
y llega a acceder al information schema

20:57.806 --> 21:03.866
a travÃ©s de consultar estas vistas puede obtener mucha mÃ¡s informaciÃ³n,
o tÃº meramente, como pentester en una auditorÃ­a que estÃ© autorizada

21:03.866 --> 21:08.506
Pero bien, Â¿cÃ³mo podrÃ­a pasar esto? Y sÃ­, sÃ© que me estoy
adelantando un poco, pero te quiero poner al menos un ejemplo

21:08.786 --> 21:14.286
Digamos la siguiente consulta SQL, donde rompemos la consulta con una
comilla, que indagaremos en cada una de estas instrucciones, tranquilo

21:14.346 --> 21:18.366
Pero en general, un atacante podrÃ­a por ejemplo
listar todas las tablas en la base de datos

21:18.606 --> 21:22.626
para de esta forma poder enumerar las columnas, que
tenga una tabla en especÃ­fico que sea de su interÃ©s

21:22.846 --> 21:26.546
y ya conociendo tanto la tabla como la columna de
interÃ©s, solicitar la informaciÃ³n en cuestiÃ³n

21:26.766 --> 21:30.646
Y todo esto pudo hacerlo, ya que toda esta informaciÃ³n
se almacenaba en las vistas del Information Schema

21:30.646 --> 21:34.866
Evidentemente, lo mÃ¡s recomendable en estos casos
Es que se limite el acceso a la Information Schema

21:34.866 --> 21:38.646
Y se aplique digamos el principio de menor
privilegio Para que de esta forma si un atacante

21:38.646 --> 21:42.426
Llegue a acceder a nuestra base de datos Pues por lo
menos que la Information Schema lo tenga limitado

21:42.426 --> 21:47.526
Aunque lo mÃ¡s evidente Lo primordial serÃ­a que no hubiese en
primer lugar Una entrada de datos vulnerable en Jackson SQL

21:47.526 --> 21:51.506
Y esto tienes que tenerlo en cuenta Ya que si
por ejemplo en el futuro trabajas como pentester

21:51.506 --> 21:56.566
Debes saber que no se trata solamente de romper Sino tambiÃ©n
de sugerir formas de cÃ³mo corregir la vulnerabilidad

21:56.566 --> 22:05.666
Que tÃº conseguiste y explotaste Porque al final de cuentas viejo Tu trabajo se puede basar en romper cosas,
pero la intenciÃ³n detrÃ¡s de eso es poder mejorar la seguridad de esos activos, no romper por romper

22:05.786 --> 22:12.466
Ahora, te recomendarÃ­a que te volvieses a ver esta clase, porque a nivel de bases
de datos relacionales, las vistas de Information Schema las vas a usar muchÃ­simo

22:12.686 --> 22:20.346
AsÃ­ que con esto explicado, continuemos. Muy
bien, empecemos la parte prÃ¡ctica de este curso

22:20.586 --> 22:25.186
AsÃ­ que para ello, desde DB Browser, vamos a empezar
a ejecutar nuestras declaraciones y clÃ¡usulas

22:25.646 --> 22:31.626
Empezaremos con la instrucciÃ³n SELECT, la cual ya la viste antes. en
los ejemplos que comentamos, pero vamos a indagar mucho mÃ¡s en ella

22:31.846 --> 22:35.826
Esta es la mÃ¡s fundamental en el lenguaje SQL, ya
que lo que nos permite es seleccionar los datos

22:36.206 --> 22:41.126
Â¿QuÃ© queremos obtener? BÃ¡sicamente, SELECT nos permite
recuperar informaciÃ³n, hallada en la base de datos

22:41.466 --> 22:45.186
Ahora, ten en cuenta, otra instrucciÃ³n
que vas a usar mucho con SELECT es AS

22:45.446 --> 22:49.846
AS es el acrÃ³nimo de alias, y este lo
utilizamos para renombrar una columna o tabla

22:50.066 --> 22:54.666
en el resultado de la consulta. Ojo, esto solamente
de forma temporal en el resultado de la consulta

22:54.666 --> 23:00.066
No es que como tal estemos modificando el nombre de la columna
o tabla en cuestiÃ³n. Es solamente eso, un alias temporal

23:00.066 --> 23:06.086
Y una cosa mÃ¡s, ten en cuenta que select lo podemos usar de dos
formas O bien podemos solicitar datos enviÃ¡ndole mÃ¡s clÃ¡usulas

23:06.086 --> 23:11.306
O meramente enviÃ¡ndole valores Para que Ã©ste los imprima
por pantalla Empecemos pues con este que es lo mÃ¡s bÃ¡sico

23:11.306 --> 23:16.846
Si yo por ejemplo hago un select de un string Que por ejemplo
sea Hicksec Y recuerda que en este caso los strings en SQL

23:16.846 --> 23:20.486
Y en la mayorÃ­a de casos hay que ponerlos
entre comillas En este caso comillas simples

23:20.486 --> 23:26.306
Y digamos que yo a este resultado, que en este caso va a imprimir Hicksec
Quiero que me lo devuelva en una columna que lleve por tÃ­tulo, digamos

23:26.306 --> 23:30.666
el mejor c de YouTube del mundo probado por el
bicho Siu. SÃ­. Por lo que en este caso harÃ­a un select

23:30.926 --> 23:34.946
jicksec, as, y lo que dije antes, que estÃ¡ bien
largo. Por lo que al ejecutar esta sentencia

23:35.266 --> 23:39.886
veremos que nos devuelve una columna con este tÃ­tulo, o
sea, con el alias, cuyo valor va a ser el valor del string

23:40.046 --> 23:44.846
Y de igual forma, podemos hacer operaciones
aritmÃ©ticas usando select. Digamos select 11 por 33

23:45.266 --> 23:48.926
Y de igual forma podemos poner un alias.
Digamos en este caso multiplicaciÃ³n

23:49.146 --> 23:54.406
Por lo que al ejecutar esta sentencia, veremos que nos devuelve el
resultado de esta multiplicaciÃ³n en una columna llamada multiplicaciÃ³n

23:54.646 --> 23:58.826
Ten en cuenta que para estos usos, Select se
comportarÃ­a digamos como la funciÃ³n print en Python

23:58.826 --> 24:04.286
Ya que nos permitirÃ­a imprimir valores y hacer operaciones
aritmÃ©ticas Ojo no estoy diciendo que sea como print en Python

24:04.286 --> 24:08.486
Eso son paradigmas diferentes Y select le da mil
vueltas a print Pero para que se entienda el contexto

24:08.486 --> 24:12.366
Ahora, Â¿CÃ³mo puedo obtener yo como tal
los datos que estÃ¡n en esta base de datos

24:12.546 --> 24:16.146
A travÃ©s de select Pues bien, empecemos
por el mÃ¡s bÃ¡sico Que serÃ­a el siguiente

24:16.146 --> 24:20.186
Select, un asterisco Y aquÃ­ le
metemos una clÃ¡usula Que es from

24:20.186 --> 24:24.986
Que con esta le podemos indicar a select en quÃ©
tabla va a buscar los datos Que le estemos solicitando

24:24.986 --> 24:35.409
Por ejemplo imaginemos que me quiero subir el ego y quiero ver cu empleados tengo El total de todos Pues para este
ejemplo solamente har un select de todos Ten en cuenta que en SQL al igual que en la mayor de los aspectos de la inform

24:35.709 --> 24:41.789
el asterisco es un comodÃ­n, que lo que indica en este caso es seleccionar
todo. Por lo que prÃ¡cticamente cuando hacemos un select asterisco

24:42.089 --> 24:47.089
estamos indicando seleccioname todos los datos hallados en
todas las columnas. Y ahora, Â¿en dÃ³nde los tienes que buscar

24:47.409 --> 24:52.469
Pues en la tabla de empleados. AsÃ­ que pondrÃ­amos from
empleados. Y finalizamos la clÃ¡usula con un punto y coma

24:52.469 --> 24:56.809
Y esto no es obligatorio, puedes hacerlo sin un punto
y coma. Pero por buenas prÃ¡cticas es mejor ponerlo

24:56.809 --> 25:03.769
Adicionalmente, en este caso las instrucciones no son case sensitive Es
decir, da igual por ejemplo que ponga select en mayÃºsculas o en minÃºsculas

25:03.769 --> 25:08.709
Pero por buenas prÃ¡cticas, y tambiÃ©n para que no se vea
horrible Es mejor poner siempre las instrucciones en mayÃºsculas

25:08.709 --> 25:13.049
Entonces repasemos Si yo hago un
select all from empleados Y lo ejecuto

25:13.049 --> 25:17.429
Veremos que me devuelve todos los registros Y todas
las columnas Halladas en la tabla de empleados

25:17.429 --> 25:23.349
Pero ahora, digamos que esto es mucha informaciÃ³n Y yo quiero filtrarlo
un poco Digamos que yo solamente quiero el nombre y el apellido

25:23.349 --> 25:27.149
Pues en este caso en lugar del asterisco
pondrÃ­a select y las columnas que quiero

25:27.149 --> 25:31.829
En este caso nombre y apellido Â¿Y esto desde
dÃ³nde? Pues igualmente de la tabla de empleados

25:31.829 --> 25:37.749
Por lo que al ejecutar esta nueva consulta Solamente nos va a devolver
todos los registros que estÃ©n en las columnas nombre y apellido

25:37.749 --> 25:41.669
De la tabla de empleados Ahora, ten en cuenta
que select tambiÃ©n podemos combinarlo

25:41.669 --> 25:45.849
Con otras clÃ¡usulas de lenguaje SQL Que ya
vimos antes Digamos con la clÃ¡usula where

25:45.849 --> 25:50.589
Where si no sabÃ­as en inglÃ©s significa dÃ³nde AquÃ­ aprendes
hasta inglÃ©s papÃ¡ Y bÃ¡sicamente actÃºa como un filtro

25:50.589 --> 25:55.249
Con el que podemos poner una especie de
condicional en la consulta para filtrarla aÃºn mÃ¡s

25:55.509 --> 25:59.689
Pero bueno, vamos a la parte prÃ¡ctica. Tenemos la
consulta anterior, es decir, traernos el nombre

25:59.689 --> 26:04.129
y el apellido desde la tabla de empleados, que esto
nos devolvÃ­a todos los nombres de todos los empleados

26:04.369 --> 26:08.809
Pero Â¿quÃ© pasa si yo, por ejemplo, no quiero todos los nombres?
Sino que Ãºnicamente quiero los que sean istas de seguridad

26:09.069 --> 26:12.649
que como recordarÃ¡s, es un valor que estÃ¡ en
la columna de posiciÃ³n y que evidentemente

26:12.649 --> 26:16.289
es un valor que va a tener el empleado si es
ista, porque si no, pues no lo tiene. Entonces

26:16.389 --> 26:24.349
Â¿quÃ© podemos hacer aquÃ­? Pues a esta consulta le podemos aÃ±adir un where, Donde le indiquemos
que en este caso la columna de posiciÃ³n debe tener un valor igual a ista de seguridad

26:24.609 --> 26:28.709
Y como esto es un string, lo ponemos entre comillas
simples. Con lo que conseguimos esta consulta

26:28.849 --> 26:36.549
Que si la traducimos al lenguaje de Latam serÃ­a bÃ¡sicamente decirle. Oye compa, mira,
trÃ¡eme todos los nombres y apellidos de los empleados cuya posiciÃ³n sea ista de seguridad

26:36.789 --> 26:42.469
Si no consigues ninguno, pues no me das nada. Y si consigues alguno, pues
ponlos a chambear. Y al ejecutarlo veremos que se aplicÃ³ este filtro

26:42.589 --> 26:46.129
Por lo que en este caso Ãºnicamente veremos
el nombre y el apellido de nuestro empleado

26:46.289 --> 26:49.869
Cuya posiciÃ³n es ista de seguridad. Y si hubiesen
mÃ¡s con esta posiciÃ³n, pues saldrÃ¡n por aquÃ­

26:50.049 --> 26:55.029
Pero en este caso nada mÃ¡s hay uno. Estamos contratando por si te
quieres unir. Y obviamente, no hay un lÃ­mite para usar la clÃ¡usula WHERE

26:55.189 --> 27:01.689
Por consecuencia, podemos hacer todos los filtros que queramos. Y para
ello podemos apoyarnos, por ejemplo, de operadores lÃ³gicos, como AND u OR

27:01.749 --> 27:06.109
Que en este punto entiendo que ya sabes que son, porque te
los expliquÃ© en cursos pasados. Te pongo un ejemplo de esto

27:06.369 --> 27:14.229
Digamos que yo quiero ver ahora el nombre y el apellido de mis empleados, cuya
posiciÃ³n sea ista de seguridad o cuya especialidad sea criptografÃ­a

27:14.229 --> 27:18.469
Por lo que al ejecutar esto obtendremos en este caso
los registros de los empleados correspondientes

27:18.669 --> 27:26.349
cuya especialidad sea criptografÃ­a o cuya posiciÃ³n sea ista de seguridad. Y como
estamos usando un OR, entenderÃ¡s que los que tengan de especialidad criptografÃ­a

27:26.349 --> 27:31.509
no tienen por quÃ© tener a la vez de posiciÃ³n ista
de seguridad, ya que estamos pidiÃ©ndole uno u otro

27:31.749 --> 27:37.489
Cosa diferente fuera si pusiÃ©ramos un AND, que en este caso le
estamos diciendo que debe cumplir con una condiciÃ³n y con la otra

27:37.749 --> 27:44.429
Por lo que para que nos devolviese un registro vÃ¡lido en este caso, nuestro
empleado deberÃ¡ tener como valor en la columna especialidad, criptografÃ­a

27:44.429 --> 27:51.009
y como valor en la columna posiciÃ³n, ista de seguridad. Si esto
estrictamente no se cumple, pues evidentemente no nos darÃ¡ registro

27:51.149 --> 27:57.049
Â¿QuÃ© es lo que pasa en este caso? Porque si izamos todos nuestros registros
en esta tabla, veremos que ningÃºn empleado cumple con ambas condiciones

27:57.389 --> 28:02.429
Y bÃ¡sicamente de esto se trata el select, con from y con
where. Donde con select pedimos quÃ© datos seleccionar

28:02.689 --> 28:07.429
con from decimos desde dÃ³nde los vamos a seleccionar y
con where le decimos en base a quÃ© los vamos a seleccionar

28:07.429 --> 28:11.949
Y como te digo, estos ejemplos son muy simples.
Y evidentemente, como ya te dije, no hay lÃ­mite

28:11.949 --> 28:16.289
Podemos mezclar muchas mÃ¡s clÃ¡usulas Para hacer
operaciones mÃ¡s complejas Y tÃº dirÃ¡s, Â¿quÃ© clÃ¡usulas

28:16.509 --> 28:25.489
A lo que yo te respondo, mi amor Las que veremos a continuaciÃ³n AsÃ­
que continuemos Muy bien, hablemos ahora de las funciones de agregaciÃ³n

28:25.489 --> 28:31.509
Estas bÃ¡sicamente son funciones predefinidas En el lenguaje
SQL Las cuales generalmente van a recibir como argumento

28:31.509 --> 28:35.769
Una columna Con la cual van a operar Y nos
retornarÃ¡ el valor de dicha operaciÃ³n

28:35.769 --> 28:41.229
Y estas bellezas te van a permitir hacer operaciones Como
calcula promedios, encontrar valores mÃ­nimos y mÃ¡ximos

28:41.229 --> 28:46.369
Contar elementos y demÃ¡s Te digo, hay varias funciones de
este estilo Pero las que veremos aquÃ­ son las principales

28:46.369 --> 28:50.369
Y son las siguientes Count, Zoom,
AVG O VG, Â¿cÃ³mo le quieres decir

28:50.529 --> 28:54.829
Max y Min Max y Min, suena como a
nombre de comiquita Empecemos por count

28:54.829 --> 28:59.049
Esta se usa para contar el nÃºmero de registros
Que coinciden con un criterio en especÃ­fico

28:59.049 --> 29:02.649
O para meramente contar el nÃºmero de
registros totales Pongamos un ejemplo

29:02.649 --> 29:08.309
Digamos que no me bastÃ³ con la clase anterior Y quiero seguir aumentando
mi ego Por lo que en este caso quiero saber cuÃ¡ntos empleados tengo

29:08.309 --> 29:12.969
Para esto puedo hacer un SELECT De la funciÃ³n COUNT
Recuerda que las funciones las llamamos entre parÃ©ntesis

29:12.969 --> 29:18.769
Y dentro de este parÃ©ntesis le enviamos las columnas con las que va a trabajar
Que en este caso le ponemos un asterisco para indicarle que trabaje con todas

29:18.769 --> 29:24.269
Podemos por ejemplo ponerle un alias Digamos total empleados
Para que nos devuelva el resultado en una columna llamada sÃ

29:24.269 --> 29:29.429
Â¿Y desde dÃ³nde va a sacar esta informaciÃ³n? Pues de la tabla
empleados Al hacer esto verÃ¡s que nos devuelve una columna

29:29.429 --> 29:34.489
Llamada total empleados Como el alias que pusimos Cuyo
valor es 7 Porque en este caso tenemos 7 empleados

29:34.489 --> 29:41.489
Bueno, tenemos, tengo, sumios Ahora, la siguiente funciÃ³n La funciÃ³n sum
Que esta se utiliza para calcular la suma total de una columna numÃ©rica

29:41.489 --> 29:46.789
Ojo con esto, numÃ©rica De un conjunto de registros
Y como te digo, viejo, tiene que ser numÃ©rico

29:46.789 --> 29:51.049
No podemos sumar strings O sea, Â¿cuÃ¡nto es
A mÃ¡s A? A, perdÃ³n Pero pongamos un ejemplo

29:51.049 --> 29:55.689
Imaginemos que queremos calcular todo el costo de
recuperaciÃ³n De todos los incidentes que hemos recuperado

29:55.689 --> 30:01.289
Pues para esto simplemente harÃ­amos un select LlamarÃ­amos a la funciÃ³n
Y entre los parÃ©ntesis pondrÃ­amos el argumento que le vamos a enviar

30:01.289 --> 30:08.329
Que como ya te dije, es la columna con la que va a trabajar Que en este caso es la
columna costo-recuperaciÃ³n, a la cual le podemos meter tambiÃ©n un alias, que se

30:08.329 --> 30:12.169
llame costo-total-recuperaciÃ³n. Â¿Y de dÃ³nde
vamos a sacar todo esto? Pues de la tabla

30:12.169 --> 30:15.709
que contiene esta columna, es decir, la tabla
incidentes. Por lo que al hacer esto vemos

30:15.709 --> 30:19.469
el total de todos los costos de recuperaciÃ³n
de todos los incidentes, y en efecto vemos

30:19.469 --> 30:23.849
como yo soy rico. Siguiente funciÃ³n, AVG.
Esta nos permite calcular el valor promedio

30:23.849 --> 30:27.869
de una columna igualmente numÃ©rica entre
un conjunto de registros, en pocas palabras

30:28.169 --> 30:33.569
es calcular la media, por asÃ­ decirlo, de todo el conjunto de
valores con los que va trabajar. Por ejemplo, digamos que yo

30:33.569 --> 30:37.569
quiero evaluar cuÃ¡nto tardan mis empleados en
realizar un proyecto. Porque si yo noto que uno de mis

30:37.569 --> 30:41.689
empleados no estÃ¡ siendo eficiente, lo mando a conocer
a Batista. Y tÃº dirÃ¡s, Â¿cuÃ¡l Batista? Pues recoge

30:41.689 --> 30:45.649
tus cosas. Y fuera de mi vista. Y para esto
podrÃ­amos hacer un select y llamar a la funciÃ³n

30:45.649 --> 30:49.489
abg, donde le enviamos como argumento
la columna duraciÃ³n. Y le ponemos un

30:49.489 --> 30:53.529
alias, digamos duraciÃ³n promedio. Â¿Y de dÃ³nde
sacamos esta informaciÃ³n? Pues de la tabla

30:53.529 --> 30:57.509
proyectos. Por lo que al hacer esta consulta vemos
el promedio. Y en esta ocasiÃ³n mis empleados

30:57.509 --> 31:01.469
se salvaron de conocer a Batista. Pero sigo
atento. Siguiente. Tenemos la funciÃ³n max

31:01.549 --> 31:06.709
y no es still. Esta funciÃ³n se utiliza para encontrar
el valor mÃ¡ximo dentro de una columna en especÃ­fico

31:06.809 --> 31:11.809
Y ya, hace eso simplemente. Por ejemplo, si quisiÃ©ramos
descubrir cuÃ¡l ha sido el incidente de seguridad mÃ¡s reciente

31:11.809 --> 31:16.369
que tenemos en nuestra base de datos, podrÃ­amos hacer
un select enviÃ¡ndole como argumento la columna fecha

31:16.369 --> 31:21.189
donde le pondremos un alias, digamos, incidente mÃ¡s reciente
y en quÃ© tabla esta funciÃ³n va a buscar esta columna

31:21.189 --> 31:26.969
Pues de la tabla incidentes porque en la tabla incidentes estÃ¡ la
columna fecha. Y al ejecutar esta consulta veremos la fecha mÃ¡s reciente

31:26.969 --> 31:31.489
de un incidente registrada en nuestra base de
datos. Y ya por Ãºltimo, tenemos la funciÃ³n min

31:31.549 --> 31:39.109
que es igual a la funciÃ³n max, pero al revÃ©s, eso no tuvo sentido. BÃ¡sicamente,
la funciÃ³n min encontrarÃ¡ el valor, pero mÃ­nimo, de una columna en especÃ­fico

31:39.229 --> 31:45.769
O sea, max consigue el mÃ¡ximo, y min consigue el mÃ­nimo. Por ejemplo, digamos que
yo quiero identificar el proyecto, que sea mÃ¡s antiguo en nuestra base de datos

31:46.149 --> 31:50.189
O sea, lo que hicimos antes, pero en este caso, el mÃ¡s
antiguo. Porque evidentemente a nivel numÃ©rico serÃ¡ menor

31:50.429 --> 31:56.069
Y digamos en este caso, para tocar otras clÃ¡usulas que hemos visto,
yo quiero ver el proyecto mÃ¡s antiguo, cuyo estado siga en progreso

31:56.329 --> 32:02.289
Entonces, partiendo de estos requisitos, podrÃ­a ser un select, donde llame
la funciÃ³n min, y como argumento le puedo enviar la columna fecha inicio

32:02.529 --> 32:07.989
Le puedo poner un alias tambiÃ©n, digamos proyecto mÃ¡s antiguo.
Â¿Y de dÃ³nde va a sacar esto este compa? Pues de la tabla proyectos

32:08.129 --> 32:13.369
Pero como te dije, yo Ãºnicamente quiero ver la fecha del mÃ¡s antiguo,
cuyo estado estÃ© en progreso, por lo que puedo ponerle un where

32:13.569 --> 32:17.149
indicÃ¡ndole que en este caso, la
columna de estado debe estar en progreso

32:17.369 --> 32:22.989
Y como en progreso es un string, lo pongo entre comillas simples. Y
al ejecutar esta consulta, veremos en este caso la fecha de inicio

32:23.189 --> 32:27.889
del proyecto mÃ¡s antiguo, cuyo estado sigue en progreso. Y
como puedes apreciar, parece que los empleados no hacen nada

32:27.889 --> 32:32.389
Porque esto lleva tiempo HabrÃ¡ que decirles algo O les
llamamos a Batista Y te digo, hay muchas mÃ¡s funciones

32:32.389 --> 32:37.029
Pero las principales y las que quiero que conozcas
son estas AsÃ­ que con esto explicado, continuemos
