04-DQL數(shù)據(jù)查詢語言

1.DQL單表數(shù)據(jù)查詢

--------------------------------------------------------------------------------------------old guo

1.SELECT

1.SELECT 單獨(dú)使用

  • 查詢數(shù)據(jù)庫的參數(shù)
SELECT @@port;
SELECT @@datadir;
SELECT @@basedir;
SELECT @@innodb_flush_log_at_trx_commit;
SHOW VARIABLES  LIKE '%trx%';
  • 調(diào)用內(nèi)置函數(shù).
SELECT DATABASE();     查詢當(dāng)前所在數(shù)據(jù)庫
SELECT NOW();       查看時(shí)間
SELECT CONCAT(USER,"@",HOST) FROM mysql.user;      合并
SELECT GROUP_CONCAT(xid) FROM student;      將列合并
SELECT SUM(xid) FROM student;    xid列求和
  • 簡易計(jì)算器
    SELECT 4*5;

2.select 配合其他子句使用

子句列表介紹

FROM     -- 查詢對(duì)象(表,視圖)
WHERE    -- 過濾子句(grep)
GROUP BY -- 分組子句(統(tǒng)計(jì)分析類)
ORDER BY -- 排序子句
HAVING   -- 后過濾子句
LIMIT    -- 限制子句(分頁子句)
1.配合FROM應(yīng)用
  • 1.查詢表中所有數(shù)據(jù)(cat)
    SELECT * FROM city;
    1. 查詢name和population信息 (awk取列)
      SELECT NAME,population FROM city;
2.select+ from + where(grep)使用
  • where 配合等值查詢
    1.查詢中國所有的城市信息
    SELECT * FROM city WHERE countrycode='CHN';
    2.查詢ID為100的城市信息
    SELECT * FROM city WHERE id=100;
    3.查詢 中國河北省的城市信息
    SELECT * FROM city WHERE countrycode='CHN' AND district='hebei';
    4.查詢 中國或者美國的城市
    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' ;
  • where 配合范圍查詢
    1.查詢?nèi)丝跀?shù)量小于100人的城市
    SELECT * FROM city WHERE population<100;
    2.查詢?nèi)丝跀?shù)量100w-200w之間的
    SELECT * FROM city WHERE population>=1000000 AND population<=2000000 ;
    或者:
    SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000 ;
    3.查詢國家代號(hào)是CH開頭的城市信息
    SELECT * FROM city WHERE countrycode LIKE 'CH%';
3.group by 分組子句+聚合函數(shù)應(yīng)用

聚合函數(shù)?

COUNT()  -- 計(jì)數(shù)
SUM()    -- 求和
AVG()    -- 求平均值
MAX()    -- 求最大值
MIN()    -- 最小值
GROUP_CONCAT() -- 聚合列值 
  • 結(jié)果集顯示特點(diǎn): 必須是1v1,不能是1vN
    1.統(tǒng)計(jì)一下每個(gè)國家的人口總數(shù)
    SELECT countrycode,SUM(population) FROM city GROUP BY countrycode;
    2.統(tǒng)計(jì)中國每個(gè)省的人口總數(shù)
    SELECT district,SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district;
    3.統(tǒng)計(jì)下中國每個(gè)省的城市個(gè)數(shù)及城市名.
    SELECT district,COUNT(NAME),GROUP_CONCAT(NAME) FROM city WHERE countrycode='CHN' GROUP BY district;
    4.統(tǒng)計(jì)每個(gè)國家城市個(gè)數(shù)
    SELECT countrycode ,COUNT(NAME) FROM city GROUP BY countrycode;
4.having 后判斷

1.統(tǒng)計(jì)中國每個(gè)省的人口總數(shù),只顯示總?cè)丝跀?shù)大于500w的省信息.
SELECT district,SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district HAVING SUM(population) >=5000000;

6.order by 排序子句

1.查詢中國所有城市信息,人口數(shù)從大到小排序輸出.
SELECT * FROM city WHERE countrycode='CHN' ORDER BY population DESC ;

2..查詢中國所有城市信息,按城市名排序.
SELECT * FROM city WHERE countrycode='CHN' ORDER BY NAME;

3.查詢中國所有省的總?cè)丝?并按總?cè)丝跀?shù)從大到小排序輸出.

SELECT district,SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district ORDER BY SUM(population) DESC;

5.limit 分頁限制子句

limit m offset n 跳過n行顯示m行

查詢中國所有省的總?cè)丝?并按總?cè)丝跀?shù)從大到小排序輸出.

SELECT district,SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district ORDER BY SUM(population) DESC LIMIT 5 OFFSET 1;

SELECT district,SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district ORDER BY SUM(population) DESC LIMIT 10;

SELECT district,SUM(population) FROM city WHERE countrycode='CHN' GROUP BY district ORDER BY SUM(population) DESC LIMIT 1,5;

注意: LIMIT 謹(jǐn)慎使用, 500w+的表.
LIMIT 5000000,100
一般會(huì)改為明確查找范圍

2.DQL多表數(shù)據(jù)查詢

1.介紹
內(nèi)連接  inner join
外連接  left  join right join
笛卡爾  
2.作用

聚合多張表數(shù)據(jù),實(shí)現(xiàn)查詢需求

3.多表連接的語法
  • 內(nèi)連接(交集)
FROM A 
INNER JOIN B 
ON  A.x=B.y
  • 外連接
FROM A 
LEFT JOIN B 
ON  A.x=B.y

FROM A 
RIGHT JOIN B 
ON  A.x=B.y

1.3.3 笛卡爾乘積

FROM A 
JOIN B 
4.多表連接例子

套路1. 找關(guān)聯(lián)表 2. 找關(guān)系列

  • 查詢?nèi)丝跀?shù)小于100人城市名,國家名,國土面積?
SELECT 
  city.name,
  country.name,
  country.surfacearea,
  city.population 
FROM
  city 
  JOIN country 
    ON city.countrycode = country.code 
WHERE city.population < 100  
  • 統(tǒng)計(jì)查詢每位學(xué)員的平均分
SELECT student.xid ,student.xname,AVG(score.score)   
FROM  student
JOIN score 
ON student.xid=score.xid
GROUP BY student.xid,student.xname
  • 統(tǒng)計(jì)每位學(xué)員學(xué)習(xí)了幾門課
SELECT student.xid ,student.xname,COUNT(score.score)   
FROM  student
JOIN score 
ON student.xid=score.xid
GROUP BY student.xid,student.xname 
  • 每位老師教的學(xué)生的個(gè)數(shù)和姓名列表
SELECT teacher.tname,COUNT(student.xid),GROUP_CONCAT(student.xname)
FROM student 
JOIN score 
ON student.xid=score.xid 
JOIN course
ON score.cid=course.cid
JOIN teacher 
ON course.tid=teacher.tid
GROUP BY teacher.tid,teacher.tname;
5.left/right join 外連接應(yīng)用
  • 一般應(yīng)用在強(qiáng)制驅(qū)動(dòng)表時(shí),強(qiáng)制小結(jié)果集驅(qū)動(dòng)大表
  • 生產(chǎn)中可以使用left join 強(qiáng)制 驅(qū)動(dòng)表.盡量減少next loop的出現(xiàn).
  • 為什么要強(qiáng)制? inner join 優(yōu)化器 自動(dòng)選擇, 按照索引選擇的幾率較大
6 補(bǔ)充 別名的應(yīng)用 .
  • 列別名
SELECT 
course.`cname` AS 課程名稱,
GROUP_CONCAT(CASE WHEN score.`score` >= 85 THEN student.xname END )  AS "優(yōu)秀",
GROUP_CONCAT(CASE WHEN score.`score` >=70 AND score.`score` < 85  THEN student.xname  END) AS "良好",
GROUP_CONCAT(CASE WHEN score.`score` >=60  AND score.`score` <70 THEN  student.xname  END  )AS "一般",
GROUP_CONCAT(CASE WHEN score.`score` <60  THEN  student.xname END  ) AS "不及格"
FROM student 
JOIN score
ON student.xid = score.xid 
JOIN course 
ON score.`cid`=course.`cid`
GROUP BY course.`cid`;

說明: 1. 為了顯示的好看. 2. 可以在 having 或 order by 子句中調(diào)用

  • 表別名
SELECT 
CONCAT(te.tname,"_",te.tid) AS "教師名",GROUP_CONCAT(CONCAT(st.xname,":",sc.score))
FROM teacher as te 
JOIN course as  co 
ON te.`tid`=co.`tid`
JOIN score as sc 
ON co.`cid`=sc.`cid`  
JOIN student  as st
ON sc.`xid`=st.`xid`
WHERE sc.`score`<60
GROUP BY te.tid,te.tname;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評(píng)論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,835評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,235評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,459評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,000評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,819評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,004評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,257評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評(píng)論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,717評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,003評(píng)論 2 374

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