7 de abril de 2020

Palabras Claves MySQL / MariaDB

DISTINCT, LIMIT y ORDER BY


Se anexa archivo vehículos.sql para realizar las pruebas, donde se incluyen varias marcas de vehículos que se comercializan en México, el año de su fundación y el país donde se originó la marca (las últimas dos columnas fueron obtenidas de Wikipedia).


DISTINCT

En algunas situaciones se tienen múltiples registros duplicados en una tabla, puede tener más sentido retornar solo registros únicos, en lugar de recuperar los duplicados. La palabra clave DISTINCT en SQL es utilizada en conjunto con SELECT para eliminar todos los registros duplicados y retornar solo los registros únicos.

La sintaxis básica de DISTINCT es como se muestra a continuación:
SELECT DISTINCT column_name1, column_name2
FROM table_name;
Si la tabla tiene campos repetidos, solo mostrara los valores distintos de la columna. Omitiendo las entradas repetidas.
SELECT DISTINCT PaisOrigen
FROM marcas;
PaisOrigen
Japón
Italia
Inglaterra
Alemania
China
Estados Unidos
Corea
Francia
España
Suecia
México


LIMIT

Por default, todos los resultados que satisfacen las condiciones especificadas en la declaración SQL son retornados. Sin embargo, se sugiere recuperar solo un subconjunto de registros. En MySQL esto se logra utilizando la palabra clave LIMIT.

La sintaxis para LIMIT es como sigue:
SELECT column list
FROM table_name
LIMIT [numero de registros];
OR LIMIT [desplazamiento, numero de registros];

Por ejemplo, podemos recuperar los primeros cinco registros de la tabla “vehículos”
SELECT ID, Marca, PaisOrigen, FoundationYear
FROM marcas
LIMIT 4;
ID
Marca
PaisOrigen
FoundationYear
1
Acura
Japón
1986
2
Alfa Romeo
Italia
1910
3
ASTON MARTIN
Inglaterra
1913
4
Audi
Alemania
1909

También se puede tomar un subconjunto de registros de un desplazamiento particular. En el siguiente ejemplo se toman cinco registros, comenzando desde la novena posición:
SELECT ID, Marca, PaisOrigen, FoundationYear
FROM marcas
LIMIT 9,5;
ID
Marca
PaisOrigen
FoundationYear
10
Chevrolet
Estados Unidos
1911
11
Chrysler
Estados Unidos
1925
12
Dodge
Estados Unidos
1900
13
Ferrari
Italia
1947
14
Fiat
Italia
1899

Como se puede observar esto produce resultados comenzando desde el número diez de ID y no nueve, porque MySQL comienza a contar desde cero, lo que significa que el desplazamiento comienza desde la primera fila que es 0, no 1.


Nombres completamente calificados

En SQL se puede proveer el nombre de la tabla antes del nombre de la columna, separándola con un punto. Las siguientes declaraciones son equivalentes:
SELECT column FROM table;
SELECT table.column FROM table;
El termino de la sintaxis mencionada anteriormente es llamado el “nombre completamente calificados” de esa columna. Esta forma de escribir es útil cuando se trabaja con múltiples tablas que pueden compartir los mismos nombres de columnas.

ORDER BY

ORDER BY es utilizado con SELECT para ordenar los datos recuperados.

SELECT *
FROM marcas
ORDER BY Marca;
Las filas son ordenadas alfabéticamente por la columna “marcas”. Por defecto, la palabra clave ORDER BY ordena los resultados en orden ascendente.

ORDER BY puede ordenar por múltiples columnas los datos recuperados, para esto separa la lista de columnas posterior a ORDER BY con comas.

Para ordenar por “PaisOrigen” y “FoundationYear”
SELECT * FROM marcas
ORDER BY PaisOrigen DESC, FoundationYear ASC
LIMIT 10;
ID
Marca
PaisOrigen
FoundationYear
60
Scania
Suecia
1891
37
Volvo
Suecia
1927
49
SAAB
Suecia
1945
55
Dina
México
1951
33
Suzuki
Japón
1909
53
Isuzu
Japón
1916
24
Mazda
Japón
1920
27
Nissan
Japón
1933
35
Toyota
Japón
1937
54
Hino
Japón
1942

Como se tienen varios países que se repiten, serán ordenados por la columna PaisOrigen en orden descendente, y en orden ascendente por FoundationYear.
El comando ORDER BY comienza a ordenar en la misma secuencia que las columnas. Ordenara por la primera columna listada, luego por la segunda y así sucesivamente. Puede utilizar las palabras clave DESC y ASC, para ordenar en forma descendente y ascendente respectivamente.


Código SQL para crear la Base de Datos


CREATE DATABASE IF NOT EXISTS vehiculos
CHARSET=utf8;

USE vehiculos;

DROP TABLE IF EXISTS `marcas`;
CREATE TABLE `marcas` (
  `ID` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `Marca` varchar(30NOT NULL DEFAULT '',
  `PaisOrigen` varchar(30) DEFAULT NULL,
  `FoundationYear` smallint UNSIGNED DEFAULT NULL,
  PRIMARY KEY (`ID`));

INSERT INTO `marcas` VALUES ('1''Acura''Japón''1986');
INSERT INTO `marcas` VALUES ('2''Alfa Romeo''Italia''1910');
INSERT INTO `marcas` VALUES ('3''ASTON MARTIN''Inglaterra''1913');
INSERT INTO `marcas` VALUES ('4''Audi''Alemania''1909');
INSERT INTO `marcas` VALUES ('5''BAIC''China''1988');
INSERT INTO `marcas` VALUES ('6''Bentley''Inglaterra''1919');
INSERT INTO `marcas` VALUES ('7''BMW''Alemania''1916');
INSERT INTO `marcas` VALUES ('8''Buick''Estados Unidos''1899');
INSERT INTO `marcas` VALUES ('9''Cadillac''Estados Unidos''1902');
INSERT INTO `marcas` VALUES ('10''Chevrolet''Estados Unidos''1911');
INSERT INTO `marcas` VALUES ('11''Chrysler''Estados Unidos''1925');
INSERT INTO `marcas` VALUES ('12''Dodge''Estados Unidos''1900');
INSERT INTO `marcas` VALUES ('13''Ferrari''Italia''1947');
INSERT INTO `marcas` VALUES ('14''Fiat''Italia''1899');
INSERT INTO `marcas` VALUES ('15''Ford''Estados Unidos''1903');
INSERT INTO `marcas` VALUES ('16''GMC''Estados Unidos''1911');
INSERT INTO `marcas` VALUES ('17''Honda''Japón''1948');
INSERT INTO `marcas` VALUES ('18''Hyundai''Corea''1967');
INSERT INTO `marcas` VALUES ('19''Infiniti''Japón''1989');
INSERT INTO `marcas` VALUES ('20''Jaguar''Inglaterra''1922');
INSERT INTO `marcas` VALUES ('21''JAC''China''1964');
INSERT INTO `marcas` VALUES ('22''Jeep''Estados Unidos''1941');
INSERT INTO `marcas` VALUES ('23''KIA''Corea''1944');
INSERT INTO `marcas` VALUES ('24''Mazda''Japón''1920');
INSERT INTO `marcas` VALUES ('25''Mercedes Benz''Alemania''1926');
INSERT INTO `marcas` VALUES ('26''Mitsubishi''Japón''1970');
INSERT INTO `marcas` VALUES ('27''Nissan''Japón''1933');
INSERT INTO `marcas` VALUES ('28''Peugeot''Francia''1896');
INSERT INTO `marcas` VALUES ('29''RAM''Estados Unidos''2009');
INSERT INTO `marcas` VALUES ('30''Renault''Francia''1898');
INSERT INTO `marcas` VALUES ('31''SEAT''España''1950');
INSERT INTO `marcas` VALUES ('32''Subaru''Japón''1953');
INSERT INTO `marcas` VALUES ('33''Suzuki''Japón''1909');
INSERT INTO `marcas` VALUES ('34''Tesla''Estados Unidos''2003');
INSERT INTO `marcas` VALUES ('35''Toyota''Japón''1937');
INSERT INTO `marcas` VALUES ('36''Volkswagen''Alemania''1937');
INSERT INTO `marcas` VALUES ('37''Volvo''Suecia''1927');
INSERT INTO `marcas` VALUES ('38''Maserati''Italia''1914');
INSERT INTO `marcas` VALUES ('39''Opel''Alemania''1862');
INSERT INTO `marcas` VALUES ('40''Hummer''Estados Unidos''1992');
INSERT INTO `marcas` VALUES ('41''Pontiac''Estados Unidos''1926');
INSERT INTO `marcas` VALUES ('42''Oldsmobile''Estados Unidos''1885');
INSERT INTO `marcas` VALUES ('43''FAW''China''1953');
INSERT INTO `marcas` VALUES ('44''Lincoln''Estados Unidos''1917');
INSERT INTO `marcas` VALUES ('45''Mini''Inglaterra''1969');
INSERT INTO `marcas` VALUES ('46''Porsche''Alemania''1931');
INSERT INTO `marcas` VALUES ('47''Smart''Alemania''1994');
INSERT INTO `marcas` VALUES ('48''Mercury''Estados Unidos''1939');
INSERT INTO `marcas` VALUES ('49''SAAB''Suecia''1945');
INSERT INTO `marcas` VALUES ('50''Land Rover''Inglaterra''1949');
INSERT INTO `marcas` VALUES ('51''Lexus''Japón''1989');
INSERT INTO `marcas` VALUES ('52''Freightliner''Estados Unidos''1947');
INSERT INTO `marcas` VALUES ('53''Isuzu''Japón''1916');
INSERT INTO `marcas` VALUES ('54''Hino''Japón''1942');
INSERT INTO `marcas` VALUES ('55''Dina''México''1951');
INSERT INTO `marcas` VALUES ('56''Kenworth''Estados Unidos''1923');
INSERT INTO `marcas` VALUES ('57''Mack Trucks''Estados Unidos''1900');
INSERT INTO `marcas` VALUES ('58''Peterbilt''Estados Unidos''1939');
INSERT INTO `marcas` VALUES ('59''International''Estados Unidos''1902');
INSERT INTO `marcas` VALUES ('60''Scania''Suecia''1891');
INSERT INTO `marcas` VALUES ('61''MAN''Alemania''1758');
INSERT INTO `marcas` VALUES ('62''Caterpillar''Estados Unidos''1925');
INSERT INTO `marcas` VALUES ('63''Irizar''España''1889');

No hay comentarios.: