6-18 SQL基礎(chǔ)應(yīng)用

上節(jié)重點(diǎn)難點(diǎn)回顧:

1. 數(shù)據(jù)類型

2. 列屬性

primary? key

unique

not null

default

auto_increment

unsigned

comment

3. 各種SQL語句使用場景

DDL: create database? create table drop database drop table alter database alter table truncate

DML : insert? update? delete

insert into? oldguo(name,age,gender)

values

('zhangsan',18,'m'),

('zhs',18,'m');

update? where

delete? where

4. 命令記不住

命令太長

collation 校對(duì)規(guī)則

大小寫是否敏感

=============================我是分割線===============================

1. select

1.1 作用

獲取MySQL中的數(shù)據(jù)行

1.2 單獨(dú)使用select

1.2.1 select @@xxxx;獲取參數(shù)信息鲫惶。

mysql> select @@port;

mysql> show variables like '%innodb%';

1.2.2 select 函數(shù)();

mysql> select database();

mysql> select now();

mysql> select version();

1.3 SQL92標(biāo)準(zhǔn)的使用語法

1.3.1 select語法執(zhí)行順序(單表)

select開始 ---->

from子句 --->

where子句--->

group by子句--->

select后執(zhí)行條件--->

having子句 ---->

order by ---->

limit

--- 1.3.2 FROM

--- 例子:查詢city表中的所有數(shù)據(jù)

USE world;

SELECT * FROM city;? --->適合表數(shù)據(jù)行較少暑椰,生產(chǎn)中使用較少。

SELECT * FROM world.city;

--- 例子: 查詢name和population的所有值

SELECT NAME , population FROM city;

SELECT NAME , population FROM world.city;

單表查詢練習(xí)環(huán)境:world數(shù)據(jù)庫下表介紹

SHOW TABLES FROM world;

city(城市):

DESC city;

id: 自增的無關(guān)列政溃,數(shù)據(jù)行的需要

NAME: 城市名字

countrycode:城市所在的國家代號(hào)杈湾,CHN,USA,JPN。。析恢。。

district : 城市的所在的區(qū)域秧饮,中國是省的意思映挂,美國是洲的意思

population: 城市的人口數(shù)量

說明: 此表是歷史數(shù)據(jù),僅供學(xué)習(xí)交流使用盗尸。

熟悉業(yè)務(wù):

剛?cè)肼殨r(shí)柑船,DBA的任務(wù)

1. 搞清楚架構(gòu)

通過公司架構(gòu)圖,搞清楚數(shù)據(jù)庫的物理架構(gòu)

1-2天

邏輯結(jié)構(gòu):

(1)生產(chǎn)庫的信息(容易達(dá)到)

(2)庫下表的信息(非常復(fù)雜)

? ? 1. 開發(fā)和業(yè)務(wù)人員泼各,搞好關(guān)系

? ? 2. 搞到ER圖(PD)

? ? 3. 啥都沒有怎么怎么辦鞍时?

? ? ? (1) 找到建表語句,如果有注釋,讀懂注釋逆巍。如果沒有注釋及塘,只能根據(jù)列名翻譯

? ? ? (2) 找到表中部分?jǐn)?shù)據(jù) ,分析數(shù)據(jù)特點(diǎn)锐极,達(dá)到了解列功能的目錄

1.3.3 where

--- 1.3.3 WHERE

--- 例子:

--- WHERE 配合 等值查詢(=)

--- 查詢中國的城市信息

SELECT *?

FROM? world.city?

WHERE? countrycode='CHN';

--- 查詢美國的城市信息

SELECT *?

FROM? world.city?

WHERE? countrycode='USA';

--- WHERE 配合 不等值(> < >= <=? <>)

--- 查詢一下世界上人口小于100人的城市

SELECT *?

FROM? world.city?

WHERE population<100;

--- 查詢世界上人口大于10000000的城市

略笙僚。

--- WHERE 配合 模糊(LIKE)

--- 查詢國家代號(hào)是C開頭的城市

SELECT *?

FROM? world.city?

WHERE countrycode

LIKE 'C%';

--- 注意:like 語句在MySQL中,不要出現(xiàn)%在前面的情況灵再。因?yàn)樾屎艿臀犊龋蛔咚饕?/p>

--- 錯(cuò)誤的里

SELECT *?

FROM? world.city?

WHERE countrycode

LIKE '%C%';

--- WHERE 配合 邏輯連接符(AND OR)

--- 查詢城市人口在1w到2w之間的城市

SELECT *

FROM city

WHERE population >= 10000

AND Population <= 20000;

SELECT *

FROM city

WHERE population

BETWEEN 10000 AND 20000;

--- 查詢一下中國或美國的城市信息

SELECT *

FROM city

WHERE countrycode='CHN' OR countrycode='USA';

SELECT *

FROM city

WHERE countrycode IN ('CHN','USA');

建議改寫為,以下語句:

SELECT *

FROM city

WHERE countrycode='CHN'

UNION ALL

SELECT *

FROM city

WHERE countrycode='USA';

--- 1.3.4 GROUP BY 配合聚合函數(shù)應(yīng)用

常用聚合函數(shù):

AVG()

COUNT()

SUM()

MAX()

MIN()

GROUP_CONCAT()

--- 統(tǒng)計(jì)每個(gè)國家的總?cè)丝?/p>

SELECT? countrycode,SUM(population) FROM city GROUP BY countrycode ;

--- 統(tǒng)計(jì)每個(gè)國家的城市個(gè)數(shù)

1.拿什么站隊(duì)

GROUP BY? countrycode

2. 拿什么統(tǒng)計(jì)

城市id檬嘀,name

3. 統(tǒng)計(jì)的是什么槽驶?

COUNT(id)

SELECT countrycode,COUNT(id) FROM city GROUP BY countrycode;

--- 統(tǒng)計(jì)并顯示 每個(gè)國家的省名字列表

SELECT countrycode,GROUP_CONCAT(district)? FROM city GROUP BY countrycode;

--- 統(tǒng)計(jì)中國每個(gè)省的城市名列表

SELECT? District,GROUP_CONCAT(NAME)

FROM city

WHERE countrycode='CHN'

GROUP BY district;

--- 統(tǒng)計(jì)一下中國,每個(gè)省的總?cè)丝跀?shù)

SELECT? district ,SUM(population) FROM city

WHERE countrycode='CHN'

GROUP BY district

--- 統(tǒng)計(jì)一下中國,每個(gè)省的平均人口

SELECT? district ,AVG(population) FROM city

WHERE countrycode='CHN'

GROUP BY district

--- 1.3.5 HAVING

--- 統(tǒng)計(jì)中國,每個(gè)省的總?cè)丝诖笥?000w的省及人口數(shù)

SELECT? district ,SUM(population) FROM city

WHERE countrycode='CHN'

GROUP BY district

HAVING? SUM(population)>10000000

說明: having后的條件是不走索引的鸳兽,可以進(jìn)行一些優(yōu)化手段處理掂铐。

--- 1.3.6 ORDER BY

SELECT? district ,SUM(population) FROM city

WHERE countrycode='CHN'

GROUP BY district

ORDER BY SUM(population) DESC? ;

--- 例子:查詢中國所有的城市,并以人口數(shù)降序輸出

SELECT * FROM city WHERE countrycode='CHN' ORDER BY? population DESC;

--- 1.3.7 LIMIT

SELECT *

FROM city

WHERE countrycode='CHN'

ORDER BY? population DESC

LIMIT 5;

SELECT *

FROM city

WHERE countrycode='CHN'

ORDER BY? population DESC

LIMIT 10;

SELECT *

FROM city

WHERE countrycode='CHN'

ORDER BY? population DESC

LIMIT 5,3;

SELECT *

FROM city

WHERE countrycode='CHN'

ORDER BY? population DESC

LIMIT 3 OFFSET 5;

LIMIT M,N? ? 跳過M行揍异,顯示N行

LIMIT X OFFSET Y 跳過Y行全陨,顯示X行

1.4 多表連接查詢

1.4.1 介紹4張測試表的關(guān)系

略。

1.4.2 什么時(shí)候用衷掷?

需要查詢的數(shù)據(jù)是來自于多張表時(shí)辱姨。

1.4.3 怎么去多表連接查詢

(1)傳統(tǒng)的連接:基于where條件

1. 找表之間的關(guān)系列

2. 排列查詢條件

select name,countrycode from city whrere population<100;

PCN

select name,surfacearea from country where code='PCN'

--- 人口數(shù)量小于100人的城市,所在國家的國土面積(城市名,國家名戚嗅,國土面積)

select city.name,country.name ,country.surfacearea

from city,country

where city.countrycode = country.code

and city.population<100

(2)內(nèi)連接 *****

A? B

A.x? B.y

1. 找表之間的關(guān)系列

2. 將兩表放在join左右

3. 將關(guān)聯(lián)條件了放在on后面

4. 將所有的查詢條件進(jìn)行羅列

select A.m,B.n

from?

A? join? B

on A.x=B.y

where

group by

order by

limit

--- 例子:

--- 1. 查詢?nèi)丝跀?shù)量小于100人的國家名雨涛,城市名,國土面積

SELECT country.name,city.name,country.surfacearea

FROM

city JOIN country

ON city.countrycode=country.code

WHERE city.population<100;

--- 2. 查詢oldguo老師和他教課程名稱

SELECT teacher.tname ,course.cname

FROM teacher

JOIN course

ON teacher.tno=course.tno

WHERE teacher.tname='oldguo';

SELECT teacher.`tname` ,course.`cname`

FROM teacher

JOIN course

ON teacher.`tno`=course.`tno`

WHERE teacher.`tname`='oldboy';

--- 3. 統(tǒng)計(jì)一下每門課程的總成績

SELECT course.cname,SUM(sc.score)

FROM course?

JOIN sc

ON course.cno = sc.cno

GROUP BY course.cname;

-- 5.7 版本會(huì)報(bào)錯(cuò)的情況,在sqlyog中以下操作沒問題

-- 但是在命令行上是會(huì)報(bào)錯(cuò)

SELECT course.cno,course.cname,SUM(sc.score)

FROM course?

JOIN sc

ON course.cno = sc.cno

GROUP BY course.cname;

mysql> SELECT course.cno,course.cname,SUM(sc.score)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? -> FROM course?

? ? -> JOIN sc

? ? -> ON course.cno = sc.cno

? ? -> GROUP BY course.cname;

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'school.course.cno' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

1. 在select后面出現(xiàn)的列懦胞,不是分組條件替久,并且沒有在函數(shù)中出現(xiàn)。

2. 如果group by 后是主鍵列或者是唯一條件列躏尉,不會(huì)報(bào)出錯(cuò)誤蚯根。如下:

SELECT

course.cno,course.cname,SUM(sc.score)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FROM course?

JOIN sc

ON course.cno = sc.cno

GROUP BY course.cno;

(3)外鏈接 ****

自連接(自己了解)

--- 4. 查詢oldguo老師教的學(xué)生姓名列表

SELECT teacher.tname,GROUP_CONCAT(student.sname)

FROM teacher

JOIN course

ON teacher.tno = course.tno

JOIN sc

ON course.cno = sc.cno

JOIN student

ON sc.sno = student.sno

WHERE teacher.tname='oldguo'

GROUP BY teacher.tname;

--- 5. 查詢所有老師教的學(xué)生姓名列表

SELECT teacher.tname,GROUP_CONCAT(student.sname)

FROM teacher

JOIN course

ON teacher.tno = course.tno

JOIN sc

ON course.cno = sc.cno

JOIN student

ON sc.sno = student.sno

GROUP BY teacher.tno;

--- 6. 查詢oldboy老師教的不及格學(xué)生的姓名

SELECT teacher.tname,GROUP_CONCAT(student.sname)

FROM teacher

JOIN course

ON teacher.tno = course.tno

JOIN sc

ON course.cno = sc.cno

JOIN student

ON sc.sno = student.sno

WHERE teacher.tname='oldboy' AND sc.score<60

GROUP BY teacher.tno;

--- 7. 統(tǒng)計(jì)zhang3,學(xué)習(xí)了幾門課

SELECT student.`sname` ,COUNT(sc.`cno`)

FROM student

JOIN sc

ON student.`sno`=sc.`sno`

WHERE student.sname='zhang3';

--- 8. 查詢zhang3,學(xué)習(xí)的課程名稱有哪些?

SELECT student.sname,GROUP_CONCAT(course.`cname`)

FROM student

JOIN sc

ON student.`sno`=sc.`sno`

JOIN course

ON sc.`cno`=course.`cno`

WHERE student.`sname`='zhang3';

--- 9. 查詢oldguo老師教的學(xué)生名.

SELECT teacher.tname,GROUP_CONCAT(student.sname)

FROM teacher

JOIN course

ON teacher.tno = course.tno

JOIN sc

ON course.cno = sc.cno

JOIN student

ON sc.sno = student.sno

WHERE teacher.tname='oldguo'

GROUP BY teacher.tname;

--- 10.查詢oldguo所教課程的平均分?jǐn)?shù)

SELECT teacher.tname ,course.`cname`,AVG(sc.`score`)

FROM teacher

JOIN course

ON teacher.`tno`=course.`tno`

JOIN sc

ON course.`cno`=sc.`cno`

WHERE teacher.tname='oldguo';

--- 11.每位老師所教課程的平均分,并按平均分排序

SELECT teacher.tname ,course.`cname`,AVG(sc.`score`)

FROM teacher

JOIN course

ON teacher.`tno`=course.`tno`

JOIN sc

ON course.`cno`=sc.`cno`

ORDER BY AVG(sc.`score`);

--- 12.查詢oldguo所教的不及格的學(xué)生姓名

SELECT teacher.tname,GROUP_CONCAT(student.sname)

FROM teacher

JOIN course

ON teacher.tno = course.tno

JOIN sc

ON course.cno = sc.cno

JOIN student

ON sc.sno = student.sno

WHERE teacher.tname='oldguo' AND sc.score<60

GROUP BY teacher.tno;

--- 13.查詢所有老師所教學(xué)生不及格的信息

SELECT teacher.tname,GROUP_CONCAT(student.sname)

FROM teacher

JOIN course

ON teacher.tno = course.tno

JOIN sc

ON course.cno = sc.cno

JOIN student

ON sc.sno = student.sno

WHERE sc.score<60;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胀糜,隨后出現(xiàn)的幾起案子颅拦,更是在濱河造成了極大的恐慌,老刑警劉巖教藻,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件距帅,死亡現(xiàn)場離奇詭異,居然都是意外死亡怖竭,警方通過查閱死者的電腦和手機(jī)锥债,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門陡蝇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痊臭,“玉大人哮肚,你說我怎么就攤上這事」愠祝” “怎么了允趟?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸦致。 經(jīng)常有香客問我潮剪,道長,這世上最難降的妖魔是什么分唾? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任抗碰,我火速辦了婚禮,結(jié)果婚禮上绽乔,老公的妹妹穿的比我還像新娘弧蝇。我一直安慰自己,他們只是感情好折砸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布看疗。 她就那樣靜靜地躺著,像睡著了一般睦授。 火紅的嫁衣襯著肌膚如雪两芳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天去枷,我揣著相機(jī)與錄音怖辆,去河邊找鬼。 笑死删顶,一個(gè)胖子當(dāng)著我的面吹牛疗隶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翼闹,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼斑鼻,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了猎荠?” 一聲冷哼從身側(cè)響起坚弱,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎关摇,沒想到半個(gè)月后荒叶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡输虱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年些楣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愁茁,死狀恐怖蚕钦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鹅很,我是刑警寧澤嘶居,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站促煮,受9級(jí)特大地震影響邮屁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菠齿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一佑吝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绳匀,春花似錦迹蛤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陋桂,卻和暖如春逆趣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗜历。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工宣渗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梨州。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓痕囱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親暴匠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鞍恢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,225評(píng)論 0 7
  • 1).創(chuàng)建數(shù)據(jù)庫 create database學(xué)生選課數(shù)據(jù)庫 2).創(chuàng)建四張表 Create table Stu...
    blvftigd閱讀 1,570評(píng)論 0 0
  • 最近打算采用關(guān)系型數(shù)據(jù)庫來理一下公司的運(yùn)營數(shù)據(jù),先拿點(diǎn)東西練手找感覺每窖。下面是幾個(gè)關(guān)于學(xué)生課業(yè)的表帮掉,需要建立一個(gè)數(shù)據(jù)...
    九天朱雀閱讀 971評(píng)論 0 3
  • 說明:以下五十個(gè)語句都按照測試數(shù)據(jù)進(jìn)行過測試,最好每次只單獨(dú)運(yùn)行一個(gè)語句窒典。 問題及描述: --1.學(xué)生表 Stud...
    lijun_m閱讀 1,288評(píng)論 0 1
  • 海洋臨河里門市單獨(dú)成團(tuán) (19+1 精品VIP小團(tuán) ) 3.30日出發(fā)-4.4日回程 老客戶尊享價(jià)格3180元/人...
    2173a787ca3b閱讀 656評(píng)論 0 0