你能答對幾道SQL題?

pger_joan發表於2016-07-23

 


        我們使用的是PostgreSQL資料庫,以下是在稽核和優化開發人員SQL時發現的一些問題,現整理共享出來希望對各位有用,每個案例先都構造了一部分資料,然後提一個問題,看是否你能回答出來(記住先不要看執行結果),然後把你的結果和實際結果對比看差異在哪裡,一切的答案在執行計劃中會告訴你。


 


案例1:


DROP TABLE IF EXISTS test1;


CREATE TABLE test1(id INT, name VARCHAR(32));


DROP TABLE IF EXISTS test2;


CREATE TABLE test2(id INT, name VARCHAR(32));


INSERT INTO test1 VALUES(1,`A`),(2,`B`),(3,`C`),(4,`D`);


INSERT INTO test2 VALUES(1,`A`),(2,`B`),(3,NULL),(4,`DD`);


請問這個語句返回什麼結果集


SELECT t1.id,t1.name FROM test1 t1 WHERE t1.name NOT IN (SELECT t2.name FROM test2 t2);


 


 


案例2:


DROP TABLE IF EXISTS test1;


CREATE TABLE test1(id INT, name VARCHAR(32));


DROP TABLE IF EXISTS test2;


CREATE TABLE test2(id INT, name VARCHAR(32));


INSERT INTO test1 VALUES(1,`aa`),(2,`bb`),(3,`cc`);


INSERT INTO test2 VALUES(2,`aaa`),(3,`bbb`);


請問這個語句返回什麼結果集


SELECT a.id,


       a.name,


       b.id,


       b.name


  FROM test1 a


  LEFT JOIN test2 b


    ON a.id = b.id


   AND a.name = `bb`;


請問這個語句返回什麼結果集


SELECT a.id,


       a.name,


       b.id,


       b.name


  FROM test1 a


  LEFT JOIN test2 b


    ON a.id = b.id


 WHERE b.name = `bbb`;


 


 


案例3


DROP TABLE IF EXISTS test1;


CREATE TABLE test1(id INT, name VARCHAR(32));


DROP TABLE IF EXISTS test2;


CREATE TABLE test2(id INT, name VARCHAR(32));


INSERT INTO test1 VALUES(1,`A`),(2,`B`),(3,`C`),(4,`D`);


INSERT INTO test2 VALUES(1,`A`),(1,`B`),(3,NULL),(4,`DD`);


請問這個語句是否會報錯


SELECT COUNT(*)


  FROM (SELECT t1.id,


               (SELECT t2.name FROM test2 t2 WHERE t1.id = t2.id)


          FROM test1 t1) t;


 


 


案例4


DROP TABLE IF EXISTS test1;


CREATE TABLE test1(id INT, name VARCHAR(32));


DROP TABLE IF EXISTS test2;


CREATE TABLE test2(id1 INT, name VARCHAR(32));


INSERT INTO test1 VALUES(1,`A`),(2,`B`),(3,`C`),(4,`D`);


INSERT INTO test2 VALUES(1,`A`),(1,`B`);


請問這個返回什麼結果集


SELECT * FROM test1 WHERE id IN (SELECT id FROM test2);


 


 


案例5


DROP TABLE IF EXISTS test1;


CREATE TABLE test1(id INT);


INSERT INTO test1 VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);


請問這個返回什麼結果集


SELECT COUNT(id < 5) FROM test1;




相關文章