MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

本篇文章給大家?guī)砹岁P(guān)于mysql的相關(guān)知識,其中主要介紹了關(guān)于ddl、dml、dql的相關(guān)內(nèi)容,包括了操作數(shù)據(jù)表、操作數(shù)據(jù)庫、簡單查詢數(shù)據(jù)等等內(nèi)容,下面一起來看一下,希望對大家有幫助。

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

推薦學習:mysql

數(shù)據(jù)庫相關(guān)概念

什么是數(shù)據(jù)庫

保存數(shù)據(jù)的倉庫。它體現(xiàn)我們電腦中,就是一個軟件或者文件系統(tǒng)。然后把數(shù)據(jù)都保存這些特殊的文件中,并且需要使用固定的語言(SQL語言/語句)去操作文件中的數(shù)據(jù)。存儲數(shù)據(jù)的倉庫,數(shù)據(jù)是具有組織的進行存儲英文名:DataBase,簡稱 DB

數(shù)據(jù)庫的優(yōu)點

數(shù)據(jù)庫是按照特定的格式將數(shù)據(jù)存儲在文件中,通過SQL語句可以方便的對大量數(shù)據(jù)進行增、刪、改、查操作,數(shù)據(jù)庫是對大量的信息進行管理的高效的解決方案。

常見的數(shù)據(jù)庫

常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)

我們開發(fā)應(yīng)用程序的時候,程序中的所有數(shù)據(jù),最后都需要保存到專業(yè)軟件中。這些專業(yè)的保存數(shù)據(jù)的軟件我們稱為數(shù)據(jù)庫。我們學習數(shù)據(jù)庫,并不是學習如何去開發(fā)一個數(shù)據(jù)庫軟件,我們學習的是如何使用數(shù)據(jù)庫以及數(shù)據(jù)庫中的數(shù)據(jù)記錄的操作。而數(shù)據(jù)庫軟件是由第三方公司研發(fā)。

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

  • Oracle:它是Oracle公司的大型關(guān)系型數(shù)據(jù)庫。系統(tǒng)可移植性好、使用方便、功能強,適用于各類大、中、小、微機環(huán)境。它是一種高效率、安全可靠的。但是它是收費的。
  • mysql:早期由瑞典一個叫MySQL AB公司開發(fā)的,后期被sun公司收購,再后期被Oracle收購。體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。MySQL6.x版本也開始收費。
  • DB2 :IBM公司的數(shù)據(jù)庫產(chǎn)品,收費的。常應(yīng)用在銀行系統(tǒng)中.
  • SQLServer:MicroSoft 公司收費的中型的數(shù)據(jù)庫。C#、.net等語言常使用。
  • SyBase:Sybase公司的。 已經(jīng)淡出歷史舞臺。提供了一個非常專業(yè)數(shù)據(jù)建模的工具PowerDesigner。

常用數(shù)據(jù)庫:Java開發(fā)應(yīng)用程序主要使用的數(shù)據(jù)庫:MySQL(5.6)、Oracle、DB2。(原因:開源,免費,功能足夠強大,足以應(yīng)付web開發(fā))

關(guān)系型數(shù)據(jù)庫

在開發(fā)軟件的時候,軟件中的數(shù)據(jù)之間必然會有一定的關(guān)系存在。比如商品和客戶之間的關(guān)系,一個客戶是可以買多種商品,而一種商品是可以被多個客戶來購買的。

需要把這些數(shù)據(jù)保存在數(shù)據(jù)庫中,同時也要維護數(shù)據(jù)之間的關(guān)系,這時就可以直接使用上述的那些數(shù)據(jù)庫。而上述的所有數(shù)據(jù)庫都屬于關(guān)系型數(shù)據(jù)庫。

關(guān)系型數(shù)據(jù):設(shè)計數(shù)據(jù)庫的時候,需要使用E-R實體關(guān)系圖來描述。

E-R 是兩個單詞的首字母,E表示Entity實體 R表示Relationship 關(guān)系。

  • 1.數(shù)據(jù)表中的數(shù)據(jù)之間必然會有一定的關(guān)系存在,比如商品和客戶之間的關(guān)系,一個客戶是可以買多種商品,而一種商品是可以被多個客戶來購買的。
  • 2.設(shè)計數(shù)據(jù)庫的時候,可以使用ER實體關(guān)系圖來描述表之間的關(guān)系,E表示Entity 實體 , R表示Relationship 關(guān)系
  • 3.實體:可以理解成我們Java程序中的一個對象。比如商品,客戶等都是一個實體對象。在E-R圖中使用 矩形(長方形) 表示。
  • 4.屬性:實體對象中是含有屬性的,比如商品名、價格等。針對一個實體中的屬性,我們稱為這個實體的數(shù)據(jù),在E-R圖中使用橢圓表示。
  • 5.關(guān)系:實體和實體之間的關(guān)系:在E-R圖中使用菱形表示。

需求: 使用E-R圖描述 客戶、商品、訂單之間的關(guān)系
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

MySQL數(shù)據(jù)庫

SQL簡介

什么是SQL

Structured Query Language結(jié)構(gòu)化查詢語言。SQL語句不依賴于任何平臺,對所有的數(shù)據(jù)庫是通用的。學會了SQL語句的使用,可以在任何的數(shù)據(jù)庫使用,但都有特有內(nèi)容。SQL語句功能強大、簡單易學、使用方便。

SQL特點

SQL語句是一個非過程性的語言,每一條SQL執(zhí)行完都會有一個具體的結(jié)果出現(xiàn)。多條語句之間沒有影響

SQL作用

SQL語句主要是操作數(shù)據(jù)庫,數(shù)據(jù)表,數(shù)據(jù)表中的數(shù)據(jù)記錄

SQL通用語法

  1. SQL語句可以單行或多行書寫,以分號結(jié)尾。
  2. 可使用空格和縮進來增強語句的可讀性。
  3. MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字開發(fā)中一般大寫.
  4. 三種注釋
    – 單行注釋: — 注釋內(nèi)容
    – 多行注釋: /* 注釋內(nèi)容 */
    – # 注釋內(nèi)容:(mysql特有的單行注釋)

SQL分類
SQL是用來存取關(guān)系數(shù)據(jù)庫的語言,具有定義、操縱、控制和查詢關(guān)系型數(shù)據(jù)庫的四方面功能。所以針對四方面功能,我們將SQL進行了分類。

  1. DDL(Data Definition Language)數(shù)據(jù)定義語言
    用來定義數(shù)據(jù)庫對象:數(shù)據(jù)庫,表,列等。關(guān)鍵字:create drop alter truncate(清空數(shù)據(jù)記錄) show等

  2. DML(Data Manipulation Language)數(shù)據(jù)操作語言★★★

    在數(shù)據(jù)庫表中更新,增加和刪除記錄。如 update(更新), insert(插入), delete(刪除) 不包含查詢

  3. DQL(Data Query Language) 數(shù)據(jù)查詢語言★★★★★
    數(shù)據(jù)表記錄的查詢。關(guān)鍵字select。

  4. DCL(Data Control Language)數(shù)據(jù)控制語言(了解)

    是用來設(shè)置或更改數(shù)據(jù)庫用戶或角色權(quán)限的語句,如grant(設(shè)置權(quán)限),revoke(撤銷權(quán)限),begin transaction等。這個比較少用到。

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

MySQL 目錄結(jié)構(gòu)

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

MySQL 數(shù)據(jù)庫連接

MySQL是一個需要賬戶名密碼登錄的數(shù)據(jù)庫,登陸后使用,它提供了一個默認的root賬號,使用安裝時設(shè)置的密碼即可登錄。

啟動數(shù)據(jù)庫服務(wù):在打開dos窗口中輸入net start MySQL命令
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
關(guān)閉數(shù)據(jù)庫服務(wù):在打開dos窗口中輸入net stop MySQL命令
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
連接MySQL:登錄格式1:mysql -u用戶名 -p密碼

mysql -uroot -p123456

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
登錄格式2:mysql[-h連接主機ip地址 -P端口號3306] -u 用戶名 -p 密碼

mysql -h 127.0.0.1 -P 3306 -u root -p 123456

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
如果連接的是本機:可以省略 -h -P 主機IP和端口。這樣就可以登錄mysql數(shù)據(jù)庫了

退出:exit命令
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
顯示數(shù)據(jù)庫: show databases;
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

SQL_DDL_操作數(shù)據(jù)庫

DDL_創(chuàng)建和查看數(shù)據(jù)庫

創(chuàng)建數(shù)據(jù)庫:

1.直接創(chuàng)建數(shù)據(jù)庫

create database 數(shù)據(jù)庫名;

2.判斷數(shù)據(jù)庫是否存在并創(chuàng)建(如果不存在,則創(chuàng)建)

create database if not exists 數(shù)據(jù)庫名;

3.創(chuàng)建數(shù)據(jù)庫并指定字符集(編碼表)

create database 數(shù)據(jù)庫名 character set 字符集;

說明:字符集就是編碼表名,在mysql中utf8

查看數(shù)據(jù)庫:

1.查看所有數(shù)據(jù)庫

show databases;

2.查看某個數(shù)據(jù)庫的定義信息

show create database 數(shù)據(jù)庫名;

3.查看當前使用的數(shù)據(jù)庫

select database();

使用和切換數(shù)據(jù)庫:

use 數(shù)據(jù)庫名;

DDL_修改和刪除數(shù)據(jù)庫

修改數(shù)據(jù)庫:

1.修改數(shù)據(jù)庫字符集

-- alter 表示修改alter database 數(shù)據(jù)庫名 default character set 新字符集;

注意:如果修改數(shù)據(jù)庫指定的編碼表是utf8,記住不能寫utf-8

Java中的常用編碼對應(yīng)mysql數(shù)據(jù)庫中的編碼

Java MySQL
UTF-8 utf8
GBK gbk
GB2312 gb2312
ISO-8859-1 latin1

刪除數(shù)據(jù)庫:

1.直接刪除

-- drop 刪除數(shù)據(jù)庫drop database 數(shù)據(jù)庫名;

2.刪除數(shù)據(jù)庫時判斷是否存在(如果存在,則刪除)

drop database if exists 數(shù)據(jù)庫名;

SQL_DDL_操作數(shù)據(jù)表

DDL_數(shù)據(jù)庫約束

約束的概念:

  • 約束是作用于表中列上的規(guī)則,用于限制加入表的數(shù)據(jù)

  • 約束的存在保證了數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和完整性

約束的分類:

約束名稱 關(guān)鍵字 描述
非空約束 NOT NULL 保證列中所有數(shù)據(jù)不能有null空值
唯一約束 UNIQUE 保證列中所有數(shù)據(jù)各不相同
主鍵約束 PRIMARY KEY 主鍵是一行數(shù)據(jù)的唯一標識,要求非空且唯一
檢查約束 CHECK 保證列中的值滿足某一條件
默認約束 DEFAULT 保存數(shù)據(jù)時,未指定值則采用默認值
外鍵約束 FOREIGN KEY 外鍵用來讓兩個表的數(shù)據(jù)之間建立鏈接,保證數(shù)據(jù)的一致性和完整性

MySQL5.7不支持檢查約束,但寫入語句不會報錯,MySQL8.0版本支持檢查約束

非空約束

非空約束用于保證列中所有數(shù)據(jù)不能有NULL值

1.建表時添加約束

-- 創(chuàng)建表時添加非空約束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)建表時添加唯一約束

-- 方式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ù)的唯一標識,要求非空且唯一
  • 一張表只能有一個主鍵

1.創(chuàng)建表時添加主鍵約束

create table 表名(     字段名 數(shù)據(jù)類型 PRIMARY KEY [AUTO_INCREMENT],     -- [AUTO_INCREMENT] 當不指定值時自動增長     ...);create table 表名(     列名 數(shù)據(jù)類型,     [CONSTRAINT] [約束名稱] PRIMARY KEY(列名))

2.建完表之后添加主鍵約束

alter table 表名 add PRIMARY KEY(字段名);

3.刪除主鍵約束

alter table 表名 drop PRIMARY KEY;

默認約束

保存數(shù)據(jù)時,未指定值則采用默認值

1.創(chuàng)建表時添加默認約束

create table 表名(     字段名 數(shù)據(jù)類型 default 默認值,     ...);

2.建完表后添加默認約束

alter table 表名 alter 列名 set DEFAULT 默認值;

3.刪除約束

alter table 表名 alter 列名 drop DEFAULT;

DDL_創(chuàng)建和查看和表

前提 :創(chuàng)建數(shù)據(jù)庫db1并使用這個數(shù)據(jù)庫

-- 創(chuàng)建數(shù)據(jù)庫create database db1;-- 使用數(shù)據(jù)庫use db1;

創(chuàng)建表:

create table 表名(     字段名1 字段類型 約束條件,     字段名2 字段類型 約束條件,     ...     字段名n 字段類型 約束條件);-- 注意:最后一個字段不加逗號

創(chuàng)建一個表結(jié)構(gòu)和其他表結(jié)構(gòu)相同的表

create table 表名 like 其他表名;

MySQL中常用的數(shù)據(jù)類型
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
案列需求:

設(shè)計一張學生表,要求如下:

  • 學號,要求唯一主鍵,自增
  • 姓名,不能為空,且唯一
  • 性別,只有男和女,默認值為null
  • 班級,字符串類型
  • 入學時間,取值為年、月、日
  • 數(shù)學成績,double類型,默認為60分
  • 英語成績,double類型,沒有默認值
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);

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
查看表:

1.查看某個數(shù)據(jù)庫中所有的表

show tables;

2.查看表結(jié)構(gòu)

desc 表名;

3.查看創(chuàng)建表的SQL語句

show create table 表名;-- 根據(jù)該語句查看上面案列的建表sql語句show create table students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

DDL_刪除表和修改表的結(jié)構(gòu)

刪除表:

1.直接刪除

drop table 表名;

2.刪除表時判斷表是否存在(如果存在,則刪除)

drop table if exists 表名;

修改表:

1.修改表名

alter table 舊表名 rename to 新表名;

2.向表中添加一個字段(一列)

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 字段名;

SQL_DML_操作數(shù)據(jù)庫

DML_插入表數(shù)據(jù)

1.插入全部字段

-- 全部字段寫出來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);

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
2.插入部分數(shù)據(jù)

-- 插入姓名,班級,入學時間,英語成績-- id默認增長,性別默認null,數(shù)學默認60 insert into students(name,class,starttime,english) values('王五','高三3班','2022-03-02',78);

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
說明:插入部分數(shù)據(jù)的時候,要求列名一定書寫出來。

3.批量插入數(shù)據(jù)

insert into 表名 values(字段值1, 字段值2...),(字段值1, 字段值2...),(字段值1, 字段值2...);

沒有添加數(shù)據(jù)的字段會使用NULL

注意:

  • 值與列一一對應(yīng)。有多少個列,就需要寫多少個值。如果某一個列沒有值,可以使用null,表示插入空。

  • 值的數(shù)據(jù)類型,與列被定義的數(shù)據(jù)類型要相匹配,并且值的長度,不能夠超過定義的列的長度。

  • 字符串:插入字符類型的數(shù)據(jù),建議寫英文單引號括起來。在mysql中,使用單引號表示字符串

  • date 時間類型的數(shù)據(jù)也得使用英文單引號括起來: 如yyyy-MM-dd

DML_更新表數(shù)據(jù)

1.不帶條件修改數(shù)據(jù)

update 表名 set 字段名=新的值,字段名=新的值,...; -- 注意:不帶條件的修改是將數(shù)據(jù)表中的整列都做修改 -- 修改students表中math的值為90update students set math=90;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
2.帶條件修改數(shù)據(jù)

update 表名 set 字段名=新的值,字段名=新的值,... where 條件; -- 修改students表中王五的性別為男,數(shù)學成績設(shè)置為70update students set sex='男',math=70 where name='王五';

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
3.關(guān)鍵字說明

UPDATE: 表示修改記錄  SET: 要改哪個字段WHERE: 設(shè)置條件

4.注意

  • 不帶條件的更新數(shù)據(jù)庫記錄:UPDATE 表名 SET 字段名=新的值;是將整個表中修改的列修改
  • 帶條件:UPDATE 表名 SET 字段名=新的值 WHERE 條件

DML_刪除表記錄

1.不帶條件刪除

DELETE -- 刪除記錄DELETE FROM 表名;表還在,可以操作,只是刪除數(shù)據(jù)。

2.帶條件刪除

DELETE FROM 表名 WHERE 條件;-- 刪除學生表中的王五的信息DELETE FROM students WHERE name='王五';

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
3.truncate刪除表記錄(屬于DDL)

truncate table 表名;

4.truncate和delete區(qū)別

  • delete是將表中的數(shù)據(jù)一條一條刪除
  • truncate是將整個表摧毀,重新創(chuàng)建一個新的表,新的表結(jié)構(gòu)和原來表結(jié)構(gòu)一模一樣

SQL_DQL_ 簡單查詢數(shù)據(jù)

準備一張學生表,在這張表上進行查詢操作
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

DQL_基礎(chǔ)查詢

1.查詢所有數(shù)據(jù)

select * from 表名; -- 查詢學生表中所有的數(shù)據(jù)select * from students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
2.查詢指定列的數(shù)據(jù)

select 字段名1,字段名2,... from 表名; -- 查詢姓名和班級這兩個字段select name,class from students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
3.查詢到的字段設(shè)置別名

select 字段名1 as 別名1,字段名2 as 別名2 from 表名; -- 查詢students表中的字段并設(shè)置別名select id as 學號,name as 姓名,sex as 性別,class as 班級 , starttime as 入學時間 from students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
4.查詢到的數(shù)據(jù)去重

-- DISTINCT  去重復-- 查詢班級字段結(jié)果不出現(xiàn)重復的select DISTINCT class from students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

DQL_條件查詢

1.條件查詢語法

select 字段名1,字段名2,... where 條件列表;

2.條件運算符

符號 功能
> 大于
小于
>= 大于等于
小于等于
= 等于
或!= 不等于
BETWEEN…AND… 在某個范圍內(nèi)(都包括)
IN(…) 多選一
LIKE 模糊查詢,_單個任意字符,%多個任意字符
IS NULL 為空
IS NOT NULL 不為空
AND 或 && 與,并且
OR 或 || 或,或者
NOT 或 ! 非,不是

3.查詢數(shù)學成績大于80并且性別為男的學生

-- 兩個條件同時滿足select * from students where math > 80 and sex='男';

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
4.查詢英語成績在60-80之間的學生

-- BETWEEN 值1 AND 值2 -- 表示從值1到值2范圍,包頭又包尾 select * from students where english between 60 and 80; select * from students where english>=60 && english<=80;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
5.查詢學號為1或者2或者3的學生

-- in里面的每個數(shù)據(jù)都會作為一次條件,只要滿足條件的就會顯示select * from students where id in (1,2,3);

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

DQL_模糊查詢

LIKE:表示模糊查詢

select * from 表名 where 字段名 like '通配字符';

MySQL通配符有兩個:

  • %:表示0個或多個字符(任意字符)
  • _:表示一個字符

1.查找名字中以開頭的學生

-- '孫%'表示孫后面有任意個字符select * from students where name like '孫%';

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
2.查找名字中以開頭的兩個字的學習

-- '孫_'表示孫后面只能有一個字符select * from students where name like '孫_';

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

DQL_查詢排序

通過ORDER BY子句,可以將查詢出的結(jié)果進行排序(排序只是顯示方式,不會影響數(shù)據(jù)庫中數(shù)據(jù)的順序)

-- ASC:升序排序(默認)-- DESC:降序排序select 字段 from 表名 order by 排序字段 [ASC|DESC];

1.單列排序

-- 查詢學生的數(shù)學成績按照升序排序select * from students order by math ASC;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
2.組合排序

-- 查詢數(shù)學成績升序的基礎(chǔ)上,英語成績降序-- 組合排序就是先按第一個字段進行排序,如果第一個字段相同,才按第二個字段進行排序,依次類推。 select * from students order by math ASC,english DESC;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

DQL_ 聚合函數(shù)

之前我們做的查詢都是橫向查詢,它們都是根據(jù)條件一行一行的進行判斷,而使用聚合函數(shù)查詢是縱向查詢,它是對一列的值進行計算,然后返回一個結(jié)果值;另外聚合函數(shù)會忽略空值,對于null不作為統(tǒng)計。

1.五個聚合函數(shù)

函數(shù)名 功能
count(列名) 統(tǒng)計數(shù)量(一般選用不為null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值

2.聚合函數(shù)語法

select 聚合函數(shù)名(列名) from 表名;

注意:null 值不參與所有聚合函數(shù)運算

3.查詢學生總數(shù)

select count(id) from students;-- 通常使用select count(*) from students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
4.查詢最高分和最低分

-- 查詢數(shù)學最高分和英語最低分select max(math),min(english) from students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
5.求和求平均值

-- 求該表數(shù)學總分和平均值select sum(math),avg(math) from students;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
6.ifnull()函數(shù)

-- ifnull(列名,默認值)函數(shù)表示判斷該列是否為空值,如果為null,返回默認值,如果不為空,返回實際值ifnull(math,60);  -- 如果數(shù)學成績?yōu)閚ull時,返回60,如果不為null,就返回實際值

DQL_分組查詢

分組: 按照某一列或者某幾列。把相同的數(shù)據(jù),進行合并輸出。

1.注意

  • 按照某一列進行分組,目的為了統(tǒng)計使用。
  • 聚合函數(shù):分組之后進行計算
  • 通常select后面的內(nèi)容是被分組的列,以及聚合函數(shù)
  • 在sql語句中的where后面不允許添加聚合函數(shù)
  • 可以使用having條件,表示分組之后的條件,在having后面可以書寫聚合函數(shù)

2.查詢各個班級的數(shù)學成績總和

-- 查詢每個班的數(shù)學成績總和select class,sum(math) from students group by class;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
3.having用法

having必須和group by 一起使用,having和where的用法一模一樣,where怎么使用having就怎么使用,where不能使用的,having也可以使用,比如說where后面不可以使用聚合函數(shù),但是在having后面是可以使用聚合函數(shù)的。

-- 查詢每個班數(shù)學總成績大于300分的班級并顯示總成績 select class,sum(math) from students group by class having sum(math)>300;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
4.where和having的區(qū)別

  • having 通常與group by 分組結(jié)合使用。 where 和分組無關(guān)。

  • having 可以書寫聚合函數(shù) (聚合函數(shù)出現(xiàn)的位置: having 之后),例如having中的 聚合函數(shù)(count,sum,avg,max,min),是不可以出現(xiàn)where條件中。

  • where 是在分組之前進行過濾的,having 是在分組之后進行過濾的。

DQL_分頁查詢

1.應(yīng)用和概念

比如我們登錄京東,淘寶,返回的商品信息可能有幾萬條,不是一次全部顯示出來。是一頁顯示固定的條數(shù)。假設(shè)我們一每頁顯示5條記錄的方式來分頁。
MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)

-- 起始索引:從0開始,索引是0表示數(shù)據(jù)表第一行數(shù)據(jù)select 字段列表 from 表名 limit 起始索引,查詢條目數(shù);

計算公式:起始索引=(當前頁碼-1)* 每頁顯示的條數(shù)

注意:

  • 分頁查詢limit是MySQL數(shù)據(jù)庫的方言
  • Oracle分頁查詢使用rownumber
  • SQLServer分頁查詢使用top

2.分頁查詢

<span style="font-family: "Microsoft Yahei", "Hiragino Sans GB", Helvetica, "Helvetica Neue", ???è?ˉé?…é?‘, Tahoma, Arial, sans-serif;">-- 查詢學生表中數(shù)據(jù),每四條數(shù)據(jù)為一頁<br/>select * from students limit 0,4;<br/>select * from students limit 4,4;<br/>select * from students limit 8,4;<br/>select * from students limit 12,4;<br/>...<br/>-- 注意:最后一行不夠查詢條目數(shù),有多少就顯示多少</span><br/>

3.返回前幾條或者中間某幾行數(shù)據(jù)

-- 2表示分頁查詢的索引,對應(yīng)數(shù)據(jù)表是第3行數(shù)據(jù),4表示每頁顯示4條數(shù)據(jù) -- 查詢從第三行數(shù)據(jù)開始查詢之后的四條數(shù)據(jù) select * from students limit 2,4;

MySQL學習之DDL、DML及DQL基礎(chǔ)總結(jié)
4.SQL執(zhí)行順序

SELECT 字段名(5) FROM 表名(1) WHERE 條件(2) GROUP BY 分組列名(3) HAVING 條件(4) ORDER BY 排序列名(6) LIMIT 跳過行數(shù), 返回行數(shù)(7); 執(zhí)行順序:1234567

順序:1234567

推薦學習:mysql

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享