github.com/matrixorigin/matrixone@v1.2.0/test/distributed/cases/dml/select/order_by_with_nulls.sql (about) 1 -- @suit 2 3 -- @case 4 -- @desc:test filter key ORDER BY 5 -- @label:bvt 6 7 -- No INDEX explicitly 8 -- different data type 9 DROP TABLE IF EXISTS t1; 10 CREATE TABLE t1 ( 11 id INT AUTO_INCREMENT, 12 name VARCHAR(255), 13 category_id INT, 14 d TIMESTAMP, 15 PRIMARY KEY (id) 16 ); 17 INSERT INTO t1 (id, name, category_id, d) VALUES 18 (1, 'aaa', 1, '2010-06-10 19:14:37'), 19 (2, 'bbb', 2, '2010-06-10 19:14:55'), 20 (3, 'ccc', 1, '2010-06-10 19:16:02'), 21 (4, 'ddd', 1, '2010-06-10 19:16:15'), 22 (5, 'eee', 2, '2010-06-10 19:16:35'); 23 -- MO default ASC 24 SELECT * FROM t1 ORDER BY d; 25 SELECT * FROM (SELECT * FROM t1 ORDER BY d DESC) temp ORDER BY d DESC; 26 SELECT * FROM t1 WHERE category_id = 1 ORDER BY id; 27 SELECT * FROM t1 WHERE category_id = 1 ORDER BY d; 28 SELECT * FROM t1 WHERE category_id = 1 ORDER BY 1; 29 SELECT * FROM t1 WHERE category_id = 1 ORDER BY 1+1; 30 SELECT * FROM t1 WHERE category_id = 1 ORDER BY SIN(1); 31 -- ??? 32 SELECT * FROM t1 WHERE category_id = 1 ORDER BY TRUE; 33 34 -- CHAR and VARCHAR 35 DROP TABLE IF EXISTS t1; 36 CREATE TABLE t1 ( 37 name VARCHAR(200), 38 area CHAR(200), 39 PRIMARY KEY (name) 40 ); 41 INSERT INTO t1() VALUES 42 ('a','b'), 43 ('tewr','lojj'), 44 ('The index may also be used even if the ORDER BY d', ' all unused portions of the index and all ex'), 45 ('ssed by the query, the index is used', 'ex is more efficient than a table scan if c'), 46 ('more expensive than scanning the table and', 'e optimizer probably does not use the index. If SELECT'), 47 ('imilar to the same queries without DESC', 'homogeneity, but need not have the same actual direction.'); 48 49 -- Use Table Scan 50 SELECT name FROM t1 ORDER BY name; 51 SELECT name FROM t1 ORDER BY name,area; 52 SELECT name FROM t1 ORDER BY area,name; 53 SELECT * FROM t1 WHERE name = 'a' ORDER BY area; 54 SELECT * FROM t1 WHERE LENGTH(name) > 10 ORDER BY name ASC; 55 SELECT * FROM t1 WHERE LENGTH(name) < 10 ORDER BY name DESC; 56 SELECT * FROM t1 WHERE LENGTH(name) > 10 ORDER BY LENGTH(area); 57 SELECT name FROM t1 ORDER BY name ASC, area DESC; 58 SELECT name FROM t1 ORDER BY name DESC, area ASC; 59 DELETE FROM t1; 60 INSERT INTO t1(name) VALUES('abkl'),('bfdjskl'),('cdjkl'),('djiofj'),('efjkl;'),('fjkldsa'),('gljfdka'); 61 SELECT * FROM t1 ORDER BY name DESC, name ASC; 62 63 -- DATE, DATETIME, TIMESTAMP 64 DROP TABLE IF EXISTS t1; 65 CREATE TABLE t1 ( 66 d1 DATE, 67 d2 DATETIME, 68 d3 TIMESTAMP 69 ); 70 INSERT INTO t1() VALUES ('2020-08-08','2020-08-07 00:01:02','2020-08-07 00:01:02.136487'); 71 INSERT INTO t1() VALUES ('2021-09-09','2020-09-09 10:11:02','2020-09-09 10:11:02.136558'); 72 INSERT INTO t1() VALUES ('2021-07-07','2020-07-07 17:17:12','2020-07-07 07:07:05.135582'); 73 INSERT INTO t1() VALUES ('2021-06-06','2020-06-06 21:21:22','2020-06-06 02:21:22.135418'); 74 SELECT * FROM t1 ORDER BY d1 DESC; 75 SELECT * FROM t1 ORDER BY d1 DESC, d2 ASC, d3 DESC; 76 SELECT * FROM t1 ORDER BY d2 ASC, d1 ASC, d3 DESC; 77 SELECT * FROM t1 WHERE d1 BETWEEN '2021-06-06' AND '2021-08-08' ORDER BY d1; 78 79 -- TINYINT, INT, SMALLINT, BIGINT 80 DROP TABLE IF EXISTS t1; 81 CREATE TABLE t1( 82 tiny TINYINT NOT NULL, 83 small SMALLINT NOT NULL, 84 int_test INT NOT NULL, 85 big BIGINT NOT NULL 86 ); 87 INSERT INTO t1() VALUES(1, 2, 3, 4),(100, 101, 102, 103),(NULL, NULL, NULL, 204),(64,1,4564,46843); 88 SELECT * FROM t1 ORDER BY small DESC; 89 SELECT * FROM t1 WHERE tiny < 100 ORDER BY big ASC; 90 SELECT * FROM t1 ORDER BY tiny ASC, small DESC, int_test ASC, big DESC; 91 92 -- FLOAT, DOUBLE, DECIMAL 93 DROP TABLE IF EXISTS t1; 94 CREATE TABLE t1( 95 float_32 FLOAT, 96 float_64 DOUBLE, 97 d DECIMAL 98 ); 99 INSERT INTO t1() VALUES(0.01, 0.02, 0.03), (0.000001,0.000002,0),(-1,-1.1,-1.2),(0.000003,0.000001,3); 100 SELECT * FROM t1 ORDER BY float_32 ASC, float_64 DESC; 101 SELECT * FROM t1 ORDER BY float_64 DESC; 102 SELECT * FROM t1 ORDER BY d ASC; 103 104 -- JOIN 105 DROP TABLE IF EXISTS t1; 106 DROP TABLE IF EXISTS t2; 107 DROP TABLE IF EXISTS t3; 108 CREATE TABLE t1( 109 id INT NOT NULL, 110 name CHAR(20) NOT NULL, 111 PRIMARY KEY (id) 112 ); 113 CREATE TABLE t2( 114 id VARCHAR(10) NOT NULL, 115 nation VARCHAR(20) NOT NULL, 116 PRIMARY KEY(id) 117 ); 118 CREATE TABLE t3( 119 nation VARCHAR(20) NOT NULL, 120 city CHAR(20) NOT NULL, 121 GDP FLOAT NOT NULL, 122 PRIMARY KEY(nation) 123 ); 124 INSERT INTO t1() VALUES(1,'ronaldo'), (2,'kante'), (3,'noyer'),(4,'modrici'); 125 INSERT INTO t2() VALUES(1,'Poutanga'), (2,'NA'), (4,'Fenland'); 126 INSERT INTO t3() VALUES('Poutanga','liseber',520135), ('NA','bolando',62102), ('Fenland','yisdilne', 612094); 127 SELECT * FROM t1 JOIN t2 ON t1.id = t2.id WHERE t1.id BETWEEN 1 AND 4+1 ORDER BY name; 128 SELECT * FROM t1 JOIN t2 ON t1.id = t2.id ORDER BY t1.id; 129 SELECT * FROM t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.nation = t3.nation ORDER BY t2.nation ASC, t3.GDP DESC; 130 SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id RIGHT JOIN t3 ON t2.nation = t3.nation ORDER BY t2.nation ASC, t3.GDP DESC; 131 SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id RIGHT JOIN t3 ON t2.nation = t3.nation ORDER BY t2.nation DESC, t3.GDP DESC; 132 133 -- UNION and UNION ALL 134 DROP TABLE IF EXISTS t1; 135 DROP TABLE IF EXISTS t2; 136 CREATE TABLE t1( 137 id INT NOT NULL, 138 name CHAR(20) NOT NULL, 139 sex CHAR(4) NOT NULL, 140 PRIMARY KEY (id) 141 ); 142 CREATE TABLE t2( 143 id VARCHAR(10) NOT NULL, 144 name VARCHAR(20) NOT NULL, 145 nation VARCHAR(20) NOT NULL, 146 PRIMARY KEY(id) 147 ); 148 INSERT INTO t1() VALUES(1,'ronaldo','F'), (2,'kante','M'), (3,'noyer','F'),(4,'modrici','M'); 149 INSERT INTO t2() VALUES(1,'ronaldo','American'), (2,'kante','Franch'), (3,'noyer','Germany'),(4,'modrici','UK'); 150 SELECT * FROM t1 UNION ALL SELECT * FROM t2 ORDER BY name; 151 (SELECT * FROM t1 UNION ALL SELECT * FROM t2) ORDER BY name DESC, id ASC; 152 (SELECT * FROM t1) UNION (SELECT * FROM t2 ORDER BY nation) ORDER BY id DESC; 153 (SELECT * FROM t1 ORDER BY sex) UNION (SELECT * FROM t2); 154 (SELECT * FROM t1 WHERE sex = 'M' ORDER BY sex DESC) 155 UNION 156 (SELECT * FROM t2 WHERE id >= 3 ORDER BY nation ASC) ORDER BY id ASC; 157 158 (SELECT * FROM t1 WHERE id BETWEEN 1 AND 2 ORDER BY name) 159 UNION ALL 160 (SELECT * FROM t2 WHERE nation BETWEEN 'A' AND 'F' ORDER BY id DESC); 161 162 -- UNION and UNION ALL, Multi table great than 2 163 DROP TABLE IF EXISTS t1; 164 DROP TABLE IF EXISTS t2; 165 DROP TABLE IF EXISTS t3; 166 CREATE TABLE t1( 167 id INT NOT NULL, 168 name CHAR(20) NOT NULL, 169 PRIMARY KEY (id) 170 ); 171 CREATE TABLE t2( 172 id VARCHAR(10) NOT NULL, 173 nation VARCHAR(20) NOT NULL, 174 PRIMARY KEY(id) 175 ); 176 CREATE TABLE t3( 177 id VARCHAR(10) NOT NULL, 178 area VARCHAR(20) NOT NULL, 179 PRIMARY KEY(id) 180 ); 181 INSERT INTO t1() VALUES(1,'ronaldo'), (2,'kante'), (3,'noyer'),(4,'modrici'); 182 INSERT INTO t2() VALUES(1,'UK'), (2,'USA'), (3,'RA'),(4,'CN'); 183 INSERT INTO t3() VALUES(1,'EU'), (2,'NA'), (3,'AU'),(4,'AS'); 184 (SELECT * FROM t1) UNION (SELECT * FROM t2 ORDER BY id DESC) UNION ALL (SELECT * FROM t3 ORDER BY area); 185 ((SELECT * FROM t1 ORDER BY id DESC) UNION (SELECT * FROM t2) UNION ALL (SELECT * FROM t3 ORDER BY area)) ORDER BY id; 186 (SELECT * FROM t1 ORDER BY name) UNION (SELECT * FROM t2 ORDER BY id) UNION ALL (SELECT * FROM t3 ORDER BY area); 187 -- Multi table JOIN(INNER, LEFT, RIGHT) 188 (SELECT * FROM t1 JOIN t2 ON t1.id = t2.id ORDER BY t2.id) 189 UNION 190 (SELECT * FROM t2 RIGHT JOIN t3 ON t2.id = t3.id ORDER BY t3.id DESC); 191 -- Joins between different tables 192 (SELECT * FROM t1 LEFT JOIN t3 ON t1.id = t3.id ORDER BY t1.id DESC, t3.area ASC) 193 UNION 194 (SELECT * FROM t2 RIGHT JOIN t3 ON t2.id = t3.id ORDER BY t2.nation ASC, t3.id DESC); 195 196 -- ORDER BY with GROUP BY 197 DROP TABLE IF EXISTS t1; 198 DROP TABLE IF EXISTS t2; 199 CREATE TABLE t1( 200 id INT NOT NULL, 201 d1 CHAR(50) NOT NULL, 202 salary FLOAT NOT NULL, 203 PRIMARY KEY (id) 204 ); 205 CREATE TABLE t2( 206 id INT NOT NULL, 207 name CHAR(50) NOT NULL, 208 sex CHAR(4) NOT NULL, 209 PRIMARY KEY (id) 210 ); 211 INSERT INTO t1() VALUES(1,'2020-01-01',23.6), (2,'2020-01-01',89.6), (3,'2020-01-02',45.6); 212 INSERT INTO t1() VALUES(4,'2020-01-01',66.6), (5,'2020-01-03',17.6), (6,'2020-01-03',123.6); 213 INSERT INTO t2() VALUES(1,'jaca','F'), (2,'mecan','M'),(3,'right','F'),(4,'rodia','M'); 214 INSERT INTO t2() VALUES(5,'hila','F'), (6,'pika','M'); 215 SELECT DATE(d1), MAX(salary) FROM t1 GROUP BY d1 ORDER BY MAX(salary) DESC; 216 SELECT DATE(d1), MAX(salary) FROM t1 GROUP BY d1 ORDER BY MAX(salary) ASC; 217 SELECT DATE(d1), MAX(salary) FROM t1 JOIN t2 ON t1.id = t2.id GROUP BY d1 ORDER BY MAX(salary) DESC; 218 219 -- NULL LAST/FIRST 220 -- Single table 221 DROP TABLE IF EXISTS t1; 222 CREATE TABLE t1( 223 id INT, 224 name CHAR(20), 225 PRIMARY KEY(id) 226 ); 227 INSERT INTO t1() VALUES(1, 'jacak'), (2, 'tommy'), (3, 'rorgdbs'), (4, NULL); 228 SELECT * FROM t1 ORDER BY name ASC; 229 SELECT * FROM t1 ORDER BY name DESC, id ASC; 230 SELECT * FROM t1 ORDER BY name ASC NULLS LAST; 231 SELECT * FROM t1 ORDER BY name ASC NULLS FIRST; 232 SELECT * FROM t1 ORDER BY name ASC NULLS FIRST LAST; 233 234 DROP TABLE IF EXISTS t1; 235 CREATE TABLE t1( 236 id INT, 237 name CHAR(20), 238 salary FLOAT, 239 dept INT, 240 PRIMARY KEY(id) 241 ); 242 INSERT INTO t1() VALUES(1,'bdkia',133.1,11), (2, 'dodro',983.6,NULL), (3, 'fafeaz',301.5,10), (4, NULL,NULL,13); 243 SELECT * FROM t1 WHERE id > 1 ORDER BY id DESC, salary NULLS FIRST; 244 SELECT * FROM t1 WHERE id BETWEEN 1 AND 4 ORDER BY id DESC, dept NULLS LAST, salary DESC NULLS FIRST; 245 SELECT id,name FROM t1 ORDER BY salary DESC NULLS FIRST, dept DESC NULLS LAST, name ASC NULLS FIRST; 246 247 -- JOIN -> ORDER BY...NULLS LAST/FIRST 248 DROP TABLE IF EXISTS t1; 249 DROP TABLE IF EXISTS t2; 250 CREATE TABLE t1( 251 id INT, 252 name CHAR(20), 253 PRIMARY KEY(id) 254 ); 255 CREATE TABLE t2( 256 id INT, 257 nation CHAR(20), 258 PRIMARY KEY(id) 259 ); 260 INSERT INTO t1() VALUES(1, 'jacak'), (2, 'tommy'), (3, 'roses'), (4, NULL); 261 INSERT INTO t2() VALUES(1, 'US'), (2, 'UK'), (3, NULL), (4, NULL), (5, NULL); 262 SELECT * FROM t1 JOIN t2 ON t1.id = t2.id ORDER BY name DESC NULLS FIRST; 263 SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id ORDER BY name ASC NULLS LAST; 264 SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id ORDER BY name ASC, nation DESC NULLS LAST; 265 SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id ORDER BY name DESC, nation ASC NULLS FIRST; 266 267 -- NO primary key 268 DROP TABLE IF EXISTS t1; 269 DROP TABLE IF EXISTS t2; 270 CREATE TABLE t1( 271 id INT, 272 sex CHAR(20) 273 ); 274 CREATE TABLE t2( 275 id INT, 276 home CHAR(20) 277 ); 278 INSERT INTO t1() VALUES(1, 'F'), (2, 'M'), (NULL, 'M'), (4, NULL), (NULL, NULL); 279 INSERT INTO t2() VALUES(1, 'EU'), (2, 'UK'), (3, NULL), (4, NULL), (5, NULL), (NULL, NULL); 280 SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id ORDER BY sex ASC NULLS LAST; 281 SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id ORDER BY home ASC NULLS FIRST; 282 SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id ORDER BY home ASC, sex DESC NULLS FIRST;