了解此复杂的SQL查询的内部工作

时间:2018-10-30 12:30:10

标签: sql

对sql查询的逻辑执行顺序的基本理解是

FROM为我们提供了基本数据集

WHERE会过滤基本集数据

SELECT返回已过滤的数据

在包含子查询的该查询的工作中,我无法全神贯注:-

SELECT name,salary 
FROM salary a 
WHERE  (SELECT count(*) 
        FROM salary b 
        WHERE b.salary > a.salary) = 1

我的意思是,当WHERE正在过滤数据时,但是分别有一个不同的SELECTFROMWHERE返回一个数据,然后与外部查询的WHERE条件进行比较。

那么它如何与外部查询相关联?

我知道这有点直观,但仍然可以很好地执行执行流程。

1 个答案:

答案 0 :(得分:1)

括号中的查询称为相关子查询。

这是因为,如果您查看第一个var ObjectData = "object": { "media": { "images": [ { "type": "bird-image", "url": "https://images.pexels.com/photos/326900/pexels-photo-326900.jpeg?auto=compress&cs=tinysrgb&h=350" }, { "type": "bird-image", "url": "https://images.pexels.com/photos/326900/pexels-photo-326900.jpeg?auto=compress&cs=tinysrgb&h=350" }, { "type": "bird-image", "url": "https://images.pexels.com/photos/326900/pexels-photo-326900.jpeg?auto=compress&cs=tinysrgb&h=350" }, { "type": "bird-image", "url": "https://images.pexels.com/photos/326900/pexels-photo-326900.jpeg?auto=compress&cs=tinysrgb&h=350" }, { "type": "bird-image", "url": "https://images.pexels.com/photos/326900/pexels-photo-326900.jpeg?auto=compress&cs=tinysrgb&h=350" } ], } } function createSlickSlider(){ $('.slider-for').slick({ slidesToShow: 1, slidesToScroll: 1, arrows: false, fade: true, asNavFor: '.slider-nav' }); $('.slider-nav').slick({ slidesToShow: 3, slidesToScroll: 1, asNavFor: '.slider-for', dots: true, centerMode: true, focusOnSelect: true }); function appendImages(){ objectData.media.images.forEach(function(value, index){ $(".slider-for").append('<div><img class="image-result-top" src="'+objectData.object.media.images[index].url+'"></div>'); }); objectData.media.images.forEach(function(value, index){ $(".slider-nav").append('<div><img class="image-result-bottom" src="'+objectData.object.media.images[index].url+'"></div>'); }); createSlickSlider(); } appendImages(); ,则它具有工资表FROM的别名,在本例中为FROM salary a

子查询在a条件下引用外部查询,在该条件下它检查嵌套子查询中每一行的条件。

这就是它现在的工作原理,但是查询的实际执行在后台可能取决于数据,可用资源和许多其他因素。

SQL是一种声明性语言,这意味着您只需通过查询就可以告诉它要对数据做什么,然后它会尝试找出返回数据的最佳方式(从性能角度来看)。 / p>

这可以通过嵌套循环,哈希连接或某些较新的RDBMS中的自适应连接的形式来完成。