Mysql también admite el concepto de variables definidas por el usuario, lo que permite pasar un valor de una declaración a otra. Una variable definida por el usuario en Mysql se escribe como @var_name donde var_name es el nombre de la variable y puede constar de caracteres alfanuméricos, ., _ y $.
- Una variable definida por el usuario es específica de la sesión, es decir, la variable definida por un cliente no se comparte con otro cliente y cuando finaliza la sesión, estas variables caducan automáticamente.
- Estas variables no distinguen entre mayúsculas y minúsculas. Entonces, @mark o @Mark se refieren al mismo valor.
- La longitud máxima de las variables puede ser de 64 caracteres.
- El nombre de la variable puede incluir otros caracteres como- {!, #, ^, -, ..} en su nombre, si están entre comillas. Por ejemplo, @’var@1′ o @”var^2″ o @`var3`.
- Estas variables no se pueden declarar, solo se inicializan, es decir, en el momento de la declaración se les debe asignar un valor.
- También se puede acceder a una variable no declarada en una instrucción SQL, pero sus valores se establecen como NULL .
- Estas variables pueden tomar valores del siguiente conjunto de tipos de datos: { entero, punto flotante, decimal, binario, string no binaria o valor NULL.
Sintaxis:
SET @var_name = expression
Ejemplos:
1. Asignación de valor a una variable mediante el comando SET .
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;
Los valores de estas variables se pueden mostrar refiriéndolos en la declaración SELECT-
mysql>SELECT @var1, @var2;
Producción:
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+
2. Acceso a una variable no declarada
mysql>SELECT @var3;
Producción:
+-------+ | @var3 | +-------+ | NULL | +-------+
Aquí, la variable @var3 no está declarada, por lo que su valor predeterminado es NULL.
3. Asignar valor a una variable sin utilizar SET .
mysql>SELECT @var3 := 4;
Producción:
+----------+ | @var3:=4 | +----------+ | 4 | +----------+
En el ejemplo anterior, a la variable @var3 se le debe asignar un valor usando solo := not = , este último se trata como una comparación en una declaración que no es SET . Me gusta-
mysql>SELECT @var4 = 5;
Producción:
+----------+ | @var4=5 | +----------+ | NULL | +----------+
Cómo se utilizan estas variables para almacenar valores, que se utilizan en el futuro.
Considere la siguiente tabla de Student:
s_id | nombre de | Marcos |
---|---|---|
1 | shagún | 15 |
2 | taruna | 5 |
3 | Riya | 15 |
4 | palak | 10 |
5 | neha | 7 |
6 | garima | 17 |
Ahora, tenemos que encontrar el rango de estos estudiantes usando variables definidas por el usuario.
Para esto, inicializamos dos variables : @rank y @prev_mark .
mysql>SET @rank=0, @prev_mark=0;
Consulta:
mysql>Select s_name, if (@prev_mark != mark, @rank:=@rank+1, @rank) as 'rank', @prev_mark:=mark as 'marks' from student order by mark desc;
Aquí, la variable @rank se usa para almacenar el rango del estudiante y @prev_mark se usa para almacenar las calificaciones de los estudiantes anteriores.
La comparación entre las calificaciones se realiza de modo que, en caso de que dos estudiantes obtengan las mismas calificaciones , se pueda evitar el incremento en la variable @rank .
Los cambios en ambas variables tienen lugar después de ordenar la tabla de estudiantes en orden descendente por la columna «marcar».
Producción:
nombre de | rango | marcas |
---|---|---|
garima | 1 | 17 |
shagún | 2 | 15 |
Riya | 2 | 15 |
palak | 3 | 10 |
neha | 4 | 7 |
taruna | 5 | 5 |
Por lo tanto, obtenemos la tabla de estudiantes resultante ordenada por la columna de «marcas» en orden descendente junto con el rango de los estudiantes.
Nota: En la consulta anterior, cuide el orden de la columna en la declaración de selección. Si la columna «marcas» se escribe antes de la columna «rango», entonces no obtenemos el resultado deseado. Porque cada vez que @prev_mark se le asigna la calificación del estudiante actual, lo que resulta en la evaluación de @prev_mark!=mark como falso . Entonces, el rango de cada estudiante se muestra como no incrementado, es decir, permanecerá como 0.
Publicación traducida automáticamente
Artículo escrito por Tanvi_Garg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA