這篇文章主要介紹“MySQL的DDL、DML及DQL基礎(chǔ)知識(shí)點(diǎn)有哪些”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“MySQL的DDL、DML及DQL基礎(chǔ)知識(shí)點(diǎn)有哪些”文章能幫助大家解決問(wèn)題。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了多倫免費(fèi)建站歡迎大家使用!
保存數(shù)據(jù)的倉(cāng)庫(kù)。它體現(xiàn)我們電腦中,就是一個(gè)軟件或者文件系統(tǒng)。然后把數(shù)據(jù)都保存這些特殊的文件中,并且需要使用固定的語(yǔ)言(SQL語(yǔ)言/語(yǔ)句)去操作文件中的數(shù)據(jù)。
存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù),數(shù)據(jù)是具有組織的進(jìn)行存儲(chǔ)
英文名:
DataBase
,簡(jiǎn)稱 DB
數(shù)據(jù)庫(kù)是按照特定的格式將數(shù)據(jù)存儲(chǔ)在文件中,通過(guò)SQL語(yǔ)句可以方便的對(duì)大量數(shù)據(jù)進(jìn)行
增
、刪
、改
、查
操作,數(shù)據(jù)庫(kù)是對(duì)大量的信息進(jìn)行管理的高效的解決方案。
常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)
我們開(kāi)發(fā)應(yīng)用程序的時(shí)候,程序中的所有數(shù)據(jù),最后都需要保存到專業(yè)軟件中。這些專業(yè)的保存數(shù)據(jù)的軟件我們稱為數(shù)據(jù)庫(kù)。我們學(xué)習(xí)數(shù)據(jù)庫(kù),并不是學(xué)習(xí)如何去開(kāi)發(fā)一個(gè)數(shù)據(jù)庫(kù)軟件,我們學(xué)習(xí)的是如何使用數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)中的數(shù)據(jù)記錄的操作。而數(shù)據(jù)庫(kù)軟件是由第三方公司研發(fā)。
Oracle:它是Oracle公司的大型關(guān)系型數(shù)據(jù)庫(kù)。系統(tǒng)可移植性好、使用方便、功能強(qiáng),適用于各類大、中、小、微機(jī)環(huán)境。它是一種高效率、安全可靠的。但是它是收費(fèi)的。
MYSQL:早期由瑞典一個(gè)叫MySQL AB公司開(kāi)發(fā)的,后期被sun公司收購(gòu),再后期被Oracle收購(gòu)。體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)。MySQL6.x版本也開(kāi)始收費(fèi)。
DB2:IBM公司的數(shù)據(jù)庫(kù)產(chǎn)品,收費(fèi)的。常應(yīng)用在銀行系統(tǒng)中.
SQLServer:MicroSoft 公司收費(fèi)的中型的數(shù)據(jù)庫(kù)。C#、.net等語(yǔ)言常使用。
SyBase:Sybase公司的。 已經(jīng)淡出歷史舞臺(tái)。提供了一個(gè)非常專業(yè)數(shù)據(jù)建模的工具PowerDesigner。
常用數(shù)據(jù)庫(kù):Java開(kāi)發(fā)應(yīng)用程序主要使用的數(shù)據(jù)庫(kù):MySQL(5.6)、Oracle、DB2。(原因:開(kāi)源,免費(fèi),功能足夠強(qiáng)大,足以應(yīng)付web開(kāi)發(fā))
在開(kāi)發(fā)軟件的時(shí)候,軟件中的數(shù)據(jù)之間必然會(huì)有一定的關(guān)系存在。比如商品和客戶之間的關(guān)系,一個(gè)客戶是可以買多種商品,而一種商品是可以被多個(gè)客戶來(lái)購(gòu)買的。
需要把這些數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中,同時(shí)也要維護(hù)數(shù)據(jù)之間的關(guān)系,這時(shí)就可以直接使用上述的那些數(shù)據(jù)庫(kù)。而上述的所有數(shù)據(jù)庫(kù)都屬于關(guān)系型數(shù)據(jù)庫(kù)。
關(guān)系型數(shù)據(jù):設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候,需要使用E-R實(shí)體關(guān)系圖來(lái)描述。
E-R 是兩個(gè)單詞的首字母,E表示
Entity
實(shí)體 R表示Relationship
關(guān)系。
1.數(shù)據(jù)表中的數(shù)據(jù)之間必然會(huì)有一定的關(guān)系存在,比如商品和客戶之間的關(guān)系,一個(gè)客戶是可以買多種商品,而一種商品是可以被多個(gè)客戶來(lái)購(gòu)買的。
2.設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候,可以使用ER實(shí)體關(guān)系圖來(lái)描述表之間的關(guān)系,E表示Entity 實(shí)體 , R表示Relationship 關(guān)系
3.實(shí)體:可以理解成我們Java程序中的一個(gè)對(duì)象。比如商品,客戶等都是一個(gè)實(shí)體對(duì)象。在E-R圖中使用 矩形(長(zhǎng)方形) 表示。
4.屬性:實(shí)體對(duì)象中是含有屬性的,比如商品名、價(jià)格等。針對(duì)一個(gè)實(shí)體中的屬性,我們稱為這個(gè)實(shí)體的數(shù)據(jù),在E-R圖中使用橢圓表示。
5.關(guān)系:實(shí)體和實(shí)體之間的關(guān)系:在E-R圖中使用菱形表示。
需求: 使用E-R圖描述 客戶、商品、訂單之間的關(guān)系
什么是SQL
Structured Query Language
結(jié)構(gòu)化查詢語(yǔ)言。SQL語(yǔ)句不依賴于任何平臺(tái),對(duì)所有的數(shù)據(jù)庫(kù)是通用的。學(xué)會(huì)了SQL語(yǔ)句的使用,可以在任何的數(shù)據(jù)庫(kù)使用,但都有特有內(nèi)容。SQL語(yǔ)句功能強(qiáng)大、簡(jiǎn)單易學(xué)、使用方便。
SQL特點(diǎn)
SQL語(yǔ)句是一個(gè)非過(guò)程性的語(yǔ)言,每一條SQL執(zhí)行完都會(huì)有一個(gè)具體的結(jié)果出現(xiàn)。多條語(yǔ)句之間沒(méi)有影響
SQL作用
SQL語(yǔ)句主要是操作數(shù)據(jù)庫(kù),數(shù)據(jù)表,數(shù)據(jù)表中的數(shù)據(jù)記錄
SQL通用語(yǔ)法
SQL語(yǔ)句可以單行或多行書寫,以分號(hào)結(jié)尾。
可使用空格和縮進(jìn)來(lái)增強(qiáng)語(yǔ)句的可讀性。
MySQL數(shù)據(jù)庫(kù)的SQL語(yǔ)句不區(qū)分大小寫,關(guān)鍵字開(kāi)發(fā)中一般大寫.
三種注釋
- 單行注釋:-- 注釋內(nèi)容
- 多行注釋:/* 注釋內(nèi)容 */
-# 注釋內(nèi)容
:(mysql特有的單行注釋)
SQL分類
SQL是用來(lái)存取關(guān)系數(shù)據(jù)庫(kù)的語(yǔ)言,具有定義、操縱、控制和查詢關(guān)系型數(shù)據(jù)庫(kù)的四方面功能。所以針對(duì)四方面功能,我們將SQL進(jìn)行了分類。
DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)言
用來(lái)定義數(shù)據(jù)庫(kù)對(duì)象:數(shù)據(jù)庫(kù),表,列等。關(guān)鍵字:create drop alter truncate(清空數(shù)據(jù)記錄) show等DML(Data Manipulation Language)數(shù)據(jù)操作語(yǔ)言★★★
在數(shù)據(jù)庫(kù)表中更新,增加和刪除記錄。如 update(更新), insert(插入), delete(刪除) 不包含查詢
DQL(Data Query Language) 數(shù)據(jù)查詢語(yǔ)言★★★★★
數(shù)據(jù)表記錄的查詢。關(guān)鍵字select。DCL(Data Control Language)數(shù)據(jù)控制語(yǔ)言(了解)
是用來(lái)設(shè)置或更改數(shù)據(jù)庫(kù)用戶或角色權(quán)限的語(yǔ)句,如grant(設(shè)置權(quán)限),revoke(撤銷權(quán)限),begin transaction等。這個(gè)比較少用到。
MySQL是一個(gè)需要賬戶名密碼登錄的數(shù)據(jù)庫(kù),登陸后使用,它提供了一個(gè)默認(rèn)的root賬號(hào),使用安裝時(shí)設(shè)置的密碼即可登錄。
啟動(dòng)數(shù)據(jù)庫(kù)服務(wù):在打開(kāi)dos窗口中輸入net start MySQL
命令
關(guān)閉數(shù)據(jù)庫(kù)服務(wù):在打開(kāi)dos窗口中輸入net stop MySQL
命令
連接MySQL:登錄格式1:mysql -u用戶名 -p密碼
mysql -uroot -p123456
登錄格式2:mysql[-h連接主機(jī)ip地址 -P端口號(hào)3306] -u 用戶名 -p 密碼
mysql -h 127.0.0.1 -P 3306 -u root -p 123456
如果連接的是本機(jī):可以省略 -h -P 主機(jī)IP和端口。這樣就可以登錄mysql數(shù)據(jù)庫(kù)了
退出:exit
命令
顯示數(shù)據(jù)庫(kù): show databases;
創(chuàng)建數(shù)據(jù)庫(kù):
1.直接創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù)名;
2.判斷數(shù)據(jù)庫(kù)是否存在并創(chuàng)建(如果不存在,則創(chuàng)建)
create database if not exists 數(shù)據(jù)庫(kù)名;
3.創(chuàng)建數(shù)據(jù)庫(kù)并指定字符集(編碼表)
create database 數(shù)據(jù)庫(kù)名 character set 字符集;
說(shuō)明:字符集就是編碼表名,在mysql中utf8
查看數(shù)據(jù)庫(kù):
1.查看所有數(shù)據(jù)庫(kù)
show databases;
2.查看某個(gè)數(shù)據(jù)庫(kù)的定義信息
show create database 數(shù)據(jù)庫(kù)名;
3.查看當(dāng)前使用的數(shù)據(jù)庫(kù)
select database();
使用和切換數(shù)據(jù)庫(kù):
use 數(shù)據(jù)庫(kù)名;
修改數(shù)據(jù)庫(kù):
1.修改數(shù)據(jù)庫(kù)字符集
-- alter 表示修改alter database 數(shù)據(jù)庫(kù)名 default character set 新字符集;
注意:如果修改數(shù)據(jù)庫(kù)指定的編碼表是utf8,記住不能寫utf-8
Java中的常用編碼對(duì)應(yīng)mysql數(shù)據(jù)庫(kù)中的編碼
Java | MySQL |
---|---|
UTF-8 | utf8 |
GBK | gbk |
GB2312 | gb2312 |
ISO-8859-1 | latin1 |
刪除數(shù)據(jù)庫(kù):
1.直接刪除
-- drop 刪除數(shù)據(jù)庫(kù)drop database 數(shù)據(jù)庫(kù)名;
2.刪除數(shù)據(jù)庫(kù)時(shí)判斷是否存在(如果存在,則刪除)
drop database if exists 數(shù)據(jù)庫(kù)名;
約束的概念:
約束是作用于表中列上的規(guī)則,用于限制加入表的數(shù)據(jù)
約束的存在保證了數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和完整性
約束的分類:
約束名稱 | 關(guān)鍵字 | 描述 |
---|---|---|
非空約束 | NOT NULL | 保證列中所有數(shù)據(jù)不能有null空值 |
唯一約束 | UNIQUE | 保證列中所有數(shù)據(jù)各不相同 |
主鍵約束 | PRIMARY KEY | 主鍵是一行數(shù)據(jù)的唯一標(biāo)識(shí),要求非空且唯一 |
檢查約束 | CHECK | 保證列中的值滿足某一條件 |
默認(rèn)約束 | DEFAULT | 保存數(shù)據(jù)時(shí),未指定值則采用默認(rèn)值 |
外鍵約束 | FOREIGN KEY | 外鍵用來(lái)讓兩個(gè)表的數(shù)據(jù)之間建立鏈接,保證數(shù)據(jù)的一致性和完整性 |
MySQL5.7不支持檢查約束,但寫入語(yǔ)句不會(huì)報(bào)錯(cuò),MySQL8.0版本支持檢查約束
非空約束
非空約束用于保證列中所有數(shù)據(jù)不能有NULL值
1.建表時(shí)添加約束
-- 創(chuàng)建表時(shí)添加非空約束create table 表名( 列名 數(shù)據(jù)類型 not null, ...);
2.建完表之后添加約束
-- 建完表之后添加約束alter table 表名 modify 字段名 數(shù)據(jù)類型 not null;
3.刪除約束
alter table 表名 modify 字段名 數(shù)據(jù)類型;
唯一約束
唯一約束用于保證列中所有數(shù)據(jù)各不相同
1.創(chuàng)建表時(shí)添加唯一約束
-- 方式1create table 表名( 字段名 數(shù)據(jù)類型 UNIQUE, ...);-- 方式2create table 表名( 字段名 數(shù)據(jù)類型, ... [CONSTRAINT] [約束名稱] UNIQUE(列名));
2.建完表之后添加唯一約束
-- 建完表后添加唯一約束alter table 表名 modify 字段名 數(shù)據(jù)類型 UNIQUE;
3.刪除唯一約束
alter table 表名 drop index 字段名;
主鍵約束
主鍵是一行數(shù)據(jù)的唯一標(biāo)識(shí),要求非空且唯一
一張表只能有一個(gè)主鍵
1.創(chuàng)建表時(shí)添加主鍵約束
create table 表名( 字段名 數(shù)據(jù)類型 PRIMARY KEY [AUTO_INCREMENT], -- [AUTO_INCREMENT] 當(dāng)不指定值時(shí)自動(dòng)增長(zhǎng) ...);create table 表名( 列名 數(shù)據(jù)類型, [CONSTRAINT] [約束名稱] PRIMARY KEY(列名))
2.建完表之后添加主鍵約束
alter table 表名 add PRIMARY KEY(字段名);
3.刪除主鍵約束
alter table 表名 drop PRIMARY KEY;
默認(rèn)約束
保存數(shù)據(jù)時(shí),未指定值則采用默認(rèn)值
1.創(chuàng)建表時(shí)添加默認(rèn)約束
create table 表名( 字段名 數(shù)據(jù)類型 default 默認(rèn)值, ...);
2.建完表后添加默認(rèn)約束
alter table 表名 alter 列名 set DEFAULT 默認(rèn)值;
3.刪除約束
alter table 表名 alter 列名 drop DEFAULT;
前提:創(chuàng)建數(shù)據(jù)庫(kù)db1
并使用這個(gè)數(shù)據(jù)庫(kù)
-- 創(chuàng)建數(shù)據(jù)庫(kù)create database db1;-- 使用數(shù)據(jù)庫(kù)use db1;
創(chuàng)建表:
create table 表名( 字段名1 字段類型 約束條件, 字段名2 字段類型 約束條件, ... 字段名n 字段類型 約束條件);-- 注意:最后一個(gè)字段不加逗號(hào)
創(chuàng)建一個(gè)表結(jié)構(gòu)和其他表結(jié)構(gòu)相同的表
create table 表名 like 其他表名;
MySQL中常用的數(shù)據(jù)類型
案列需求:
設(shè)計(jì)一張學(xué)生表,要求如下:
學(xué)號(hào),要求唯一主鍵,自增
姓名,不能為空,且唯一
性別,只有男和女,默認(rèn)值為null
班級(jí),字符串類型
入學(xué)時(shí)間,取值為年、月、日
數(shù)學(xué)成績(jī),double類型,默認(rèn)為60分
英語(yǔ)成績(jī),double類型,沒(méi)有默認(rèn)值
create table students( id int primary key auto_increment, name varchar(10) not null unique, sex enum('男','女') default null, class varchar(10), starttime date, math int default 60, english int);
查看表:
1.查看某個(gè)數(shù)據(jù)庫(kù)中所有的表
show tables;
2.查看表結(jié)構(gòu)
desc 表名;
3.查看創(chuàng)建表的SQL語(yǔ)句
show create table 表名;-- 根據(jù)該語(yǔ)句查看上面案列的建表sql語(yǔ)句show create table students;
刪除表:
1.直接刪除
drop table 表名;
2.刪除表時(shí)判斷表是否存在(如果存在,則刪除)
drop table if exists 表名;
修改表:
1.修改表名
alter table 舊表名 rename to 新表名;
2.向表中添加一個(gè)字段(一列)
alter table 表名 add 字段名 數(shù)據(jù)類型;
3.修改表中字段數(shù)據(jù)類型
alter table 表名 modify 字段名 新的數(shù)據(jù)類型;
4.修改表中字段名(列名)和數(shù)據(jù)類型
alter table 表名 change 字段名 新的字段名 新的數(shù)據(jù)類型;
5.刪除表中字段(列)
alter table 表名 drop 字段名;
1.插入全部字段
-- 全部字段寫出來(lái)insert into 表名(字段1,字段2,...) values(值1,值2,...); -- 插入全部不寫字段名insert into 表名 values(值1,值2,...); -- 給案例中的表插入數(shù)據(jù)insert into students(id,name,sex,class,starttime,math,english) values(1,'張三','男','高三1班','2022-03-02',80,69); insert into students values(2,'李四','女','高三2班','2022-03-01',70,80);
2.插入部分?jǐn)?shù)據(jù)
-- 插入姓名,班級(jí),入學(xué)時(shí)間,英語(yǔ)成績(jī)-- id默認(rèn)增長(zhǎng),性別默認(rèn)null,數(shù)學(xué)默認(rèn)60 insert into students(name,class,starttime,english) values('王五','高三3班','2022-03-02',78);
說(shuō)明:插入部分?jǐn)?shù)據(jù)的時(shí)候,要求列名一定書寫出來(lái)。
3.批量插入數(shù)據(jù)
insert into 表名 values(字段值1, 字段值2...),(字段值1, 字段值2...),(字段值1, 字段值2...);
沒(méi)有添加數(shù)據(jù)的字段會(huì)使用NULL
注意:
值與列一一對(duì)應(yīng)。有多少個(gè)列,就需要寫多少個(gè)值。如果某一個(gè)列沒(méi)有值,可以使用null,表示插入空。
值的數(shù)據(jù)類型,與列被定義的數(shù)據(jù)類型要相匹配,并且值的長(zhǎng)度,不能夠超過(guò)定義的列的長(zhǎng)度。
字符串:插入字符類型的數(shù)據(jù),建議寫英文單引號(hào)括起來(lái)。在mysql中,使用單引號(hào)表示字符串
date 時(shí)間類型的數(shù)據(jù)也得使用英文單引號(hào)括起來(lái): 如
yyyy-MM-dd
1.不帶條件修改數(shù)據(jù)
update 表名 set 字段名=新的值,字段名=新的值,...; -- 注意:不帶條件的修改是將數(shù)據(jù)表中的整列都做修改 -- 修改students表中math的值為90update students set math=90;
2.帶條件修改數(shù)據(jù)
update 表名 set 字段名=新的值,字段名=新的值,... where 條件; -- 修改students表中王五的性別為男,數(shù)學(xué)成績(jī)?cè)O(shè)置為70update students set sex='男',math=70 where name='王五';
3.關(guān)鍵字說(shuō)明
UPDATE: 表示修改記錄 SET: 要改哪個(gè)字段WHERE: 設(shè)置條件
4.注意
不帶條件的更新數(shù)據(jù)庫(kù)記錄:UPDATE 表名 SET 字段名=新的值;是將整個(gè)表中修改的列修改
帶條件:UPDATE 表名 SET 字段名=新的值 WHERE 條件
1.不帶條件刪除
DELETE -- 刪除記錄DELETE FROM 表名;表還在,可以操作,只是刪除數(shù)據(jù)。
2.帶條件刪除
DELETE FROM 表名 WHERE 條件;-- 刪除學(xué)生表中的王五的信息DELETE FROM students WHERE name='王五';
3.truncate刪除表記錄(屬于DDL)
truncate table 表名;
4.truncate和delete區(qū)別
delete是將表中的數(shù)據(jù)一條一條刪除
truncate是將整個(gè)表摧毀,重新創(chuàng)建一個(gè)新的表,新的表結(jié)構(gòu)和原來(lái)表結(jié)構(gòu)一模一樣
準(zhǔn)備一張學(xué)生表,在這張表上進(jìn)行查詢操作
1.查詢所有數(shù)據(jù)
select * from 表名; -- 查詢學(xué)生表中所有的數(shù)據(jù)select * from students;
2.查詢指定列的數(shù)據(jù)
select 字段名1,字段名2,... from 表名; -- 查詢姓名和班級(jí)這兩個(gè)字段select name,class from students;
3.查詢到的字段設(shè)置別名
select 字段名1 as 別名1,字段名2 as 別名2 from 表名; -- 查詢students表中的字段并設(shè)置別名select id as 學(xué)號(hào),name as 姓名,sex as 性別,class as 班級(jí) , starttime as 入學(xué)時(shí)間 from students;
4.查詢到的數(shù)據(jù)去重
-- DISTINCT 去重復(fù)-- 查詢班級(jí)字段結(jié)果不出現(xiàn)重復(fù)的select DISTINCT class from students;
1.條件查詢語(yǔ)法
select 字段名1,字段名2,... where 條件列表;
2.條件運(yùn)算符
符號(hào) | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<>或!= | 不等于 |
BETWEEN…AND… | 在某個(gè)范圍內(nèi)(都包括) |
IN(…) | 多選一 |
LIKE | 模糊查詢,_單個(gè)任意字符,%多個(gè)任意字符 |
IS NULL | 為空 |
IS NOT NULL | 不為空 |
AND 或 && | 與,并且 |
OR 或 || | 或,或者 |
NOT 或 ! | 非,不是 |
3.查詢數(shù)學(xué)成績(jī)大于80并且性別為男的學(xué)生
-- 兩個(gè)條件同時(shí)滿足select * from students where math > 80 and sex='男';
4.查詢英語(yǔ)成績(jī)?cè)?0-80之間的學(xué)生
-- BETWEEN 值1 AND 值2 -- 表示從值1到值2范圍,包頭又包尾 select * from students where english between 60 and 80; select * from students where english>=60 && english<=80;
5.查詢學(xué)號(hào)為1或者2或者3的學(xué)生
-- in里面的每個(gè)數(shù)據(jù)都會(huì)作為一次條件,只要滿足條件的就會(huì)顯示select * from students where id in (1,2,3);
LIKE
:表示模糊查詢
select * from 表名 where 字段名 like '通配字符';
MySQL通配符有兩個(gè):
%
:表示0個(gè)或多個(gè)字符(任意字符)
_
:表示一個(gè)字符
1.查找名字中以孫開(kāi)頭的學(xué)生
-- '孫%'表示孫后面有任意個(gè)字符select * from students where name like '孫%';
2.查找名字中以孫開(kāi)頭的兩個(gè)字的學(xué)習(xí)
-- '孫_'表示孫后面只能有一個(gè)字符select * from students where name like '孫_';
通過(guò)ORDER BY
子句,可以將查詢出的結(jié)果進(jìn)行排序(排序只是顯示方式,不會(huì)影響數(shù)據(jù)庫(kù)中數(shù)據(jù)的順序)
-- ASC:升序排序(默認(rèn))-- DESC:降序排序select 字段 from 表名 order by 排序字段 [ASC|DESC];
1.單列排序
-- 查詢學(xué)生的數(shù)學(xué)成績(jī)按照升序排序select * from students order by math ASC;
2.組合排序
-- 查詢數(shù)學(xué)成績(jī)升序的基礎(chǔ)上,英語(yǔ)成績(jī)降序-- 組合排序就是先按第一個(gè)字段進(jìn)行排序,如果第一個(gè)字段相同,才按第二個(gè)字段進(jìn)行排序,依次類推。 select * from students order by math ASC,english DESC;
之前我們做的查詢都是橫向查詢,它們都是根據(jù)條件一行一行的進(jìn)行判斷,而使用聚合函數(shù)查詢是縱向查詢,它是對(duì)一列的值進(jìn)行計(jì)算,然后返回一個(gè)結(jié)果值;另外聚合函數(shù)會(huì)忽略空值,對(duì)于null
不作為統(tǒng)計(jì)。
1.五個(gè)聚合函數(shù)
函數(shù)名 | 功能 |
---|---|
count(列名) | 統(tǒng)計(jì)數(shù)量(一般選用不為null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
2.聚合函數(shù)語(yǔ)法
select 聚合函數(shù)名(列名) from 表名;
注意:null 值不參與所有聚合函數(shù)運(yùn)算
3.查詢學(xué)生總數(shù)
select count(id) from students;-- 通常使用select count(*) from students;
4.查詢最高分和最低分
-- 查詢數(shù)學(xué)最高分和英語(yǔ)最低分select max(math),min(english) from students;
5.求和求平均值
-- 求該表數(shù)學(xué)總分和平均值select sum(math),avg(math) from students;
6.ifnull()函數(shù)
-- ifnull(列名,默認(rèn)值)函數(shù)表示判斷該列是否為空值,如果為null,返回默認(rèn)值,如果不為空,返回實(shí)際值ifnull(math,60); -- 如果數(shù)學(xué)成績(jī)?yōu)閚ull時(shí),返回60,如果不為null,就返回實(shí)際值
分組: 按照某一列或者某幾列。把相同的數(shù)據(jù),進(jìn)行合并輸出。
1.注意
按照某一列進(jìn)行分組,目的為了統(tǒng)計(jì)使用。
聚合函數(shù):分組之后進(jìn)行計(jì)算
通常select
后面的內(nèi)容是被分組的列,以及聚合函數(shù)
在sql
語(yǔ)句中的where
后面不允許添加聚合函數(shù)
可以使用having
條件,表示分組之后的條件,在having
后面可以書寫聚合函數(shù)
2.查詢各個(gè)班級(jí)的數(shù)學(xué)成績(jī)總和
-- 查詢每個(gè)班的數(shù)學(xué)成績(jī)總和select class,sum(math) from students group by class;
3.having用法
having必須和group by 一起使用,having和where的用法一模一樣,where怎么使用having就怎么使用,where不能使用的,having也可以使用,比如說(shuō)where后面不可以使用聚合函數(shù),但是在having后面是可以使用聚合函數(shù)的。
-- 查詢每個(gè)班數(shù)學(xué)總成績(jī)大于300分的班級(jí)并顯示總成績(jī) select class,sum(math) from students group by class having sum(math)>300;
4.where和having的區(qū)別
having 通常與group by 分組結(jié)合使用。 where 和分組無(wú)關(guān)。
having 可以書寫聚合函數(shù) (聚合函數(shù)出現(xiàn)的位置: having 之后),例如having中的 聚合函數(shù)(count,sum,avg,max,min),是不可以出現(xiàn)where條件中。
where 是在分組之前進(jìn)行過(guò)濾的,having 是在分組之后進(jìn)行過(guò)濾的。
1.應(yīng)用和概念
比如我們登錄京東,淘寶,返回的商品信息可能有幾萬(wàn)條,不是一次全部顯示出來(lái)。是一頁(yè)顯示固定的條數(shù)。假設(shè)我們一每頁(yè)顯示5條記錄的方式來(lái)分頁(yè)。
-- 起始索引:從0開(kāi)始,索引是0表示數(shù)據(jù)表第一行數(shù)據(jù)select 字段列表 from 表名 limit 起始索引,查詢條目數(shù);
計(jì)算公式:起始索引=(當(dāng)前頁(yè)碼-1)* 每頁(yè)顯示的條數(shù)
注意:
分頁(yè)查詢
limit
是MySQL數(shù)據(jù)庫(kù)的方言Oracle分頁(yè)查詢使用
rownumber
SQLServer分頁(yè)查詢使用
top
2.分頁(yè)查詢
-- 查詢學(xué)生表中數(shù)據(jù),每四條數(shù)據(jù)為一頁(yè) select * from students limit 0,4; select * from students limit 4,4; select * from students limit 8,4; select * from students limit 12,4; ... -- 注意:最后一行不夠查詢條目數(shù),有多少就顯示多少
3.返回前幾條或者中間某幾行數(shù)據(jù)
-- 2表示分頁(yè)查詢的索引,對(duì)應(yīng)數(shù)據(jù)表是第3行數(shù)據(jù),4表示每頁(yè)顯示4條數(shù)據(jù) -- 查詢從第三行數(shù)據(jù)開(kāi)始查詢之后的四條數(shù)據(jù) select * from students limit 2,4;
4.SQL執(zhí)行順序
SELECT 字段名(5) FROM 表名(1) WHERE 條件(2) GROUP BY 分組列名(3) HAVING 條件(4) ORDER BY 排序列名(6) LIMIT 跳過(guò)行數(shù), 返回行數(shù)(7); 執(zhí)行順序:1234567
順序:1234567
關(guān)于“MySQL的DDL、DML及DQL基礎(chǔ)知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。