亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

編寫SQL查詢的關鍵—SQL語句的執行順序

2019-11-03 08:35:45
字體:
來源:轉載
供稿:網友
   編寫 SQL 語句是每個程序員應該具備的基本功。在實際開發過程中,需要編寫比較復雜的 SQL 查詢語句是必不可少的,但很多 SQL 書籍上不是簡單的介紹一下就是出最終的查詢語句,編寫復雜 SQL 查詢的具體思路卻沒有多少介紹,這不能不說是一種巨大的遺憾 , 看著一串無比復雜的 SQL 語句,沒有掌握方法的話誰看了都會頭暈 ^-^

回憶一下學習編程語言的經歷( C++,java 等),我們一般都是先學習變量的定義,然后是流程控制語句,接著是函數,類等等。但我們在學習 SQL , SQL 書籍上都普遍忽略了一個重要的方面: SQL 語句的執行順序。 不知道是什么原因,這一點確實沒被多少書籍提過。掌握了SQL語句的執行順序的規律,就能較輕松的編寫出復雜的 SQL 查詢。

  

SQL 語句的執行順序如下:

  

1 、 from 子句組裝來自不同數據源的數據;

2 、 where 子句基于指定的條件對記錄行進行篩選;

3 、 group by 子句將數據劃分為多個分組;

4 、使用聚集函數進行計算;

5 、使用 having 子句篩選分組;

6 、計算所有的表達式;

7 、使用 order by 對結果集進行排序。

  

下面舉一個簡單的例子舉例說明,假設有以下一張表 student :

  

ID
Name
Age

1
Tom
23

2
Jack
25

3
Lucy
15

4
Anay
18

5
Bobby
21


  

要求通過 SQL 語句把年齡大于 20 的學生姓名查出來

  

SQL 語句如下:

  

Select name

From student

Where age>20

結果是:

Tom

Jack

Bobby


  

那對于這個簡單的 SQL 語句,執行順序是怎么樣的呢?

1.       from 子句組裝來自不同數據源的數據,簡單點來說就是要確定查詢的數據來自哪個表。如果 from 關鍵字后跟的表有兩個或以上,就產生笛卡爾積。

2.       where 子句對每個記錄行進行 篩選,把不符合條件的行篩選掉。

3.       針對符合條件的行執行相應的表達式操作,即 select 部分。

  

我們針對前面的寫的 SQL 語句簡單模擬一下執行過程:

1. 確定數據表,我們能根據 from 子句( From student )確定數據是來自下面的的表 student

    

ID
Name
Age

1
Tom
23

2
Jack
25

3
Lucy
15

4
Anay
18

5
Bobby
21


                                    表 1

  

2. 根據 where 子句中的條件( Where age>20 )篩選 記錄行,請留意, where 子句的 篩選是對每一行 from 表中的每一行進行的。

(1)       對于第 1 行

1
Tom
23


  

Age=23>20, 符合條件

  

(2)       對于第 2 行

2
Jack
25


  

Age=25>20, 符合條件

  

(3)       對于第 3 行

3
Lucy
15


  

Age=15<20, 不符合條件

  

(4)       對于第 4 行

4
Anay
18


  

Age=18<20, 不符合條件

  

(5)       對于第 5 行

5
Bobby
21


  

Age=21>20, 符合條件

  

由上述的 (1)(2)(5) 可知,最終符合條件的記錄為下表 2

  

ID
Name
Age

1
Tom
23

2
Jack
25

5
Bobby
21


                 表 2

  

4.       計算所有的表達式,即 Select name 部分,針對表 2 中的數據,最終符合條件的是 3 行,分別從每一行挑選出需要的字段值 name ,最終的結果如下表 3

Name

Tom

Jack

Bobby


                                    表 3

  

下面舉一般比較復雜的例子,有 3 個表 teacher 表, student 表, tea_stu 關系表:


teacher 表 teaID name age
student 表 stuID name age
teacher_student 表 teaID stuID


要求用一條 sql 查詢出這樣的結果
1. 顯示的字段要有老師 name, 每個老師所帶的學生人數
2 只列出老師 age 為 45 以下,學生 age 為 12 以上的記錄

  

先準備測試數據:

  

drop table if exists tea_stu;

drop table if exists teacher;

drop table if exists student;

      create table teacher(teaID int PRimary key,name varchar(50),age int);

      create table student(stuID int primary key,name varchar(50),age int);

      create table tea_stu(teaID int references teacher(teaID),stuID int references student(stuID));

insert into teacher values(1,' Tom',46), (2,' Jack',35) , (3,' Tony',36) , (4,' Lucy',37);

insert into student values(1,' Lili',11), (2,' Anay',15) , (3, 'Bobby',16) , (4, 'Jeff',17);

insert into tea_stu values(1,1), (1,2), (1,3),(2,2), (2,3), (2,4),(3,3), (3,4), (3,1),(4,4), (4,1), (4,2) , (4,3);

  

題目要求是列出 老師所帶的學生數,條件是 老師 age 為 45 以下,學生 age 為 12 以上,最理想的情況是有下面的一個表 , 如圖 1




                                  圖 1

  

如果能構造一個圖 1 的表,那么實現題目要求的 SQL 語句用下面的簡單 SQL 查詢就行:

  

select teacher.name, count(student.name)

from table

where teacher.age<45

   and student.age>12

group by teacher.name;

  

數據庫中學生的信息和老師的信息是分別存放在 student, teacher 表中的,信息的關聯只能依靠 tea_stu ,那么怎么構造圖 1 的表呢?這時候可以用到表的關聯,把這三個表的數據關聯起來, 注意:只要是表的關聯就會產生笛卡爾積,所以務必把笛卡爾積去掉。 關聯表的最小粒度關聯可以 去掉 笛卡爾積,具體的查詢語句為:

select teacher.name, teacher.age,student.name,student.age

from teacher,student,tea_stu

where teacher.teaID=tea_stu.teaID

   and student.stuID=tea_stu.stuID

  

     所以綜合以上所述,就能得出最終的查詢語句

  

select teacher.name, count(student.name) student_num

from teacher,student,tea_stu

where teacher.teaID=tea_stu.teaID

   and student.stuID=tea_stu.stuID

   and teacher.age<45

   and student.age>12

group by teacher.name;

  

結果如圖 2 所示:

  


                      圖 2

  




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日本伦理| 日韩激情片免费| 亚洲男人的天堂在线| 亚洲国产日韩一区| 欧美黄色小视频| 欧美壮男野外gaytube| 国产精品伦子伦免费视频| 91精品国产91久久久久福利| 91po在线观看91精品国产性色| 精品国产1区2区| 精品国产依人香蕉在线精品| 久久久亚洲欧洲日产国码aⅴ| 精品国产欧美一区二区三区成人| 在线观看欧美视频| 国内自拍欧美激情| 91在线精品播放| 国产精品日韩在线播放| 亚洲视屏在线播放| 久久久久久久久电影| 九九久久国产精品| 精品视频在线播放免| 国产精品2018| 亚洲精品视频在线观看视频| 97久久超碰福利国产精品…| 欧美一级淫片aaaaaaa视频| 性欧美xxxx视频在线观看| 中文字幕亚洲一区二区三区| 欧美最猛性xxxxx亚洲精品| 亚洲乱亚洲乱妇无码| 中文字幕亚洲二区| 日韩av在线免费看| 91久久在线视频| 成人激情视频小说免费下载| 欧美性猛交xxxx富婆| 国产成人自拍视频在线观看| 亚洲精品一区二区三区婷婷月| 欧美人与性动交a欧美精品| 中文字幕精品视频| 欧洲亚洲在线视频| 欧美高清不卡在线| 日韩不卡中文字幕| 日韩精品免费一线在线观看| 96sao精品视频在线观看| 亚洲第一视频网| 久久久精品国产一区二区| 国产欧美精品一区二区三区介绍| 91精品久久久久久久久久另类| 国产精品国产福利国产秒拍| 亚洲码在线观看| 国产91精品视频在线观看| 8050国产精品久久久久久| 欧美性感美女h网站在线观看免费| xvideos亚洲人网站| 欧美在线视频一区二区| 久久久国产精品免费| 91日本在线视频| 人人澡人人澡人人看欧美| 欧美一级淫片videoshd| 亚洲激情 国产| 国产精品久久久久久久久影视| 亚洲老头同性xxxxx| 久久久久久免费精品| 欧美一级高清免费| 久久久久五月天| 国产精品一二区| 国产精品女视频| 97超级碰在线看视频免费在线看| 国产精品激情av电影在线观看| 欧美激情videoshd| 亚洲精品国产综合区久久久久久久| 欧美一级bbbbb性bbbb喷潮片| 26uuu久久噜噜噜噜| 国产欧美精品xxxx另类| 日韩精品在线免费观看视频| 另类视频在线观看| 亚洲精品日韩激情在线电影| 精品电影在线观看| 亚洲人成在线观| 久久精品视频在线| 欧美精品videosex极品1| 午夜精品一区二区三区视频免费看| 欧美精品videossex88| 91精品国产777在线观看| 久久99视频精品| 97视频在线播放| 欧美成人午夜视频| 日韩精品一区二区三区第95| 黄色精品在线看| 国产精品美女www爽爽爽视频| 欧美在线观看一区二区三区| 国产精品综合不卡av| 精品国产一区二区三区久久狼5月| 欧美超级乱淫片喷水| 久久国产精品久久精品| 欧美另类精品xxxx孕妇| 久久免费成人精品视频| 日韩电影大全免费观看2023年上| 成人亚洲激情网| 日韩中文字幕在线看| 国色天香2019中文字幕在线观看| 欧美精品久久久久久久| 欧美日韩亚洲一区二| 欧美综合激情网| xxxx欧美18另类的高清| 97视频网站入口| 亚洲国产欧美一区二区丝袜黑人| 欧美日韩爱爱视频| 国产精品福利片| 亚洲中国色老太| 在线亚洲国产精品网| 日韩成人xxxx| 欧美高清视频在线播放| 欧美亚洲视频一区二区| 亚洲精品不卡在线| 日韩精品极品在线观看| 国产精品日韩一区| 最新69国产成人精品视频免费| 欧美激情一级精品国产| 国产精品夫妻激情| 国产精品午夜一区二区欲梦| 亚洲欧美制服丝袜| 欧美大片免费观看在线观看网站推荐| 日韩免费不卡av| 国产一区二区三区日韩欧美| 色一区av在线| 91欧美精品午夜性色福利在线| 黑人巨大精品欧美一区二区| 亚洲性视频网站| 国产精品视频公开费视频| 精品色蜜蜜精品视频在线观看| 日韩视频一区在线| 91av在线精品| 一区国产精品视频| 日韩av电影手机在线| 精品成人av一区| 亚洲成色777777女色窝| 亚洲精品国产免费| 91av视频导航| 国产精品日韩欧美| 国产在线视频欧美| 97视频在线观看网址| 久久国产精品99国产精| 久久精品2019中文字幕| 2019中文字幕免费视频| 91chinesevideo永久地址| 欧美老少做受xxxx高潮| 精品国产精品三级精品av网址| www.久久撸.com| 亚洲国产精品电影| 一本大道久久加勒比香蕉| 日韩精品一区二区三区第95| 伊人青青综合网站| 九色精品美女在线| 91沈先生在线观看| 精品一区二区电影| 大荫蒂欧美视频另类xxxx| 国产啪精品视频| 在线观看日韩视频| 久久噜噜噜精品国产亚洲综合| 国产精品小说在线| 精品视频偷偷看在线观看| 美女视频黄免费的亚洲男人天堂| 美日韩精品视频免费看| 久久久久久久爱|