mysql-04

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

1. 數(shù)據(jù)類型 
2. 列屬性
primary  key 
unique 
not null 
default 
auto_increment 
unsigned 
comment 

3. 各種SQL語(yǔ)句使用場(chǎng)景
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. 命令記不住
命令太長(zhǎng)

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)的使用語(yǔ)法
1.3.1 select語(yǔ)法執(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ù)庫(kù)下表介紹
SHOW TABLES FROM world;
city(城市): 
DESC city;
id: 自增的無關(guān)列君编,數(shù)據(jù)行的需要
NAME: 城市名字 
countrycode:城市所在的國(guó)家代號(hào)拆火,CHN,USA,JPN歧譬。。陷猫。秫舌。
district : 城市的所在的區(qū)域,中國(guó)是省的意思烙丛,美國(guó)是洲的意思
population: 城市的人口數(shù)量
說明: 此表是歷史數(shù)據(jù)锰什,僅供學(xué)習(xí)交流使用紊搪。

熟悉業(yè)務(wù):
剛?cè)肼殨r(shí)霹疫,DBA的任務(wù)
1. 搞清楚架構(gòu) 
通過公司架構(gòu)圖舌界,搞清楚數(shù)據(jù)庫(kù)的物理架構(gòu)
1-2天
邏輯結(jié)構(gòu):
(1)生產(chǎn)庫(kù)的信息(容易達(dá)到)
(2)庫(kù)下表的信息(非常復(fù)雜)
    1. 開發(fā)和業(yè)務(wù)人員,搞好關(guān)系
    2. 搞到ER圖(PD)
    3. 啥都沒有怎么怎么辦忘蟹?
       (1) 找到建表語(yǔ)句飒房,如果有注釋,讀懂注釋媚值。如果沒有注釋狠毯,只能根據(jù)列名翻譯
       (2) 找到表中部分?jǐn)?shù)據(jù) ,分析數(shù)據(jù)特點(diǎn)褥芒,達(dá)到了解列功能的目錄

1.3.3 where
--- 1.3.3 WHERE

--- 例子:
--- WHERE 配合 等值查詢(=)
--- 查詢中國(guó)的城市信息
SELECT *   
FROM   world.city  
WHERE  countrycode='CHN';
--- 查詢美國(guó)的城市信息
SELECT *   
FROM   world.city  
WHERE  countrycode='USA';

--- WHERE 配合 不等值(> < >= <=  <>)
--- 查詢一下世界上人口小于100人的城市
SELECT *   
FROM   world.city  
WHERE population<100;

--- 查詢世界上人口大于10000000的城市
略嚼松。

--- WHERE 配合 模糊(LIKE)
--- 查詢國(guó)家代號(hào)是C開頭的城市
SELECT *  
FROM   world.city  
WHERE countrycode 
LIKE 'C%';

--- 注意:like 語(yǔ)句在MySQL中嫡良,不要出現(xiàn)%在前面的情況。因?yàn)樾屎艿拖仔铮蛔咚饕?--- 錯(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;

--- 查詢一下中國(guó)或美國(guó)的城市信息
SELECT * 
FROM city 
WHERE countrycode='CHN' OR countrycode='USA';

SELECT * 
FROM city 
WHERE countrycode IN ('CHN','USA');

建議改寫為寝受,以下語(yǔ)句:
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è)國(guó)家的總?cè)丝?
SELECT   countrycode,SUM(population) FROM city GROUP BY countrycode ;
--- 統(tǒng)計(jì)每個(gè)國(guó)家的城市個(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è)國(guó)家的省名字列表
SELECT countrycode,GROUP_CONCAT(district)  FROM city GROUP BY countrycode;

--- 統(tǒng)計(jì)中國(guó)每個(gè)省的城市名列表
SELECT  District,GROUP_CONCAT(NAME) 
FROM city 
WHERE countrycode='CHN'
GROUP BY district;

--- 統(tǒng)計(jì)一下中國(guó),每個(gè)省的總?cè)丝跀?shù)
SELECT  district ,SUM(population) FROM city 
WHERE countrycode='CHN'
GROUP BY district 

--- 統(tǒng)計(jì)一下中國(guó),每個(gè)省的平均人口
SELECT  district ,AVG(population) FROM city 
WHERE countrycode='CHN'
GROUP BY district 

--- 1.3.5 HAVING

--- 統(tǒng)計(jì)中國(guó)很澄,每個(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  ;

--- 例子:查詢中國(guó)所有的城市甩苛,并以人口數(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張測(cè)試表的關(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人的城市,所在國(guó)家的國(guó)土面積(城市名爱葵,國(guó)家名,國(guó)土面積)
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人的國(guó)家名反浓,城市名,國(guó)土面積
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ì)一下每門課程的總成績(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;

2. show  
3. Information_schema
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市藤乙,隨后出現(xiàn)的幾起案子猜揪,更是在濱河造成了極大的恐慌,老刑警劉巖坛梁,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件而姐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡划咐,警方通過查閱死者的電腦和手機(jī)拴念,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褐缠,“玉大人政鼠,你說我怎么就攤上這事《游海” “怎么了公般?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我官帘,道長(zhǎng)瞬雹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任遏佣,我火速辦了婚禮挖炬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘状婶。我一直安慰自己意敛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布膛虫。 她就那樣靜靜地躺著草姻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稍刀。 梳的紋絲不亂的頭發(fā)上撩独,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音账月,去河邊找鬼综膀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛局齿,可吹牛的內(nèi)容都是我干的剧劝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼抓歼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼讥此!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谣妻,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤萄喳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蹋半,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體他巨,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年减江,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闻蛀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡您市,死狀恐怖觉痛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茵休,我是刑警寧澤薪棒,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布手蝎,位于F島的核電站,受9級(jí)特大地震影響俐芯,放射性物質(zhì)發(fā)生泄漏棵介。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一吧史、第九天 我趴在偏房一處隱蔽的房頂上張望邮辽。 院中可真熱鬧,春花似錦贸营、人聲如沸吨述。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)揣云。三九已至,卻和暖如春冰啃,著一層夾襖步出監(jiān)牢的瞬間邓夕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工阎毅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焚刚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓扇调,卻偏偏與公主長(zhǎng)得像汪榔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肃拜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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