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(30) NOT 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.:
Publicar un comentario