你能答对几道SQL题?

简介:

 

        我们使用的是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;

目录
相关文章
|
2月前
|
SQL 存储 关系型数据库
《牛客笔试选择题》sql错题集
《牛客笔试选择题》sql错题集
30 0
|
4月前
|
SQL HIVE
几道经典sql练习题
几道经典sql练习题
|
10月前
|
SQL 数据可视化 Oracle
leetcode题集训 sql
leetcode题集训 sql
|
11月前
|
存储 SQL 关系型数据库
《牛客刷题》sql错题集
《牛客刷题》sql错题集
80 0
|
SQL Serverless
|
SQL 移动开发
|
SQL 关系型数据库 MySQL
sql做题第七天
sql必做练习