MySQL專案實戰總結

讓蛋蛋飛發表於2019-04-19

1. 表欄位按照漢字拼音排序

命令:

若庫表為uft8字符集時,需轉換為gbk編碼再排序:【比較常見】
order by convert(columnname(排序的列名) using gbk) asc;
order by convert(columnname(排序的列名) using gbk) desc;

若庫表為gbk字符集時,直接排序:
order by columnname(排序的列名) asc;
order by columnname(排序的列名) desc;
複製程式碼

舉例:

對資料庫user表的name欄位按照漢字拼音排序,user表資料如下:

user表

檢視user表的DDL:user表採用utf8字符集,中文不能按照拼音排序,需轉換為gbk編碼,再進行排序

user DDL

對user表的name欄位進行gbk編碼再排序:【升序的話,英文排在中文前面的;反之降序排在後面】

name asc
name desc

2. 查詢表中重複記錄/查詢表中某欄位值存在重複值

一般不存在表中有完全重複的記錄,因為我們在設計資料庫表時,都有主鍵(id),不可重複,所以常見情況都是表中某欄位值存在重複。

<1> 查詢某一欄位存在重複值的命令:

select columnname(欄位名), count(*) as count from tablename(資料庫表名) group by columnname(欄位名) having count > 1;

命令擴充套件:
select columnname(欄位名), count(columnname(欄位名)) as count from tablename(資料庫表名) group by columnname(欄位名) having count > 1 order by count desc;
複製程式碼

舉例:

name欄位存在重複值
name欄位存在重複值命令擴充套件

<2> 查詢多個欄位同時存在重複值的命令:

select columnname1(欄位名1), columnname2(欄位名2), count(*) as count from tablename(資料庫表名) group by columnname1(欄位名1), columnname2(欄位名2) having count > 1;
複製程式碼

舉例:

name,address欄位值都重複

<3> 查詢某一欄位存在重複值的具體行記錄資訊:

方式一:使用in + 子查詢 【資料量大時,耗時長,效率低】

舉例:先用子查詢查出user表中name欄位的重複值,然後在user全表中做in匹配。

name欄位值重複的具體行記錄

方式二:使用臨時表做關聯查詢 【建立臨時表,耗時短,效率高,推薦】

舉例:把user表中重複的name欄位值存放臨時表usertemp中,使用關聯查詢,查出重複name欄位的具體行記錄資訊。

臨時表關聯查詢欄位重複值行記錄
說明:using() 括號必須有,關聯查詢 join using() 表明要關聯的兩個表user和usertemp,關聯的欄位名是一致的,都為name。

<4> 查詢多個欄位同時存在重複值的具體行記錄資訊:

舉例:

name,address欄位值都重複的具體行記錄

3. 去除表中重複記錄

表中重複記錄: 指的是表中完全重複的記錄,即所有欄位值均重複。

一般我們在設計資料庫表時,都有主鍵id,不可重複,所以一般不存在表中記錄完全重複的情況;若出現了此情況,建議先從表結構設計上查詢問題,增加主鍵,優化表結構。

查詢表中完全重複的記錄命令:【不常用】

select distinct * from tablename(資料庫表名);
複製程式碼

後續持續更新中...

相關文章