對(duì)表數(shù)據(jù)進(jìn)行增刪改查(curd)
增(insert into):
- auto_increment自增長(zhǎng)
CREATE DATABASE class1804 charset=utf8;(創(chuàng)建一個(gè)名為class1804的數(shù)據(jù)庫(kù))
use class1804;(進(jìn)入class1804這個(gè)數(shù)據(jù)庫(kù))
create table studentinfo(
->student_id int not null auto_increment,
->student_name varchar(10) not null,
-> age int not null default 18,
-> gender int not null default 0,
-> phonenum char(11),
-> primary key(student_id)
-> );(在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表單牡肉,名為studentinfo白胀,表單中寫(xiě)入詳細(xì)信息)
SELECT * FROM 表單名稱(chēng) 查看這個(gè)表單的所有詳細(xì)信息(*表示所有)
1.完全插入
INSERT INTO studenyinfo values(180401,'老王',18,1,15658966558);
2.不完全插入
INSERT INTO studentinfo(student_id,student_name,age,gender) -> values('180403','小王',23,0);
3.多行插入
insert into studentinfo(student_id,student_name,age)
-> VALUES(180404,'老黃',23),(180405,'富貴',19),
-> (180406,'小黃',6);
將一個(gè)表插入到另一個(gè)表中
insert into studentinfo1(student_id,age) SELECT student_id,age FROM studentinfo;
刪(為了從一個(gè)表中刪除(去掉)數(shù)據(jù)孕蝉,使用DELETE語(yǔ)句):
刪除時(shí)最好找唯一的標(biāo)識(shí)
DELETE FROM studentinfo WHERE student_id=180402;
DELETE FROM studentinfo;(刪除整個(gè)表單,慎用)
更新(修改)表中的數(shù)據(jù)燃观,可使用UPDATE語(yǔ)句。
INSERT INTO studentinfo(student_id,student_name,age,gender,phonenum)
-> values(180401,'鄭程峰',25,1,'18695436957'),
-> (180402,'李客',20,1,'16598759632');
UPDATE studentinfo SET student_name='成風(fēng)',age=30 WHERE student_id=180401;
查
SELECT * FROM studentinfo WHERE student_id=180402;
修改 跟新 update
1.跟新單個(gè)字段(列)
update 表名 set name = '娜娜' , age = 19 where id = 12345;
2.跟新多行
update 表名 set name = ' 娜娜 ' ;
3.跟新多個(gè)字段(列)
update 表名 set name = ' 娜娜 ' age = 19 where id = 18888 ;
將一個(gè)表復(fù)制到另一個(gè)表中
insert into 新表 (列名,列名...) select 列名,列名... from 原表 ;
刪除數(shù)據(jù) delete
刪除特定的一行:例如:delete from 表名 where id = 10010 ;
刪除所有行:例如:delete from 表名 (不能輕易做);
查詢(xún)
查詢(xún)所有 select * from 表名 泽铛;
查詢(xún)某一個(gè) select * from 表名 where id = 13333 ;
查詢(xún)年齡這個(gè)列 select age from 表名 where id = 19999壮韭;
使用限定的方式查找北发,不進(jìn)入數(shù)據(jù)庫(kù)就可以查詢(xún)到表的信息
select * from 數(shù)據(jù)庫(kù)名.表名;
使用 distinct 去重,返回不重復(fù)的列的值
select distinct age from 表名喷屋;insert into 表 (列名,列名...) select 列名,列名... from 表
數(shù)據(jù)庫(kù)的查詢(xún) where(過(guò)濾)
查詢(xún)一行 select * from 表名 where age = 6×詹Α;
where 條件查詢(xún)和運(yùn)算符
= 等于 select * from 表名 where age = 6 ;
<> 不等于屯曹, != 不等于狱庇,
< 小于, <= 小于等于恶耽, > 大于密任, >= 大于等于,
between ... and 在兩者之間(包含邊界值);
例如:select name ,age from 表名 where age between 5 and 30 ;
is null 判斷某一列的數(shù)據(jù)驳棱,如果包含null 批什,則返回記錄;
例如:select * from 表名 where phone is null ;
and 鏈接查詢(xún)條件,查詢(xún)的數(shù)據(jù)要全部滿(mǎn)足
例如:select name from 表名 where userid>=18004 and age>99;
or 鏈接查詢(xún)條件,查詢(xún)的數(shù)據(jù)只要滿(mǎn)足其中一個(gè)即可
例如:select name from 表名 where userid>=18004 or age>90;
in 操作符 (相當(dāng)于 or ) in (條件1社搅,條件2驻债,條件3)乳规;
例如:selete name(列)
聚合函數(shù)
AVG:求某一列平均值
COUNT:統(tǒng)計(jì)總行數(shù)
SUM:計(jì)算列總和
MIN:求某一列的最小值
MAX:求某一列的最大值
AVG:求某一列平均值
SELECT AVG(age) FROM studentinfo;
求某一列值(起一個(gè)別名)
SELECT AVG(age) as avgage FROM studentinfo;
SELECT MIN(age) as minage FROM studentinfo;
SELECT MAX(age) as maxage FROM studentinfo;
SELECT SUM(age) FROM studentinfo;
SELECT COUNT(*) FROM studentinfo;
DISTINCT去重,只計(jì)算不同的值
SELECT SUM(DISTINCT age) FROM studentinfo;
添加條件合呐,進(jìn)行聚合函數(shù)的計(jì)算
SELECT COUNT(gender) FROM studentinfo WHERE gender=1;
SELECT COUNT(gender) FROM studentinfo WHERE gender=0;
分組跟聚合函數(shù)的使用暮的,統(tǒng)計(jì)每一個(gè)分組下有多少人(有多少條記錄)
SELECT count(*) as total,age FROM studentinfo GROUP BY age;
統(tǒng)計(jì)分組的信息
SELECT count(*), avg(age),min(age),sum(age),gender FROM studentinfo GROUP BY gende;
group by 與 group_concat(列)
group_concat(字段名)可以作為一個(gè)輸出字段來(lái)使用淌实,
表示分組之后冻辩,根據(jù)分組結(jié)果,使用group_concat()來(lái)放置每一組的某字段的值的集合
SELECT gender,group_concat(student_name),group_concat(age) FROM studentinfo GROUP BY gender;
group by + with rollup
在最后新增一行拆祈,來(lái)記錄當(dāng)前列里所有記錄的總和
SELECT gender,count(*) FROM studentinfo GROUP BY gender with rollup;
HAVING
HAVING非常類(lèi)似于WHERE
唯一的差別是WHERE過(guò)濾行恨闪,而HAVING過(guò)濾分組
having 條件表達(dá)式:用來(lái)分組查詢(xún)后指定一些條件來(lái)輸出查詢(xún)結(jié)果
having作用和where類(lèi)似,但having只能用于group by
SELECT COUNT(),age,adress FROM customers GROUP BY age,adress HAVING COUNT() >= 2;
在開(kāi)發(fā)中會(huì)有大量的處理字符串的工作 比如注冊(cè)登錄時(shí)的如何判斷一個(gè)手機(jī)號(hào)是不是一個(gè)手機(jī)號(hào)
可以使用正則表達(dá)式來(lái)分辨過(guò)濾 在代碼中的簡(jiǎn)寫(xiě)是(regex | regexp | re)
. 匹配任何字符字母及數(shù)字 除\n換行符外
\ 轉(zhuǎn)義字符 使字符改變?cè)瓉?lái)的意思
[...] 字符集[^a]表示不是a的其他字符這里不是以a開(kāi)頭的意思
預(yù)定義字符集 可以寫(xiě)在字符集中
\d [0-9] 匹配0-9中的任意數(shù)字
\D [^\d]匹配非數(shù)字
\s t/r/n/f匹配空白字符
\S匹配非空白字符
\w匹配0-9A-Za-z+下劃線(xiàn) 數(shù)字大小字母下劃線(xiàn)
\W [^\w]匹配非數(shù)字大小字母下劃線(xiàn)
數(shù)量詞用來(lái)匹配次數(shù) 用在字符或(...)之后
*匹配前一個(gè)字符0次或無(wú)限次
+匹配前一個(gè)字符1次或無(wú)限次
?匹配前一個(gè)字符0次或1次
{m}匹配前一個(gè)字符的m次
{m,n}m和n可以省略+?(非貪婪)匹配m次不加則匹配n次{2,6}最少匹配2次最多匹配6次;
^匹配以字符開(kāi)頭
$匹配以字符結(jié)尾
\A匹配字符串開(kāi)頭
\Z匹配字符串末尾
\b匹配\w和\W之間
\B [^\b]非\b
|或者從左至右匹配沒(méi)在括號(hào)中使用時(shí)范圍是全文
(...)分組 被括起來(lái)的稱(chēng)為一組 左邊是分組 右邊是編號(hào)
左邊(?P=<name起一個(gè)名字>) 右邊(P=<name起的名字>)
在 Python 中放坏,我們可以使用內(nèi)置的 re 模塊來(lái)使用正則表達(dá)式咙咽。
有一點(diǎn)需要特別注意的是,正則表達(dá)式使用 對(duì)特殊字符進(jìn)行轉(zhuǎn)義淤年,所以如果我們要使用原始字符串钧敞,只需加一個(gè) r 前綴,示例:
re 模塊的一般使用步驟如下:
使用 compile() 函數(shù)將正則表達(dá)式的字符串形式編譯為一個(gè) Pattern 對(duì)象
通過(guò) Pattern 對(duì)象提供的一系列方法對(duì)文本進(jìn)行匹配查找麸粮,獲得匹配結(jié)果溉苛,一個(gè) Match 對(duì)象。
最后使用 Match 對(duì)象提供的屬性和方法獲得信息弄诲,根據(jù)需要進(jìn)行其他的操作
compile 函數(shù)
compile 函數(shù)用于編譯正則表達(dá)式愚战,生成一個(gè) Pattern 對(duì)象,它的一般使用形式如下:
import re將正則表達(dá)式編譯成 Pattern 對(duì)象pattern = re.compile(r'\d+')
修飾符號(hào) 描述
re.I 使用匹配對(duì)大小寫(xiě)不敏感(不區(qū)分大小寫(xiě))
re.S 使.匹配包括換行符在內(nèi)的所有字符
re.M 多行匹配
re.L 做本地化識(shí)別
在上面威根,我們已將一個(gè)正則表達(dá)式編譯成 Pattern 對(duì)象凤巨,接下來(lái),我們就可以利用 pattern 的一系列方法對(duì)文本進(jìn)行匹配查找了洛搀。
Pattern 對(duì)象的一些常用方法主要有:
match 方法:從起始位置開(kāi)始查找敢茁,一次匹配
search 方法:從全文開(kāi)始查找,一次匹配
findall 方法:全文開(kāi)始全部匹配留美,返回列表
finditer 方法:全文開(kāi)始全部匹配彰檬,返回迭代器
split 方法:全文開(kāi)始分割字符串,返回列表
sub 方法:全文替換
排序 ORDER BY
ASC:升序谎砾,默認(rèn)的情況是升序
DESC: 降序
1.單列排序
SELECT * FROM 表名 ORDER BY 列 (ASC | DESC)逢倍;
2.添加條件根據(jù)查詢(xún)結(jié)果排序
SELECT * FROM 表名 WHERE 條件 ORDER BY 列 (ASC | DESC);
3.多列排序
SELECT * FROM 表名 WHERE 條件 ORDER BY 列 (ASC | DESC)景图,列 (ASC | DESC)较雕;
4.如果你要排序的列是中文,我們先要將排序的列指明為GBK編碼,然后在排序
SELECT * FROM 表名 WHERE 條件 ORDER BY convert(name USING gbk);
查詢(xún)出性別為1的學(xué)生并根據(jù)年齡進(jìn)行排序升序
SELECT * FROM studentinfo WHERE gender=1 ORDER BY age;
查詢(xún)出性別為0的學(xué)生并根據(jù)年齡進(jìn)行排序降序
SELECT * FROM studentinfo WHERE gender=0 ORDER BY age DESC;
注意:
在多個(gè)列上降序排序 如果想在多個(gè)列上進(jìn)行降序排序亮蒋,必須對(duì)每個(gè)列指定DESC關(guān)鍵字與和ASC(ASCENDING)關(guān)鍵字
默認(rèn)按照列值從小到大排列(asc)asc從小到大排列扣典,即升序 desc從大到小排序,即降序
多列排序時(shí)將行數(shù)據(jù)按照列1進(jìn)行排序慎玖,如果某些行列1的值相同時(shí)贮尖,則按照列2排序,以此類(lèi)推
限定查詢(xún)
1.如果LIMIT 后面只跟了一個(gè)數(shù)字趁怔,表示限制返回多少條湿硝,并且從第一條開(kāi)始。
SELECT * FROM studentinfo LIMIT 6; => SELECT * FROM studentinfo LIMIT 0,6;
2.如果LIMIT 后面只跟了兩個(gè)數(shù)字润努,第一個(gè)數(shù)字表示偏移量(不包含當(dāng)前數(shù)字對(duì)應(yīng)的這一行)关斜,后一個(gè)數(shù)字表示限制返回多少條。
SELECT * FROM studentinfo LIMIT 6,6;
我們?nèi)绾稳?shí)現(xiàn)一個(gè)分頁(yè)功能,輸入對(duì)應(yīng)的頁(yè)碼m铺浇,每一頁(yè)返回20條數(shù)據(jù)
SELECT * FROM studentinfo LIMIT (m-1)*20,20
取年齡最大的
SELECT * FROM studentinfo ORDER BY age DESC LIMIT 1;