你能答对几道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;

时间: 2024-10-03 12:12:40

你能答对几道SQL题?的相关文章

关于SQL的几道小题详解(sql进阶)_MsSql

当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样的惯性思维其实早在我们度高中的时候就被领教了,所谓"万变不离其宗"吧.以下各题来自日常所见,或QQ群,或面试题,或博客园. 题目一:如下表所示,现需要按照收款员统计收款和退款合计金额. 实现结果需如下显示: 分析:想要的结果(记为表B)和源数据(记为表A)相比,有共同的列(收款员),不同的是表A的金额根据标记和收款

关于SQL的几道小题详解(sql进阶)

当我们拿到题目的时候,并不是急于作答,那样会得不偿失的,而是分析思路,采用什么方法,达到什么目的,还要思考有没有简单的方法或者通用的方法等等,这样才会达到以一当十的效果,这样的惯性思维其实早在我们度高中的时候就被领教了,所谓"万变不离其宗"吧.以下各题来自日常所见,或QQ群,或面试题,或博客园. 题目一:如下表所示,现需要按照收款员统计收款和退款合计金额. 实现结果需如下显示: 分析:想要的结果(记为表B)和源数据(记为表A)相比,有共同的列(收款员),不同的是表A的金额根据标记和收款

一道 SQL 题 ... (关于树型结构的在关系表中的存储及其应用处理)

树型结构 相关讨论连接:http://expert.csdn.net/Expert/TopicView1.asp?id=1477009原题:表:Tree (ID [Integer],ParentID [Integer],Remark [varchar]) INSERT INTO Tree (ID,ParentID)        SELECT 1,0    UNION ALL       SELECT 2,1    UNION ALL       SELECT 3,1    UNION ALL 

c-这道编程题为什么会是答案错误?

问题描述 这道编程题为什么会是答案错误? 已知线性表 LA 和 LB 中的数据元素按值非递减有序排列,现要求将 LA 和 LB 归并为一个新的线性表 LC, 且 LC 中的数据元素仍然按值非递减有序排列.例如,设LA=(35811) LB=(2689111520) 则LC=(236688911111520)算法描述如下:从上述问题要求可知,LC中的数据元素或是LA中的数据元素,或是LB中的数据元素,则只要先设LC为空表,然后将LA或LB中的元素逐个插入到LC中即可.为使LC中元素按值非递减有序排

avl-一道编程题,不太懂,求教

问题描述 一道编程题,不太懂,求教 AVL树是指左右子树的高度差不超过1,现在有一颗n个节点的 AVL树,问这样的树有多少种,比如n=10,有60种. 解决方案 dp[n][h]表示n个节点高度为h的AVL树的个数. dp[n][h] = dp[m1][h - 1] * dp[m2][h - 1] + 2 * dp[m3][h] * dp[m4][h - 1] 其中 m1 + m2 = n m3 + m4 = n 其中h是logn级别的,所以总的时间复杂度大概是O(n ^ 2 logn). 解决

整数对 acm-一道ACM题有错误无法发现,求教

问题描述 一道ACM题有错误无法发现,求教 Description Gardon和小希玩了一个游戏,Gardon随便想了一个数A(首位不能为0),把它去掉一个数字以后得到另外一个数B,他把A和B的和N告诉了小希,让小希猜想他原来想的数字.不过为了公平起见,如果小希回答的数虽然不是A,但同样能达到那个条件(去掉其中的一个数字得到B,A和B之和是N),一样算小希胜利.而且小希如果能答出多个符合条件的数字,就可以得到额外的糖果. 所以现在小希希望你编写一个程序,来帮助她找到尽可能多的解. 例如,Gar

相当难的SQL题 我自己高不定了! 求哥哥姐姐们~我才20帮小弟一下

问题描述 我有两个表user和releaserelease表user_id外键release_bodyrelease_ip0口口口口口口匿名27斤斤计较解决028哈哈哈哈哈好027sguahubgt00hihadfebuady匿名0巴巴爸爸巴巴爸匿名user表user_iduesrname2732128aaa27321 我想要的结果是usernamerelease_body匿名口口口口口口321斤斤计较解决aaa哈哈哈哈哈好321sguahubgt匿名hihadfebuady匿名巴巴爸爸巴巴爸

一个看似简单又复杂的sql题

问题描述 现在有三张表1.教师表(teacher)结构为teacher_id,teacher_name2.学生表(student)结构为student_id,student_name3.教师学生关联表(teacher_students)结构为teacher_id,students前两张就不用说了,第三张的students数据结构如下student_id:is_later;student_id:is_later的结构student_id表示的是学生id,is_later表示是否迟到,现在考虑要展示

帮忙做两道Java题

问题描述 5.某企业为了促销,搞抽奖宣传活动,奖品为新款手机一部,抽奖规则如下:(1)有n个盒子摆成一圈,盒子按顺时针方向依次编号为0,1,2,--,n-1.手机随机放在其中一个盒子中.(n为自然数)(2)从0号盒子开始摸奖,顺时针方向计数,每遇到第m个盒子就摸奖一次.(m为自然数,m<n)(3)直到重新摸到0号盒子为止.例如n=5,m=3,那么摸奖经过的盒子编号依次为0,3,1,4,2,0.请编写一个完整的程序,随机输入n,m(m<n),程序分析手机有没有不被抽中的机会?如果有,概率是多少?