PostgreSQL Parse Tree

PostgreSQL接收SQL語句之后并扇,Parser將SQL語句解析成分析樹(ParseTree)琼腔。

有如下四個表:

create table class(
    classno varchar(20),
    classname varchar(30),
    gno varchar(20)
);

create table student(
    sno varchar(20),
    sname varchar(30),
    sex varchar(5),
    age integer,
    nation varchar(20),
    classno varchar(20)
);

create table course(
    cno varchar(20),
    cname varchar(30),
    credit integer,
    priorcourse varchar(20)
);

create table sc(
    sno varchar(20),
    cno varchar(20),
    score integer
);

在上面四個表上執(zhí)行如下SQL語句:

select classno,classname,avg(score) as avg_score
from sc,(select * from class where class.gno = '2005') as sub
where sc.sno in (select sno from student where student.classno = sub.classno)
and sc.cno in (select course.cno from course where course.cname = '高等代數(shù)')
group by classno, classname
having avg(score) > 80.0
order by avg_score;

經(jīng)過Parser之后,SQL語句被轉(zhuǎn)換為解析樹斟叼。對于上面的SQL語句偶惠,其對應(yīng)的解析樹如下圖所示:

parse tree

SelectStmt

/* ----------------------
 *      Select Statement
 *
 * A "simple" SELECT is represented in the output of gram.y by a single
 * SelectStmt node; so is a VALUES construct.  A query containing set
 * operators (UNION, INTERSECT, EXCEPT) is represented by a tree of SelectStmt
 * nodes, in which the leaf nodes are component SELECTs and the internal nodes
 * represent UNION, INTERSECT, or EXCEPT operators.  Using the same node
 * type for both leaf and internal nodes allows gram.y to stick ORDER BY,
 * LIMIT, etc, clause values into a SELECT statement without worrying
 * whether it is a simple or compound SELECT.
 * ----------------------
 */
typedef enum SetOperation
{
    SETOP_NONE = 0,
    SETOP_UNION,
    SETOP_INTERSECT,
    SETOP_EXCEPT
} SetOperation;

typedef struct SelectStmt
{
    NodeTag     type;

    /*
     * These fields are used only in "leaf" SelectStmts.
     */
    List       *distinctClause; /* NULL, list of DISTINCT ON exprs, or
                                 * lcons(NIL,NIL) for all (SELECT DISTINCT) */
    IntoClause *intoClause;     /* target for SELECT INTO */
    List       *targetList;     /* the target list (of ResTarget) */
    List       *fromClause;     /* the FROM clause */
    Node       *whereClause;    /* WHERE qualification */
    List       *groupClause;    /* GROUP BY clauses */
    Node       *havingClause;   /* HAVING conditional-expression */
    List       *windowClause;   /* WINDOW window_name AS (...), ... */

    /*
     * In a "leaf" node representing a VALUES list, the above fields are all
     * null, and instead this field is set.  Note that the elements of the
     * sublists are just expressions, without ResTarget decoration. Also note
     * that a list element can be DEFAULT (represented as a SetToDefault
     * node), regardless of the context of the VALUES list. It's up to parse
     * analysis to reject that where not valid.
     */
    List       *valuesLists;    /* untransformed list of expression lists */

    /*
     * These fields are used in both "leaf" SelectStmts and upper-level
     * SelectStmts.
     */
    List       *sortClause;     /* sort clause (a list of SortBy's) */
    Node       *limitOffset;    /* # of result tuples to skip */
    Node       *limitCount;     /* # of result tuples to return */
    List       *lockingClause;  /* FOR UPDATE (list of LockingClause's) */
    WithClause *withClause;     /* WITH clause */

    /*
     * These fields are used only in upper-level SelectStmts.
     */
    SetOperation op;            /* type of set op */
    bool        all;            /* ALL specified? */
    struct SelectStmt *larg;    /* left child */
    struct SelectStmt *rarg;    /* right child */
    /* Eventually add fields for CORRESPONDING spec here */
} SelectStmt;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朗涩,隨后出現(xiàn)的幾起案子忽孽,更是在濱河造成了極大的恐慌,老刑警劉巖谢床,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兄一,死亡現(xiàn)場離奇詭異,居然都是意外死亡识腿,警方通過查閱死者的電腦和手機出革,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渡讼,“玉大人骂束,你說我怎么就攤上這事〕审铮” “怎么了展箱?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蹬昌。 經(jīng)常有香客問我混驰,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任账胧,我火速辦了婚禮竞慢,結(jié)果婚禮上先紫,老公的妹妹穿的比我還像新娘治泥。我一直安慰自己,他們只是感情好遮精,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布居夹。 她就那樣靜靜地躺著,像睡著了一般本冲。 火紅的嫁衣襯著肌膚如雪准脂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天檬洞,我揣著相機與錄音狸膏,去河邊找鬼。 笑死添怔,一個胖子當(dāng)著我的面吹牛湾戳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播广料,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砾脑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艾杏?” 一聲冷哼從身側(cè)響起韧衣,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎购桑,沒想到半個月后畅铭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡勃蜘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年硕噩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片元旬。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榴徐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匀归,到底是詐尸還是另有隱情坑资,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布穆端,位于F島的核電站袱贮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏体啰。R本人自食惡果不足惜攒巍,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一嗽仪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柒莉,春花似錦闻坚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跨蟹,卻和暖如春雳殊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗轩。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工夯秃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痢艺。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓仓洼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腹备。 傳聞我的和親對象是個殘疾皇子衬潦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL植酥、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,519評論 0 4
  • 在前面的文章《spark基礎(chǔ)(上篇)》和《spark基礎(chǔ)(下篇)》里面已經(jīng)介紹了spark的一些基礎(chǔ)知識镀岛,知道了s...
    ZPPenny閱讀 21,638評論 2 36
  • 在PostgreSQL中,Parser將SQL語句解析成ParseTree友驮,ParseTree只是簡單記錄SQL語...
    DavidLi2010閱讀 2,330評論 0 53
  • 1. SQL/PLSQL簡述 SQL語句是指單條可以直接執(zhí)行的語句漂羊,例如: select * from xxxx_...
    櫝夜閱讀 1,557評論 0 1
  • 真好媽媽在睡覺,沒人打擾我 這個案例是媽媽說的卸留,是一個五歲的孩子自殺了走越,小孩寫了遺書,說爸爸耻瑟,小媽老打我旨指,我受不了...
    烏小四閱讀 133評論 0 1