MySQL數(shù)據(jù)庫二

1. 查詢技巧

1.1 邏輯操作符

主要是對(duì) and or in not的結(jié)合使用

select * from tb where field <2 and field2 >3;

1.2去重

使用關(guān)鍵字distinct,放在所有查詢字段的前面,表示后面的查詢字段組合不能重復(fù)

SELECT DISTINCT stuname,sex,class FROM stu_info;

1.3 設(shè)置結(jié)果查詢行數(shù)

使用limit語句啡专,limit m,n
limit m前m行广匙;
limit m,n從第m+1行開始斗搞,查詢n行捷泞;

select * from tb_name where xxx limit m,n

1.4查詢結(jié)果排序

使用ORDER BY field_name ASC/DESC # 升序/降序

1.5以上四條總結(jié)

SELECT * FROM tb_name WHERE xxx ORDER BY field_name ASC/DESC LIMIT m,n;

1.6 列別名及計(jì)算

  • 有時(shí)為了便于區(qū)別不同表中相同字段或者減少書寫量钱反,可以給字段取一個(gè)別名:field_name as alias或者field_name alias家卖;
  • 有些數(shù)據(jù)需要計(jì)算眨层,可以直接對(duì)查詢出的字段進(jìn)行+ - * / 運(yùn)算。

2.MySQL 函數(shù)

MySQL支持利用函數(shù)來處理數(shù)據(jù)上荡,函數(shù)在數(shù)據(jù)上執(zhí)行趴樱,它給數(shù)據(jù)的轉(zhuǎn)換和處理提供了方便。MySQL支持的函數(shù)有:

  • 文本處理函數(shù)
  • 日期和時(shí)間處理函數(shù)
  • 數(shù)值處理函數(shù)
  • 系統(tǒng)函數(shù)

2.1 文本處理函數(shù)

  • concat(field1,field2)返回字符串拼接后的結(jié)果
  • length() 返回字符串的長(zhǎng)度
  • lower() 小寫
  • upper() 大寫
  • trim() 去掉左右兩邊的空格
  • triml() 去掉左邊的空格
  • trimr() 去掉右邊的空格
  • substring(field,m,n) 從m位置開始取n個(gè)

2.2 時(shí)間處理函數(shù)

curdate()當(dāng)前日期
curtime()當(dāng)前時(shí)間
now()當(dāng)前日期及時(shí)間
date(日期值) 返回日期部分
time(日期值)返回時(shí)間部分
year(日期值)返回年
month(日期值)返回月
day(日期值)返回日
DATEDIFF('2021-06-29','2008-12-30')返回兩個(gè)日期之間的天數(shù)
DATE_FORMAT(now(), '%Y-%m-%d %H:%i:%S') 指定格式顯示
DATE_ADD(date,INTERVAL expr type)向日期添加指定的時(shí)間間隔
DATE_SUB(date,INTERVAL expr type)函數(shù)從日期減去指定的時(shí)間間隔
date是合法的日期表達(dá)式
INTERVAL 是關(guān)鍵字
expr 時(shí)間間隔
type 參考下圖

image.png
image.png

2.3數(shù)值處理函數(shù)

round(x,y) x四舍五入的y為小數(shù)的值
truncate(x,y) x截?cái)酁閥位小數(shù)的值
abs(x)x的絕對(duì)值
rand() 0~1內(nèi)的隨機(jī)值

2.4系統(tǒng)函數(shù)

version()返回?cái)?shù)據(jù)庫版本號(hào)
database()當(dāng)前連接的數(shù)據(jù)庫
user()當(dāng)前登錄的用戶

2.5 聚合函數(shù)

聚合函數(shù)運(yùn)算在列上,計(jì)算和返回單個(gè)值的函數(shù)叁征,有:
sum()求和
count()個(gè)數(shù)
max()最大值
min()最小值
avg()平均值


3.分組查詢及子查詢

3.1 分組查詢

分組查詢使用group by語句纳账,根據(jù)一個(gè)或多個(gè)列隊(duì)結(jié)果集進(jìn)行分組。在分組的裂傷可以使用聚合函數(shù)捺疼。

SELECT field_name,function(field_name) FROM tb_name WHERE field_name operator value GROUP BY field_name HAVING xxx ORDER BY field_name;
注意上述代碼順序:WHERE xxx GROUP BY yyy ORDER BY zzz

image.png

  • 分組采用GROUP BY塞祈,過濾是HAVING;
  • WHERE field_nama operator value GROUP BY xxx HAVING gather_function(field) ORDER BY field_name;
  • HAVING一般與聚合函數(shù)連用。

3.2 子查詢

嵌套在其他查詢中的查詢帅涂,即:一個(gè)查詢語句(select - from tb_name - where)塊可以嵌套在另外一個(gè)查詢塊的where子句中议薪。

  • SELECT m,a.n FROM (SELECT sex AS n,address m FROM sys_user) AS a;
  • SELECT * FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE DATE(order_date)='2021-05-16'); # 查詢2021年5月16日的下訂單的用戶信息

4.關(guān)系表

  1. 假設(shè)有一個(gè)包含產(chǎn)品目錄的數(shù)據(jù)庫表,其中每種類別的產(chǎn)品占一行媳友。對(duì)于每種物品要存儲(chǔ)的信息包括產(chǎn)品描述和價(jià)格斯议,以及生成該產(chǎn)品的供應(yīng)商信息。
  2. 現(xiàn)在醇锚,假如有由同一供應(yīng)商生產(chǎn)的多種物品哼御,那么在何處存儲(chǔ)供應(yīng)商信息(如:供應(yīng)商名、地址焊唬、聯(lián)系方式等)呢恋昼?將這些數(shù)據(jù)與產(chǎn)品信息分開存儲(chǔ)還是存儲(chǔ)在同一張表里呢?通常的原則是分開存儲(chǔ)赶促,理由:
    • 節(jié)約存儲(chǔ)空間液肌,因?yàn)橥还?yīng)商生產(chǎn)的每個(gè)產(chǎn)品的供應(yīng)商信息都是相同的,對(duì)每個(gè)產(chǎn)品重復(fù)此信息既浪費(fèi)時(shí)間又浪費(fèi)存儲(chǔ)空鸥滨;
    • 便于數(shù)據(jù)更正嗦哆,如果供應(yīng)商信息改變(如:供應(yīng)商搬家或電話號(hào)碼變動(dòng),只需要改動(dòng)一次即可)
    • 保證數(shù)據(jù)唯一婿滓,如果有重復(fù)數(shù)據(jù)(即每種產(chǎn)品都存儲(chǔ)供應(yīng)商信息)老速,很難保證每次輸入該數(shù)據(jù)的方式都相同,不一致的數(shù)據(jù)在報(bào)表中很難利用凸主。
  3. 在這個(gè)例子中橘券,可建立兩個(gè)表,一個(gè)存儲(chǔ)供應(yīng)商信息(vendors表)卿吐,另一個(gè)存儲(chǔ)產(chǎn)品信息(products表)旁舰。關(guān)系數(shù)據(jù)可以有效地存儲(chǔ)和方便地處理。因此但两,關(guān)系數(shù)據(jù)庫的可伸縮性遠(yuǎn)比非關(guān)系數(shù)據(jù)庫要好鬓梅。

5.表連接

5.1 內(nèi)連接

只有當(dāng)連接的兩個(gè)或多個(gè)表中都存在滿足條件的記錄時(shí),才返回行谨湘。JOIN 或者 INNER JOIN

內(nèi)連接.png

5.2 左連接

返回左表(table1)中的所有記錄绽快,當(dāng)右表中沒有匹配記錄時(shí)芥丧,左連接任然返回一行,只是該行左表字段有值坊罢,右表字段以NULL填充续担。

SELECT * FROM table1 LEFT JOIN table2 ON table1.column1 = table2.column2;

左連接

5.3 右連接

返回右表(table1)中的所有記錄,當(dāng)左表中沒有匹配記錄時(shí)活孩,右連接任然返回一行物遇,只是該行右表字段有值,左表字段以NULL填充憾儒。

SELECT * FROM table1 RIGHT JOIN table2 ON table1.column1 = table2.column2

右連接

5.5 全連接

Mysql不支持询兴,可以使用UNION將左連接和右連接組合起來。
全連接

5.6 交叉連接

也稱為笛卡爾連接起趾,將左表的每一行與右表的每一行合并

SELECT * FROM table1 CROSS JOIN table2

5.6 自連接

用于將一個(gè)表和自身連接诗舰,就像存在兩個(gè)表一樣。通常用于將表的某個(gè)字段與該表的同一字段的其他值進(jìn)行比較训裆。

SELECT * FROM table1 AS a, table1 AS b WHERE a.common_column < b.common_column;

6.視圖

視圖是基于SQL語句的結(jié)果集的可視化的表眶根。包含行和列,就像一個(gè)真實(shí)的表边琉。

  • 創(chuàng)建視圖
  • CREATE VIEW view_name AS SELECT * FROM tb_name WHERE condition;
  • create view zhang as select * from students INNER JOIN courses ON students.sid = courses.ssid;
  • create view wang as select name, age from students INNER JOIN courses ON students.sid = courses.ssid;
  • 刪除視圖

DROP VIEW view_name;

7.存儲(chǔ)過程

一組為了完成特定功能的SQL語句集属百,用戶可以通過調(diào)用過程來實(shí)現(xiàn)相應(yīng)的操作。好處是簡(jiǎn)化了復(fù)雜的操作变姨。

  • 創(chuàng)建存儲(chǔ)過程

DELIMITER $$
CREATE PROCEDURE proc_zhang()
BEGIN
CREATE VIEW view_zhang AS SELECT name, age FROM students;
SELECT * FROM view_zhang;
END $$
DELIMITER ;

  • 調(diào)用存儲(chǔ)過程

CALL proc_zhang();

  • 刪除存儲(chǔ)過程

DROP PROCEDURE procdure_name;

  • 查看所有存儲(chǔ)過程

SHOW PROCEDURES STATUS

8. 索引

索引增加提升查詢效率族扰,降低增刪改速度。

  • 普通索引:最基本的索引钳恕,沒有任何限制别伏,創(chuàng)建命令:

create index pro_index on product(name);

  • 唯一索引:索引列的值必須唯一,允許空值

create unique index pro_index on product(amount);

  • 主鍵索引

SHOW INDEX FROM product;#查看product表的索引

  • 刪除索引

DROP INDEX prod_index ON product;

  • 索引規(guī)則:
    1. 表的主鍵忧额、外鍵必須有索引;
    2. 數(shù)據(jù)量大的表應(yīng)有索引愧口;
    3. 經(jīng)常與其他表連接的表睦番,應(yīng)在連接字段上建立索引;
    4. 經(jīng)常出現(xiàn)在where語句中的自動(dòng)耍属,應(yīng)該建立索引托嚣。

8.數(shù)據(jù)導(dǎo)入及導(dǎo)出

8.1 導(dǎo)出

  • 導(dǎo)出數(shù)據(jù)庫

mysqldump -uuser_name -ppasswprd database_name > /path/database.sql

  • 導(dǎo)出數(shù)據(jù)表

mysqldump -u root -p crashcourse customers vendors >/home/charles/customersback.sql

8.2 導(dǎo)入

  • 檢查是否需要新建表庫或表
  • 建立庫及表CREATE DATABASE db_name
  • 使用庫USE db_name;
  • 導(dǎo)入source your_sql_file.sql;

9.參考資料

MySQL文檔
MySQL官網(wǎng)
MySQL 教程|菜鳥教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厚骗,隨后出現(xiàn)的幾起案子示启,更是在濱河造成了極大的恐慌,老刑警劉巖领舰,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夫嗓,死亡現(xiàn)場(chǎng)離奇詭異迟螺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)舍咖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門矩父,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人排霉,你說我怎么就攤上這事窍株。” “怎么了攻柠?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵球订,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我瑰钮,道長(zhǎng)辙售,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任飞涂,我火速辦了婚禮旦部,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘较店。我一直安慰自己士八,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布梁呈。 她就那樣靜靜地躺著婚度,像睡著了一般。 火紅的嫁衣襯著肌膚如雪官卡。 梳的紋絲不亂的頭發(fā)上蝗茁,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音寻咒,去河邊找鬼哮翘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毛秘,可吹牛的內(nèi)容都是我干的饭寺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叫挟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼艰匙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抹恳,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤员凝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奋献,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體健霹,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旺上,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骤公。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抚官。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖阶捆,靈堂內(nèi)的尸體忽然破棺而出凌节,到底是詐尸還是另有隱情,我是刑警寧澤洒试,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布倍奢,位于F島的核電站,受9級(jí)特大地震影響垒棋,放射性物質(zhì)發(fā)生泄漏卒煞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一叼架、第九天 我趴在偏房一處隱蔽的房頂上張望畔裕。 院中可真熱鬧,春花似錦乖订、人聲如沸扮饶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甜无。三九已至,卻和暖如春哥遮,著一層夾襖步出監(jiān)牢的瞬間岂丘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工眠饮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奥帘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓君仆,卻偏偏與公主長(zhǎng)得像翩概,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子返咱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • 1 編寫目的 本手冊(cè)是為指導(dǎo)開發(fā)人員按照文檔中的規(guī)范進(jìn)行MYSQL數(shù)據(jù)庫設(shè)計(jì)及SQL編碼。 2 數(shù)據(jù)庫對(duì)象定義規(guī)范...
    Graddy閱讀 2,316評(píng)論 0 74
  • 一牍鞠、django ORM簡(jiǎn)介 O(objects):類和對(duì)象咖摹。R(Relation):關(guān)系,關(guān)系數(shù)據(jù)庫中的表格难述。M...
    汪菲宇閱讀 2,020評(píng)論 0 1
  • 一萤晴、數(shù)據(jù)庫系統(tǒng) 數(shù)據(jù)庫DataBase【DB】吐句,指的是長(zhǎng)期保存到計(jì)算機(jī)上的數(shù)據(jù),按照一定順序組織店读,可以被各種用戶或...
    fly5閱讀 389評(píng)論 0 0
  • Mysql數(shù)據(jù)庫基礎(chǔ) 添加用戶 土辦法 tip:在 MySQL5.7 中 user 表的 password 已換成...
    好奇的小菜狗閱讀 508評(píng)論 0 2
  • 什么是數(shù)據(jù)庫蠢古? 數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織实幕、存儲(chǔ)和管理數(shù)據(jù)的倉庫, 每個(gè)數(shù)據(jù)庫都有一個(gè)或多個(gè)不...
    Jason_c8d4閱讀 487評(píng)論 1 0