解決主鍵沖突
- insert into 表名[(字段列表:包含主鍵)] values(值列表) on
duplicate
key update 字段 = 新值;
insert into t_user values(1,'lisi') on duplicate key update u_name = 'lisi';
- replace into 表名 [(字段列表:包含主鍵)] values(值列表);
insert into values (1,'zhangsan');
也可以直接替換,replace 在沒有沖突的時(shí)候相當(dāng)于insert,沖突的時(shí)候會(huì)替換。
復(fù)制表
- 復(fù)制表結(jié)構(gòu)
create table 表名 like 數(shù)據(jù)庫.表名;
create table t_user_copy like t_user;
- 插入數(shù)據(jù)
insert into 表名[(字段列表)] select 字段列表 from 數(shù)據(jù)表名;insert into t_user_copy select * from t_user;
###查詢語句
select` [select選項(xiàng)] `字段列表``[AS 字段別名] | * `from `數(shù)據(jù)源 `[where條件子句]` [group by子句]` [having子句]` [order by子句]` [limit 子句];
1. 可以在分組查詢的時(shí)候,將分組后的某個(gè)字段都連接起來
```sql
select c_id,sex,s_name,GROUP_CONCAT(s_name,'-') from t_student group by sex;
在《SQL基礎(chǔ)教程 》日:MICK書上在介紹group by語句的時(shí)候曾經(jīng)提到有三個(gè)誤區(qū)。
group by 查詢時(shí)的字段不能包含分組字段以外的字段瘫镇,但是用聚合函數(shù),因?yàn)?code>分組查詢時(shí)阅嘶,其它字段的元素個(gè)數(shù)和分組的字段很可能不是一對(duì)一西轩,而是多對(duì)一的關(guān)系,比如將學(xué)生表的學(xué)生按照班級(jí)分組扯躺,每組對(duì)應(yīng)的學(xué)生顯然不是一個(gè)捉兴,這樣如果在分組查詢時(shí)如果出現(xiàn)了stu_name無法確定顯示哪一個(gè)學(xué)生的姓名,但是自己用mysql測(cè)試發(fā)現(xiàn)顯示的時(shí)分組录语,在組內(nèi)排序的第一個(gè)倍啥,也許是mysql或者后來sql語句的優(yōu)化吧。
-
回溯統(tǒng)計(jì)with rollup
如圖在分組語句后加上WITH ROLLUP澎埠,任何一個(gè)分組后都會(huì)有一個(gè)小組, 最后都需要向上級(jí)分組進(jìn)行匯報(bào)統(tǒng)計(jì)虽缕,** 不用在每個(gè)分組查詢結(jié)束后為了查詢總是再次進(jìn)行查數(shù)據(jù)庫獲得總數(shù)。** 根據(jù)當(dāng)前分組的字段. 這就是回溯統(tǒng)計(jì): 回溯統(tǒng)計(jì)的時(shí)候會(huì)將分組字段置空蒲稳。
SELECT c_id,sex,COUNT(*),GROUP_CONCAT(s_name)
FROM t_student GROUP BY c_id,sex WITH ROLLUP;
多個(gè)字段分組分別統(tǒng)計(jì)組內(nèi)總數(shù)
- union聯(lián)合查詢
select 語句1 union [all |distinct ] select語句2...
聯(lián)合查詢只要求字段數(shù)量一樣, 跟數(shù)據(jù)類型無關(guān)
作用:
- 查詢同一張表,但是需求不同: 如查詢學(xué)生信息, 男生身高升序, 女生身高降序.
- 多表查詢: 多張表的結(jié)構(gòu)是完全一樣的,保存的數(shù)據(jù)(結(jié)構(gòu))也是一樣的.