mysql 試題

select id from t where num/2=100 和 select id from t where num=100*2
那一條select更爲優化,爲何?優化

select 語句執行順序
(8)SELECT (9)DISTINCT
(11)
(1)FROM
(3)  JOIN
(2)  ON
(4)WHERE
(5)GROUP BY
(6)WITH {CUBE | ROLLUP}
(7)HAVING
(10)ORDER BY
1.FORM: 對FROM的左邊的表和右邊的表計算笛卡爾積。產生虛表VT1
2.ON: 對虛表VT1進行ON篩選,只有那些符合 的行纔會被記錄在虛表VT2中。
3.JOIN: 若是指定了OUTER JOIN(好比left join、 right join),那麼保留表中未匹配的行就會做爲外部行添加到虛擬表VT2中,產生虛擬表VT3, rug from子句中包含兩個以上的表的話,那麼就會對上一個join鏈接產生的結果VT3和下一個表重複執行步驟1~3這三個步驟,一直處處理完全部的表爲止。
4.WHERE: 對虛擬表VT3進行WHERE條件過濾。只有符合 的記錄纔會被插入到虛擬表VT4中。
5.GROUP BY: 根據group by子句中的列,對VT4中的記錄進行分組操做,產生VT5.
6.CUBE | ROLLUP: 對錶VT5進行cube或者rollup操做,產生表VT6.
7.HAVING: 對虛擬表VT6應用having過濾,只有符合 的記錄纔會被 插入到虛擬表VT7中。
8.SELECT: 執行select操做,選擇指定的列,插入到虛擬表VT8中。
9.DISTINCT: 對VT8中的記錄進行去重。產生虛擬表VT9.
10.ORDER BY: 將虛擬表VT9中的記錄按照 進行排序操做,產生虛擬表VT10.
11.LIMIT:取出指定行的記錄,產生虛擬表VT11, 並將結果返回。
排序

--1.學生表
Student(S,Sname,Sage,Ssex) --S 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別
--2.課程表
Course(C,Cname,T) --C --課程編號,Cname 課程名稱,T 教師編號
--3.教師表
Teacher(T,Tname) --T 教師編號,Tname 教師姓名
--4.成績表
SC(S,C,score) --S 學生編號,C 課程編號,score 分數ci

、查詢"李"姓老師的數量it

SELECT COUNT(1) FROM teacherWHERE tname LIKE '李%'io

、查詢沒學過"張三"老師授課的同窗的信息
SELECT a.
FROM student a
LEFT JOIN sc b
ON a.s=b.s
WHERE NOT EXISTS(
SELECT

FROM course aa
INNER JOIN teacher b
ON aa.t=b.t
INNER JOIN sc c
ON aa.c=c.c
WHERE b.tname='張三'
AND c.s=a.s
)
GROUP BY 1,2,3,4table

--、查詢學過編號爲"01"而且也學過編號爲"02"的課程的同窗的信息
SELECT a.*
FROM student a
INNER JOIN sc b
ON a.s=b.s AND b.c='01'
INNER JOIN sc c
ON a.s=c.s AND c.c='02'select

--、查詢沒有學全全部課程的同窗的信息rollup

SELECT a.*
FROM student a
LEFT JOIN sc b
ON a.s=b.s
LEFT JOIN (SELECT COUNT(1) anumFROM course) c
ON 1=1
GROUP BY 1,2,3,4
HAVING MAX(c.anum)>COUNT(b.c)查詢

相關文章
相關標籤/搜索