mysql 復(fù)習(xí)與再學(xué)習(xí)2018-12-23

1. MYSQL安裝

安裝教程沒有data目錄和my-default.ini和my.ini文件以及服務(wù)無法啟動(dòng)的解決辦法以及修改初始密碼的方法

2. Mysql 基礎(chǔ)語法以及常用的命令語句

需要注意:SQL 對(duì)大小寫不敏感:SELECT 與 select 是相同的

(1)提取、更新與刪除

SELECT - 從數(shù)據(jù)庫中提取數(shù)據(jù)??????? ###:相當(dāng)于tag,選取所需“數(shù)據(jù)” ///? +where? 限制條件

UPDATE - 更新數(shù)據(jù)庫中的數(shù)據(jù)??? ###更新數(shù)據(jù)需要進(jìn)行限定where,不然就是全局更改

DELETE - 從數(shù)據(jù)庫中刪除數(shù)據(jù) ###? 限制性類同于update;不刪除表的情況下,刪除表中所有的行:

DELETE FROMtable_name; 或 DELETE *FROMtable_name;

延伸:? SQL關(guān)于刪除的三個(gè)語句:DROP、TRUNCATE、DELETE的區(qū)別。

a. DROP:

DROP test;?????? 刪除表test,并釋放空間,將test刪除的一干二凈。

b. TRUNCATE:

TRUNCATE test;????? 刪除表test里的內(nèi)容,并釋放空間,但不刪除表的定義,表的結(jié)構(gòu)還在

c. DELETE:

? 1、刪除指定數(shù)據(jù)

刪除表test中年齡等于30的且國(guó)家為US的數(shù)據(jù)

DELETE FROM test WHERE age=30 AND country='US';

? 2、刪除整個(gè)表

僅刪除表test內(nèi)的所有內(nèi)容,保留表的定義,不釋放空間

DELETE FROM test 或者 DELETE FROM test;DELETE * FROM test 或者 DELETE * FROM test;

(2). 常用的插入查詢

INSERT INTO - 向數(shù)據(jù)庫中插入新數(shù)據(jù)?

? ? ? ???INSERT INTO Websites?(name, url, alexa, country)

? ? ? ? ? VALUES?('百度','https://www.baidu.com/','4','CN');

CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫

ALTER?DATABASE - 修改數(shù)據(jù)庫

CREATE TABLE - 創(chuàng)建新表

ALTER TABLE - 變更(改變)數(shù)據(jù)庫表

DROP?TABLE - 刪除表

CREATE INDEX - 創(chuàng)建索引(搜索鍵)

DROP INDEX - 刪除索引

***ORDER BY?- 關(guān)鍵字用于對(duì)結(jié)果集按照一個(gè)列或者多個(gè)進(jìn)行排序。

如果需要按照?降序?對(duì)記錄進(jìn)行排序,您可以使用?DESC 關(guān)鍵字

????????????eg?: order by A,B 這個(gè)時(shí)候都是默認(rèn)按升序排列

??????????? ?????? order by A desc,B 這個(gè)時(shí)候 A 降序,B 升序排列

???????? ????????? order by A ,B desc 這個(gè)時(shí)候 A 升序,B 降序排列

(3). 相關(guān)練習(xí)

(其中部分相近的會(huì)寫在一塊,順序可能會(huì)有些亂,需要后續(xù)的整理和繼續(xù)學(xué)習(xí)實(shí)踐)

1.查詢學(xué)過編號(hào)為"01"并且也學(xué)過編號(hào)為"02"的課程的同學(xué)的信息

select a.* from

? ? student a,score b,score c

? ? where a.s_id = b.s_id? and a.s_id = c.s_id and b.c_id='01' and c.c_id='02';

*** 兩種完全不同的思路? ?

2. 查詢學(xué)過編號(hào)為"01"但是沒有學(xué)過編號(hào)為"02"的課程的同學(xué)的信息

select a.* from

? ? student a

? ? where a.s_id in (select s_id from score where c_id='01' ) and a.s_id not in(select s_id from score where c_id='02')?

3. 自己想想這個(gè)功能是什么

SELECT s.* FROM

? ? student s WHERE s.s_id IN(

? ? ? ? SELECT s_id FROM score WHERE s_id NOT IN(

? ? ? ? ? ? SELECT a.s_id FROM score a

? ? ? ? ? ? ? ? JOIN score b ON a.s_id = b.s_id AND b.c_id='02'

? ? ? ? ? ? ? ? JOIN score c ON a.s_id = c.s_id AND c.c_id='03'

? ? ? ? ? ? WHERE a.c_id='01'))



4. 查詢和"01"號(hào)的同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)的信息;

? 最后步使用統(tǒng)計(jì)量count? ? ? ? ? ?

SELECT a.* FROM student a WHERE a.s_id? IN (

? ? SELECT DISTINCT s_id FROM score WHERE s_id!="01" AND c_id IN (

? ? SELECT c_id FROM score WHERE s_id="01") GROUP BY s_id

? ? HAVING COUNT(1)=(SELECT COUNT(1) FROM score WHERE s_id="01"))

5. 核心在于having 和where的位置

查詢兩門及其以上不及格課程的同學(xué)的學(xué)號(hào),姓名及其平均成績(jī)

SELECT a.`s_id`, a.`s_name`, ROUND(AVG(b.s_score)) AS avg_score FROM

? ? student a

? ? LEFT JOIN score b ON a.`s_id`=b.s_id

? ? WHERE a.`s_id` IN (

? ? SELECT s_id FROM score WHERE s_score<60 GROUP BY s_id HAVING COUNT(1)>=2)

? ? GROUP BY a.`s_id`, a.`s_name`


6. 此處的知識(shí)點(diǎn)在于選取時(shí) 可將(語句)作為屬性

按平均成績(jī)從高到低顯示所有學(xué)生的所有課程的成績(jī)以及平均成績(jī)

SELECT a.s_id,(SELECT s_score FROM score WHERE s_id=a.s_id AND c_id='01') AS 語文,

? ? ? ? ? ? ? ? (SELECT s_score FROM score WHERE s_id=a.s_id AND c_id='02') AS 數(shù)學(xué),

? ? ? ? ? ? ? ? (SELECT s_score FROM score WHERE s_id=a.s_id AND c_id='03') AS 英語,

? ? ? ? ? ? ? ? ROUND(AVG(s_score),2) AS 平均分

? ? ? ? ? ? FROM score a?

? ? ? ? ? ? GROUP BY a.s_id ORDER BY 平均分 DESC;



7.(19)排序,需要后續(xù)進(jìn)行研究

-- 24、查詢學(xué)生平均成績(jī)及其名次

? ? ? ? SELECT a.s_id,

? ? ? ? ? ? ? ? @i:=@i+1 AS '不保留空缺排名',

? ? ? ? ? ? ? ? @k:=(CASE WHEN @avg_score=a.avg_s THEN @k ELSE @i END) AS '保留空缺排名',

? ? ? ? ? ? ? ? @avg_score:=avg_s AS '平均分'

? ? ? ? FROM (SELECT s_id,ROUND(AVG(s_score),2) AS avg_s FROM score GROUP BY s_id)a,(SELECT @avg_score:=0,@i:=0,@k:=0)b;

-- 25、查詢各科成績(jī)前三名的記錄

? ? ? ? ? ? -- 1.選出b表比a表成績(jī)大的所有組

? ? ? ? ? ? -- 2.選出比當(dāng) 前id成績(jī)大的 小于三個(gè)的

? ? ? ? SELECT a.s_id,a.c_id,a.s_score FROM score a

? ? ? ? ? ? LEFT JOIN score b ON a.c_id = b.c_id AND a.s_score<b.s_score

? ? ? ? ? ? GROUP BY a.s_id,a.c_id,a.s_score HAVING COUNT(b.s_id)<3

? ? ? ? ? ? ORDER BY a.c_id,a.s_score DESC

8. 一個(gè)是union 的連續(xù)使用;還發(fā)現(xiàn)另一個(gè)問題(嘗試找出):

SELECT a.*, b.rank,b.s_score, b.c_id FROM (


? ? SELECT a.s_id,a.s_score,a.c_id,@k:=@k+1 AS rank FROM score a,(SELECT @k:=0)s WHERE a.c_id='03'

? ? )b

? ? LEFT JOIN student a ON b.`s_id`=a.`s_id`

? ? WHERE rank BETWEEN 2 AND 3

查詢所有課程的成績(jī)第2名到第3名的學(xué)生信息及該課程成績(jī)

? ? ? ? ? ? SELECT d.*,c.排名,c.s_score,c.c_id FROM (

? ? ? ? ? ? ? ? SELECT a.s_id,a.s_score,a.c_id,@i:=@i+1 AS 排名 FROM score a,(SELECT @i:=0)s WHERE a.c_id='01'? ?

? ? ? ? ? ? )c

? ? ? ? ? ? LEFT JOIN student d ON c.s_id=d.s_id

? ? ? ? ? ? WHERE 排名 BETWEEN 2 AND 3

? ? ? ? ? ? UNION

? ? ? ? ? ? SELECT d.*,c.排名,c.s_score,c.c_id FROM (

? ? ? ? ? ? ? ? SELECT a.s_id,a.s_score,a.c_id,@j:=@j+1 AS 排名 FROM score a,(SELECT @j:=0)s WHERE a.c_id='02'? ?

? ? ? ? ? ? )c

? ? ? ? ? ? LEFT JOIN student d ON c.s_id=d.s_id

? ? ? ? ? ? WHERE 排名 BETWEEN 2 AND 3

? ? ? ? ? ? UNION

? ? ? ? ? ? SELECT d.*,c.排名,c.s_score,c.c_id FROM (

? ? ? ? ? ? ? ? SELECT a.s_id,a.s_score,a.c_id,@k:=@k+1 AS 排名 FROM score a,(SELECT @k:=0)s WHERE a.c_id='03'? ?

? ? ? ? ? ? )c

? ? ? ? ? ? LEFT JOIN student d ON c.s_id=d.s_id

? ? ? ? ? ? WHERE 排名 BETWEEN 2 AND 3;

9. 多條件時(shí)的執(zhí)行順序

查詢每門課程的平均成績(jī),結(jié)果按平均成績(jī)降序排列,平均成績(jī)相同時(shí),按課程編號(hào)升序排列

? ? SELECT c_id,ROUND(AVG(s_score),2) AS avg_score FROM score GROUP BY c_id ORDER BY avg_score DESC,c_id ASC? ? ? ? ?



10.排序提取

查詢每門功成績(jī)最好的前兩名

? ? ? ? -- 牛逼的寫法

? ? SELECT a.s_id,a.c_id,a.s_score FROM score a

? ? ? ? WHERE (SELECT COUNT(1) FROM score b WHERE b.c_id=a.c_id AND b.s_score>=a.s_score)<=2 ORDER BY a.c_id?


11.日期

查詢各學(xué)生的年齡

? ? -- 按照出生日期來算,當(dāng)前月日 < 出生年月的月日則,年齡減一

? ? SELECT s_birth,(DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(s_birth,'%Y') -

? ? ? ? ? ? ? ? (CASE WHEN DATE_FORMAT(NOW(),'%m%d')>DATE_FORMAT(s_birth,'%m%d') THEN 0 ELSE 1 END)) AS age

? ? ? ? FROM student;

-- 47、查詢本周過生日的學(xué)生

? ? SELECT * FROM student WHERE WEEK(DATE_FORMAT(NOW(),'%Y%m%d'))=WEEK(s_birth)

? ? SELECT * FROM student WHERE YEARWEEK(s_birth)=YEARWEEK(DATE_FORMAT(NOW(),'%Y%m%d'))

? ? SELECT WEEK(DATE_FORMAT(NOW(),'%Y%m%d'))

-- 48、查詢下周過生日的學(xué)生

? ? SELECT * FROM student WHERE WEEK(DATE_FORMAT(NOW(),'%Y%m%d'))+1 =WEEK(s_birth)

-- 49、查詢本月過生日的學(xué)生

? ? SELECT * FROM student WHERE MONTH(DATE_FORMAT(NOW(),'%Y%m%d')) =MONTH(s_birth)

-- 50、查詢下月過生日的學(xué)生

? ? SELECT * FROM student WHERE MONTH(DATE_FORMAT(NOW(),'%Y%m%d'))+1 =MONTH(s_birth)?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cname,T#) 課程表 S...
    忘了呼吸的那只貓閱讀 3,030評(píng)論 0 8
  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,327評(píng)論 0 7
  • 花了兩個(gè)半小時(shí)看完了印度電影摔《跤吧爸爸》,真的只能用震撼來形容。里面的父親原本是一位職業(yè)摔跤手,一心想為國(guó)爭(zhēng)光,...
    極樂之子閱讀 437評(píng)論 0 1
  • 蠟燭搖曳的火光將我們一行人的影子映在古老的土墻上,就像一個(gè)個(gè)可怕的怪獸。剛走進(jìn)隧道,身后塌下的大洞便“轟”...
    Susan羽閱讀 239評(píng)論 0 2
  • 01 已經(jīng)發(fā)誓說今年不再買書了,結(jié)果昨天給孩子買書,又忍不住挑了幾本自己要的。 今天早上一起來,看到連岳辦的讀書號(hào)...
    迅圖閱讀 5,852評(píng)論 183 242

友情鏈接更多精彩內(nèi)容