日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

基本 SQL 之增删改查

發(fā)布時(shí)間:2023/12/9 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基本 SQL 之增删改查 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基本 SQL 之增刪改查(一)

總結(jié)大家日常最頻繁接觸到的 DML 語(yǔ)句和DQL語(yǔ)句,也就是基本的增刪改查 SQL。

1、插入數(shù)據(jù)

向表中插入一條數(shù)據(jù)的 SQL 語(yǔ)法如下:

INSERT INTO [TABLE_NAME] (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);

那好,我們具體來(lái)看一個(gè)例子吧。
先創(chuàng)建這么一張 person 表,使用如下 SQL:

create table person(id int primary key,name varchar(16) not null,age int,phone varchar(11),address varchar(256) );

接著,我們插入一條數(shù)據(jù):

insert into person(id,name,age,phone,address) values (1,'ayan',22,'123232323','中國(guó)上海');

于是你查詢(xún) person 表,會(huì)看到

+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | ayan| 22 | 123232323 | 中國(guó)上海 | +----+------+------+-----------+--------------+

當(dāng)然,如果你在插入數(shù)據(jù)時(shí)有些字段的值暫時(shí)不想傳入,或是該字段有默認(rèn)值,insert 語(yǔ)句是允許你部分?jǐn)?shù)據(jù)插入的,前提是不能違反一些非空、唯一、類(lèi)型不匹配約束。

例如我只想插入一條數(shù)據(jù),而我只知道這個(gè)人的名字,于是我也可以插入一條記錄,但只賦值 name 字段。

insert into person(id,name) values (2,'cao');

再次查詢(xún) person 表:

+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | ayan| 22 | 123232323 | 中國(guó)上海 | | 2 | cao | NULL | NULL | NULL | +----+------+------+-----------+--------------+

關(guān)系型數(shù)據(jù)庫(kù)中,所有未賦值的字段都默認(rèn)為 NULL,當(dāng)然這個(gè)默認(rèn)值是可以修改的,你可以修改為空字符串或空格等等。

再說(shuō)一個(gè)細(xì)節(jié),當(dāng)你想要插入一條數(shù)據(jù)時(shí),并且希望為該表的每一個(gè)字段都賦值,那么你可以不用在表名后列舉所有字段名,例如以下兩條 insert 語(yǔ)句是等效的。

insert into person(id,name,age,phone,address) values (1,'ayan',22,'123232323','中國(guó)上海'); insert into person values (1,'ayan',22,'123232323','中國(guó)上海');

關(guān)于 insert,我們暫時(shí)先說(shuō)到這,后面介紹子查詢(xún)的時(shí)候還會(huì)提到它,接著我們來(lái)看修改數(shù)據(jù) update。

2、修改數(shù)據(jù)

SQL UPDATE 語(yǔ)句用于修改表中現(xiàn)有的記錄。基本格式如下:

UPDATE [table_name] SET column1 = value1, column2 = value2...., columnN = valueN

舉個(gè)例子,這是 person 表現(xiàn)在的數(shù)據(jù)情況:

+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | ayan| 22 | 123232323 | 中國(guó)上海 | | 2 | cao | NULL | NULL | NULL | +----+------+------+-----------+--------------+

我們執(zhí)行:

update person set address='浙江杭州';

再來(lái)看 person 表:

+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | ayan| 22 | 123232323 | 浙江杭州 | | 2 | cao | NULL | NULL | 浙江杭州 | +----+------+------+-----------+--------------+

你會(huì)發(fā)現(xiàn) person 表的所有記錄的 address 字段全都修改為「浙江杭州」。

所以,一般來(lái)說(shuō),我們的 update 語(yǔ)句都會(huì)結(jié)合 where 子句做一個(gè)數(shù)據(jù)篩選,只修改符合條件的記錄的 address 字段值。

例如:

update person set address='浙江杭州' where id = 1;

3、刪除數(shù)據(jù)

我們使用 DELETE 語(yǔ)句對(duì)標(biāo)數(shù)據(jù)進(jìn)行刪除,基本格式語(yǔ)法如下:

DELETE FROM [table_name] WHERE [condition];

同樣,不追加 where 子句做條件篩選會(huì)導(dǎo)致整張表的數(shù)據(jù)丟失。例如我們刪除 id 為 1 的那條數(shù)據(jù)記錄。

delete from person where id = 1;

4、查詢(xún)數(shù)據(jù)

SQL SELECT 語(yǔ)句用于從數(shù)據(jù)庫(kù)的表中取回所需的數(shù)據(jù),并以表的形式返回。返回的表被稱(chēng)作結(jié)果集。

基本的查詢(xún)語(yǔ)法如下:

SELECT column1, column2, columnN FROM table_name;

如果需要查詢(xún)一條記錄中的所有的字段,可以用符號(hào)「*」替代全體,例如:

SELECT * FROM person;

可查詢(xún)出 person 表所有的記錄:

+----+-------+------+-----------+--------------+ | id | name | age | phone | address | +----+-------+------+-----------+--------------+ | 1 | ayan| 22 | 231232132 | 中國(guó)上海 | | 2 | cao | NULL | NULL | 浙江杭州 | | 3 | li | 23 | 34567894 | 江蘇南京 | | 4 | huang | 33 | 34567894 | 湖北武漢 | | 5 | zhang | 30 | 4567890 | 中國(guó)北京 | +----+-------+------+-----------+--------------+

這是最基本的查詢(xún),沒(méi)有之一,接下來(lái)我們將一點(diǎn)點(diǎn)的增加復(fù)雜度,更熟練的掌握查詢(xún)語(yǔ)句。

1、where 子句

where 子句又被稱(chēng)為條件子句,用于篩選查詢(xún)出來(lái)的數(shù)據(jù)集,指定的條件語(yǔ)句中可以使用基本的算術(shù)、關(guān)系和邏輯運(yùn)算,例如:>,<,=,!=,&&,||。

舉個(gè)例子吧,person 表現(xiàn)在有如下數(shù)據(jù):

+----+-------+------+------------+--------------+ | id | name | age | phone | address | +----+-------+------+------------+--------------+ | 1 | ayan| 22 | 231232132 | 中國(guó)上海 | | 2 | cao | NULL | NULL | 浙江杭州 | | 3 | li | 23 | 34567894 | 江蘇南京 | | 4 | huang | 33 | 34567894 | 湖北武漢 | | 5 | zhang | 30 | 4567890 | 中國(guó)北京 | | 6 | yang | 24 | 2343435353 | 山東青島 | +----+-------+------+------------+--------------+

我們現(xiàn)需要查詢(xún)出,名字叫「ayan」,年齡為「22」的記錄,該怎么寫(xiě)呢?

select * from personwhere name='ayan'&& age=22;

還是很簡(jiǎn)單的,雖然 where 子句很簡(jiǎn)單,但它卻是我們 SQL 查詢(xún)中最重要的一個(gè)關(guān)鍵字,基本上每一條 SQL 語(yǔ)句都離不開(kāi)它。

在指定條件中,除了我們以上說(shuō)的可以使用基本的邏輯算術(shù)運(yùn)算符,子查詢(xún)也是需要依賴(lài) where 的,我們后面繼續(xù)說(shuō)。

2、LIKE 子句

LIKE 子句,我們一般用來(lái)做一些簡(jiǎn)單的搜索查詢(xún),或者說(shuō)模糊匹配,表達(dá)式主要涉及到兩個(gè)符號(hào):

百分號(hào) %:匹配任意多個(gè)字符
下劃線(xiàn) _: 匹配固定一個(gè)字符
舉幾個(gè)例子吧,同樣以我們的 person 表數(shù)據(jù)為例。

查詢(xún)所有的數(shù)據(jù),找到其中 name 字段以字符「ang」結(jié)尾的數(shù)據(jù)記錄集合:

select * from personwhere name like '%ang';

執(zhí)行 SQL,返回結(jié)果:

+----+-------+------+------------+--------------+ | id | name | age | phone | address | +----+-------+------+------------+--------------+ | 4 | huang | 33 | 34567894 | 湖北武漢 | | 5 | zhang | 30 | 4567890 | 中國(guó)北京 | | 6 | yang | 24 | 2343435353 | 山東青島 | +----+-------+------+------------+--------------+

查詢(xún)所有的數(shù)據(jù),找到其中 name 字段以字符「ang」結(jié)尾,并且前面還有一個(gè)任意字符的數(shù)據(jù)記錄集合:

select * from personwhere name like '_ang';

執(zhí)行 SQL,返回結(jié)果:

+----+------+------+------------+--------------+ | id | name | age | phone | address | +----+------+------+------------+--------------+ | 6 | yang | 24 | 2343435353 | 山東青島 | +----+------+------+------------+--------------+

3、in 子句

in 關(guān)鍵字也是使用在 where 子句的條件表達(dá)式中,它限制的是一個(gè)集合,只要字段的值在集合中即符合條件,例如:

select * from person where age in (22,30,23);

這個(gè) SQL 語(yǔ)句可以查詢(xún)出來(lái)所有年齡是 22,30,23 的人數(shù)據(jù)記錄。

你也可以使用 not in 反向限制,例如:

select * from person where age not in (22,30,23);

這個(gè) SQL 則可以查出所有年齡不是這三個(gè)值的數(shù)據(jù)記錄信息。

4、ORDER BY 子句

ORDER BY 子句根據(jù)一列或者多列的值,按照升序或者降序排列數(shù)據(jù)。某些數(shù)據(jù)庫(kù)就默認(rèn)以升序排列查詢(xún)結(jié)果。

基本的 SQL 語(yǔ)法為:

SELECT column FROM table_name WHERE condition ORDER BY column1, column2, .. columnN [ASC | DESC];

ASC 表示數(shù)據(jù)結(jié)果集按升序排序,DESC 表示數(shù)據(jù)結(jié)果集按降序排序。

一般來(lái)說(shuō),我們按某一列進(jìn)行排序即可,當(dāng)然,有時(shí)候一列排序并不能完全解決問(wèn)題,如果按多列排序,那么當(dāng)遇到某一列值相同的時(shí)候,就會(huì)參照第二個(gè)列參數(shù)將這些重復(fù)列值得數(shù)據(jù)記錄再一次排序。

舉個(gè)例子:

我們將 person 表中的數(shù)據(jù)參照 id 列,倒序排序:

select * from person order by id desc;

執(zhí)行 SQL,查看結(jié)果:

+----+-------+------+------------+--------------+ | id | name | age | phone | address | +----+-------+------+------------+--------------+ | 6 | yang | 24 | 2343435353 | 山東青島 | | 5 | zhang | 30 | 4567890 | 中國(guó)北京 | | 4 | huang | 33 | 34567894 | 湖北武漢 | | 3 | li | 23 | 34567894 | 江蘇南京 | | 2 | cao | NULL | NULL | 浙江杭州 | | 1 | ayan | 22 | 231232132 | 中國(guó)上海 | +----+-------+------+------------+--------------+

5、GROUP BY 子句

GROUP BY 子句用于將查詢(xún)返回的結(jié)果集進(jìn)行一個(gè)分組,并展示各個(gè)分組中排在第一個(gè)的記錄,將分組中其余成員隱藏。

我們?yōu)?person 表添加幾條數(shù)據(jù),用于演示:

+----+-------+------+------------+----------+ | id | name | age | phone | address | +----+-------+------+------------+----------+ | 1 | ayan | 22 | 231232132 | 中國(guó)上海 | | 2 | cao | 30 | 456789 | 浙江杭州 | | 3 | li | 23 | 34567894 | 江蘇南京 | | 4 | huang | 33 | 34567894 | 湖北武漢 | | 5 | zhang | 30 | 4567890 | 中國(guó)北京 | | 6 | yang | 24 | 2343435353 | 山東青島 | | 7 | cao | 44 | 12312312 | 河南鄭州 | | 8 | huang | 45 | 5677675 | 安徽合肥 | | 9 | yang | 80 | 3343738 | 江蘇南通 | +----+-------+------+------------+----------+

注意觀(guān)察姓名列,有幾組重復(fù)的姓名。

我們按照姓名對(duì)結(jié)果集進(jìn)行分組,SQL 如下:

select * from person group by name;

執(zhí)行 SQL,得到結(jié)果:

+----+-------+------+-----------+----------+ | id | name | age | phone | address | +----+-------+------+-----------+----------+ | 1 | ayan | 22 | 231232132 | 中國(guó)上海 | | 2 | cao | 30 | 456789 | 浙江杭州 | | 4 | huang | 33 | 34567894 | 湖北武漢 | | 3 | li | 23 | 34567894 | 江蘇南京 | | 6 | yang | 24 | 2343435353 | 山東青島 | | 5 | zhang | 30 | 4567890 | 中國(guó)北京 | +----+-------+------+-----------+----------+

你看,分組之后,只展示每個(gè)分組下排序第一的記錄,其余成員隱藏。

細(xì)心的同學(xué)可能發(fā)現(xiàn)了,分組后的數(shù)據(jù)記錄排序怎么亂了,怎么不是默認(rèn)的 id 升序排列了?

對(duì),如果你沒(méi)有顯式執(zhí)行排序方式的話(huà),將默認(rèn)以你用于分組參照的那個(gè)字段進(jìn)行排序。

當(dāng)然,我們是可以執(zhí)行排序方式的,使用 order by 子句:

select * from person group by name order by id;

效果是這樣:

+----+-------+------+-----------+----------+ | id | name | age | phone | address | +----+-------+------+-----------+----------+ | 1 | ayan | 22 | 231232132 | 中國(guó)上海 | | 2 | cao | 30 | 456789 | 浙江杭州 | | 3 | li | 23 | 34567894 | 江蘇南京 | | 4 | huang | 33 | 34567894 | 湖北武漢 | | 5 | zhang | 30 | 4567890 | 中國(guó)北京 | | 6 | yang | 24 | 2343435353 | 山東青島 | +----+-------+------+-----------+----------+

這就是分組,可能會(huì)有同學(xué)疑問(wèn),這樣的分組有什么意義,分組是分完了,給我返回每個(gè)分組的第一行記錄有什么用?

其實(shí)是這樣的,我們之所以進(jìn)行分組,就是為了統(tǒng)計(jì)和估量每個(gè)分組下的指標(biāo)情況,比如這組數(shù)據(jù)的平均年齡、最高薪水等等等等。

而當(dāng)我們只是 「select *」的時(shí)候,數(shù)據(jù)庫(kù)根本不知道你要干什么,換句話(huà)說(shuō)就是你并沒(méi)有對(duì)每一個(gè)分組中的數(shù)據(jù)進(jìn)行任何的分析統(tǒng)計(jì),于是給你返回該分組的第一行數(shù)據(jù)。

你要記住的是,每個(gè)分組只能出來(lái)一個(gè)數(shù)據(jù)行,究竟讓什么樣的數(shù)據(jù)出來(lái)取決于你。

比如我們計(jì)算每個(gè)分組下的平均年齡:

select avg(age) as '平均年齡' from person group by name;

查詢(xún)結(jié)果:

+----------+ | 平均年齡 | +----------+ | 37.0000 | | 39.0000 | | 23.0000 | | 42.0000 | | 30.0000 | +----------+

6、HAVING 子句

HAVING 子句在我看來(lái)就是一個(gè)高配版的 where 子句,無(wú)論是我們的分組或是排序,都是基于以返回的結(jié)果集,也就是說(shuō) where 子句的篩選已經(jīng)結(jié)束。

那么如果我們對(duì)排序、分組后的數(shù)據(jù)集依然有篩選需求,就用到我們的 HAVING 子句了。

例如:

select avg(age) as vage from person group by name having vage>23;

分組之后,我們得到每個(gè)分組中數(shù)據(jù)的平均年齡,再者我們通過(guò) having 語(yǔ)句篩選出平均年齡大于 23 的數(shù)據(jù)記錄。

以上我們介紹了六個(gè)子句的應(yīng)用場(chǎng)景及其使用語(yǔ)法,但是如果需要同時(shí)用到這些子句,語(yǔ)法格式是什么樣的?作用優(yōu)先級(jí)是什么樣的?

SELECT column1, column2 FROM table WHERE [ conditions ] GROUP BY column1, column2 HAVING [ conditions ] ORDER BY column1, column2

大家一定要記住這個(gè)模板,各個(gè)子句在 SQL 語(yǔ)句中的位置,可以不出現(xiàn),但不得越

位,否則就會(huì)報(bào)語(yǔ)法錯(cuò)誤。

首先是 from 語(yǔ)句,查出表的所有數(shù)據(jù),接著是 select 取指定字段的數(shù)據(jù)列, 然后是 where 進(jìn)行條件篩選,得到一個(gè)結(jié)果集。 接著 group by 分組該結(jié)果集并得到分組后的數(shù)據(jù)集, having 再一次條件篩選,最后才輪到 order by 排序。

總結(jié)

以上是生活随笔為你收集整理的基本 SQL 之增删改查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。