第一章 SQL

一、SQL查詢基本結(jié)構(gòu)

1. 單關(guān)系查詢

① distinct:刪除重復(fù)

select distinct dept_name from instructor;

② all:顯示指明不去除重復(fù)

select all dept_name from instructor;

③ 運(yùn)算符的算術(shù)表達(dá)式:+厢岂、-帜平、*宁赤、/

select salary * 1.1 from instructor;

④ as:old-name as new-name

找出滿足下列條件的所有教師的姓名,他們比Biology系教師的最低工資要高店展。

select T.name, S.course_id from instructor as T, teaches as S where T.ID = S.ID;

如果沒用as關(guān)鍵字的話渐逃,instructor

⑤ 字符串運(yùn)算:字符串上可以使用like操作符來實(shí)現(xiàn)模式匹配

百分號(%):匹配任意字符串

下劃線(_):匹配任意一個字符

找出所在建筑名稱中包含子串 'Waston' 的所有系名

select dept_name from department where building like '%Waston%';

2. 多關(guān)系查詢

查詢教師的姓名伐谈,以及所在系名和系所在的建筑名

select name, instructor.dept_name, building from instructor, department where instructor.dept_name = department.dept_name;

select name, course_id from instructor, teaches where instructor.ID = teaches.ID and instructor.dept_name = 'Comp.Sei';

① natural join:考慮這樣的元組烂完,來自關(guān)系a的元組和來自關(guān)系b的元組在共同屬性ID上的卻只相同

select name, course_id from instructor, teaches where instructor.ID = teaches.ID;

可改寫為

select name, course_id from instructor natural join teaches;

為了發(fā)揚(yáng)自然連接的優(yōu)點(diǎn),同時避免不必要的相等屬性帶來的危險诵棵,可以采用join...using...

select name, title from teaches natural join instructor, course where teaches.course_id = course.course_id;

與下面的自然連接不等

select name, title from teaches natural join instructor natural join course;

因?yàn)閠eaches和instructor關(guān)系的自然連接的結(jié)果中有course_id和dept_name是相同屬性抠蚣,所以與course自然連接的時候會使用這兩個屬性。

使用join using 得到正確的結(jié)果

select name, title from (instructor natural join teaches) join course using (course_id);

except:兩個集合求差非春,出現(xiàn)在A中卻不出現(xiàn)在B中

select course_id from section where semester = 'Fall' and year = 2009

except

select course_id from section where semester = 'Spring' and year = 2010;

得到存在于09年秋但不存在于10年春的所有課程柱徙。

Having子句:作用于分組

與select相似,任何出現(xiàn)在having子句中奇昙,但沒有被聚集(聚集函數(shù))的屬性必須出現(xiàn)在group by子句中护侮,否則查詢就被當(dāng)成錯誤的。

包含聚集储耐、group by和having子句的查詢的含義可通過下列操作序列來定義:

1. 與不帶聚集的查詢情況類似羊初,最先根據(jù)from子句來計(jì)算出一個關(guān)系。

2. 如果出現(xiàn)where子句,where子句中的謂詞將應(yīng)用到from子句的結(jié)果關(guān)系上长赞。

3. 如果出現(xiàn)group by子句晦攒,滿足where謂詞的元組通過group by子句形成分組。如果沒有g(shù)roup by子句得哆,滿足where謂詞的整個元組被當(dāng)做一個分組脯颜。

4. 如果出現(xiàn)having子句,它將作用在每個分組上贩据,不滿足having子句的分組被拋棄栋操。

5. select子句利用剩下的分組產(chǎn)生出查詢結(jié)果中的元組,即在每個分組上應(yīng)用聚集函數(shù)來得到單個元組饱亮。

= some 等價于in矾芙,<>all 等價于not in

exists

not exists

Mysql 不支持 with語句

MySQL create table 例子:注意foreign key reference

create table course

(course_id varchar(8),

title varchar(50),

dept_name varchar(20),

credits numeric(2,0) check (credits > 0),

primary key (course_id),

foreign key (dept_name) references department (dept_name)

on delete set null

);

學(xué)校數(shù)據(jù)庫其中一些table

習(xí)題:

3.1:

a. select title from course where dept_name = 'Comp. Sci.' and credits = 3;

b. select distinct ID from student natural join takes where course_id in ( select course_id from instructor natural join teaches where name = 'Einstein');

c. select name from instructor where salary = (select max(salary) from instructor);

d. select course_id, sec_id, count(ID) from takes where semester = 'Fall' and year = 2009 group by course_id, sec_id;

e. select max(num) from ( select course_id, count(ID) as num from takes where semester = 'Fall' and year = 2009 group by course_id) t;

f.?

mysql without with clause

mysql> select a.course_id, a.sec_id from (

-> select course_id, sec_id, count(ID) as num from takes where semester = 'Fall' and year = 2009 group by course_id, sec_id

-> ) as a where a.num = (

-> select max(b.num) from (

-> select course_id, sec_id, count(ID) as num from takes where semester = 'Fall' and year = 2009 group by course_id, sec_id

-> ) as b

-> );

3.2:

a. select sum(points * credits) from (takes natural join course) natural join grade_points where ID = '12345';

b. select sum(points * credits)/sum(credits) from (takes natural join course) natural join grade_points where ID = '12345';

c. select ID, sum(points * credits) / sum(credits) from (takes natural join course) natural join grade_points group by ID;

3.3

a. update instructor set salary = salary * 1.1 where dept_name = 'Comp. Sci.';

b. delete from course where course_id not in (select course_id from section);

c. insert into instructor (select ID, name, dept_name, 10000 from student where tot_cred > 100);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市近上,隨后出現(xiàn)的幾起案子剔宪,更是在濱河造成了極大的恐慌,老刑警劉巖壹无,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葱绒,死亡現(xiàn)場離奇詭異,居然都是意外死亡斗锭,警方通過查閱死者的電腦和手機(jī)哈街,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拒迅,“玉大人,你說我怎么就攤上這事她倘¤滴ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵硬梁,是天一觀的道長前硫。 經(jīng)常有香客問我,道長荧止,這世上最難降的妖魔是什么屹电? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮跃巡,結(jié)果婚禮上危号,老公的妹妹穿的比我還像新娘。我一直安慰自己素邪,他們只是感情好外莲,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般偷线。 火紅的嫁衣襯著肌膚如雪磨确。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天声邦,我揣著相機(jī)與錄音乏奥,去河邊找鬼。 笑死亥曹,一個胖子當(dāng)著我的面吹牛邓了,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歇式,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼驶悟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了材失?” 一聲冷哼從身側(cè)響起痕鳍,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎龙巨,沒想到半個月后笼呆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旨别,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年诗赌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秸弛。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡铭若,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出递览,到底是詐尸還是另有隱情叼屠,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布绞铃,位于F島的核電站镜雨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏儿捧。R本人自食惡果不足惜荚坞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菲盾。 院中可真熱鬧颓影,春花似錦、人聲如沸懒鉴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咆畏,卻和暖如春南捂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旧找。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工溺健, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钮蛛。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓鞭缭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親魏颓。 傳聞我的和親對象是個殘疾皇子岭辣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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

  • 數(shù)據(jù)庫中,如果用SQL語言進(jìn)行多個表的查詢甸饱,就需要用到連接操作沦童。這里對SQL中的連接類型進(jìn)行簡單的介紹。本文內(nèi)容可...
    SpaceCat閱讀 4,065評論 1 11
  • 基本運(yùn)算每一種基本運(yùn)算的結(jié)果都是一個新的關(guān)系叹话,可以用這個關(guān)系繼續(xù)參與運(yùn)算偷遗,借此便可進(jìn)行復(fù)雜的運(yùn)算 選擇運(yùn)算(sel...
    SunnyQjm閱讀 24,133評論 3 19
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,226評論 0 7
  • 5.多表查詢 多表查詢 目的:從多張表獲取數(shù)據(jù) 前提:進(jìn)行連接的多張表中有共同的列 等連接 通過兩個表具有相同意義...
    喬震閱讀 1,209評論 0 0
  • 分別總是在九月,回憶是思念的愁驼壶,深秋嫩綠的垂柳氏豌,親吻我額頭… ...
    楠木糊糊閱讀 831評論 0 0