对sql查询的逻辑执行顺序的基本理解是
FROM
为我们提供了基本数据集
WHERE
会过滤基本集数据
SELECT
返回已过滤的数据
在包含子查询的该查询的工作中,我无法全神贯注:-
SELECT name,salary
FROM salary a
WHERE (SELECT count(*)
FROM salary b
WHERE b.salary > a.salary) = 1
我的意思是,当WHERE
正在过滤数据时,但是分别有一个不同的SELECT
,FROM
,WHERE
返回一个数据,然后与外部查询的WHERE
条件进行比较。
那么它如何与外部查询相关联?
我知道这有点直观,但仍然可以很好地执行执行流程。
答案 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中的自适应连接的形式来完成。