摘要:公司的數(shù)據(jù)庫產(chǎn)品收費的。常應(yīng)用在銀行系統(tǒng)中公司收費的中型的數(shù)據(jù)庫。嵌入式的小型數(shù)據(jù)庫,應(yīng)用在手機端。關(guān)鍵字,,等數(shù)據(jù)控制語言簡稱,用來定義數(shù)據(jù)庫的訪問權(quán)限和安全級別,及創(chuàng)建用戶。數(shù)據(jù)查詢語言簡稱,用來查詢數(shù)據(jù)庫中表的記錄。
01數(shù)據(jù)庫概念
</>復(fù)制代碼
* A: 什么是數(shù)據(jù)庫
數(shù)據(jù)庫就是存儲數(shù)據(jù)的倉庫,其本質(zhì)是一個文件系統(tǒng),數(shù)據(jù)按照特定的格式將數(shù)據(jù)存儲起來,用戶可以對數(shù)據(jù)庫中的數(shù)據(jù)進行增加,修改,刪除及查詢操作。
* B: 什么是數(shù)據(jù)庫管理系統(tǒng)
數(shù)據(jù)庫管理系統(tǒng)(DataBase Management System,DBMS):指一種操作和管理數(shù)據(jù)庫的大型軟件,用于建立、使用和維護數(shù)據(jù)庫,
對數(shù)據(jù)庫進行統(tǒng)一管理和控制,以保證數(shù)據(jù)庫的安全性和完整性。用戶通過數(shù)據(jù)庫管理系統(tǒng)訪問數(shù)據(jù)庫中表內(nèi)的數(shù)據(jù)。
02常見的數(shù)據(jù)庫
</>復(fù)制代碼
* A: 常見的數(shù)據(jù)庫
MYSQL :開源免費的數(shù)據(jù)庫,小型的數(shù)據(jù)庫.已經(jīng)被Oracle收購了.MySQL6.x版本也開始收費。
Oracle :收費的大型數(shù)據(jù)庫,Oracle公司的產(chǎn)品。Oracle收購SUN公司,收購MYSQL。
DB2 :IBM公司的數(shù)據(jù)庫產(chǎn)品,收費的。常應(yīng)用在銀行系統(tǒng)中.
SQLServer:MicroSoft 公司收費的中型的數(shù)據(jù)庫。C#、.net等語言常使用。
SyBase :已經(jīng)淡出歷史舞臺。提供了一個非常專業(yè)數(shù)據(jù)建模的工具PowerDesigner。
SQLite : 嵌入式的小型數(shù)據(jù)庫,應(yīng)用在手機端。
Java相關(guān)的數(shù)據(jù)庫:MYSQL,Oracle.
這里使用MySQL數(shù)據(jù)庫。MySQL中可以有多個數(shù)據(jù)庫,數(shù)據(jù)庫是真正存儲數(shù)據(jù)的地方
03數(shù)據(jù)庫和管理系統(tǒng)
</>復(fù)制代碼
* A: 數(shù)據(jù)庫管理系統(tǒng)
----數(shù)據(jù)庫1
----數(shù)據(jù)表1a
----數(shù)據(jù)表1b
----數(shù)據(jù)庫2
-----數(shù)據(jù)表2a
-----數(shù)據(jù)表2b
04數(shù)據(jù)表和Java中類的對應(yīng)關(guān)系
</>復(fù)制代碼
* A:數(shù)據(jù)庫中以表為組織單位存儲數(shù)據(jù)。
表類似我們的Java類,每個字段都有對應(yīng)的數(shù)據(jù)類型。
那么用我們熟悉的java程序來與關(guān)系型數(shù)據(jù)對比,就會發(fā)現(xiàn)以下對應(yīng)關(guān)系。
類----------表
類中屬性----------表中字段
對象----------記錄
05數(shù)據(jù)表和Java中類的對應(yīng)關(guān)系用戶表舉例
</>復(fù)制代碼
* A:舉例:
賬務(wù)表
id name age
1 lisi 23
2 wang 24
每一條記錄對應(yīng)一個User的對象
[user1 id = 1 name = lisi age = 23]
[user2 id = 2 name = wang age = 24]
06MySQL數(shù)據(jù)庫安裝
</>復(fù)制代碼
A: 安裝步驟參見 day28_source《MySQL安裝圖解.doc》
B: 安裝后,MySQL會以windows服務(wù)的方式為我們提供數(shù)據(jù)存儲功能。開啟和關(guān)閉服務(wù)的操作:右鍵點擊我的電腦→管理→服務(wù)→可以找到MySQL服務(wù)開啟或停止。
07數(shù)據(jù)庫在系統(tǒng)服務(wù)
</>復(fù)制代碼
* A:開啟服務(wù)和關(guān)閉服務(wù)
方式1: 我的電腦-----> (右鍵)管理---->服務(wù)和應(yīng)用程序---->服務(wù)----找到MySQL服務(wù)右鍵啟動或關(guān)閉
方式2: 進入dos窗口 使用命令: net start mysql 開啟MySQL服務(wù); 命令:net stop mysql 關(guān)閉MySql服務(wù)
08MySQL的登錄
</>復(fù)制代碼
* A: MySQL是一個需要賬戶名密碼登錄的數(shù)據(jù)庫,登陸后使用,它提供了一個默認(rèn)的root賬號,使用安裝時設(shè)置的密碼即可登錄。
格式1:cmd> mysql –u用戶名 –p密碼
例如:mysql -uroot –proot
格式2:cmd> mysql --host=ip地址 --user=用戶名 --password=密碼
例如:mysql --host=127.0.0.1 --user=root --password=root
09SQLYog軟件介紹
</>復(fù)制代碼
* A: 具體參見 《SQLYog配置.doc》
=======================================第二節(jié)課開始====================================
10SQL語句介紹和分類</>復(fù)制代碼
* A:SQL介紹
* 前面學(xué)習(xí)了接口的代碼體現(xiàn),現(xiàn)在來學(xué)習(xí)接口的思想,接下里從生活中的例子進行說明。
* 舉例:我們都知道電腦上留有很多個插口,而這些插口可以插入相應(yīng)的設(shè)備,這些設(shè)備為什么能插在上面呢?
* 主要原因是這些設(shè)備在生產(chǎn)的時候符合了這個插口的使用規(guī)則,否則將無法插入接口中,更無法使用。發(fā)現(xiàn)這個插口的出現(xiàn)讓我們使用更多的設(shè)備。
* B: SQL分類
* 數(shù)據(jù)定義語言:簡稱DDL(Data Definition Language),用來定義數(shù)據(jù)庫對象:數(shù)據(jù)庫,表,列等。關(guān)鍵字:create,alter,drop等
* 數(shù)據(jù)操作語言:簡稱DML(Data Manipulation Language),用來對數(shù)據(jù)庫中表的記錄進行更新。關(guān)鍵字:insert,delete,update等
* 數(shù)據(jù)控制語言:簡稱DCL(Data Control Language),用來定義數(shù)據(jù)庫的訪問權(quán)限和安全級別,及創(chuàng)建用戶。
* 數(shù)據(jù)查詢語言:簡稱DQL(Data Query Language),用來查詢數(shù)據(jù)庫中表的記錄。關(guān)鍵字:select,from,where等
* C: SQL通用語法
SQL語句可以單行或多行書寫,以分號結(jié)尾
可使用空格和縮進來增強語句的可讀性
MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,建議使用大寫,例如:SELECT * FROM user。
同樣可以使用/**/的方式完成注釋
11數(shù)據(jù)表中的數(shù)據(jù)類型
</>復(fù)制代碼
* A:MySQL中的我們常使用的數(shù)據(jù)類型如下
詳細的數(shù)據(jù)類型如下(不建議詳細閱讀!)
分類 類型名稱 說明
整數(shù)類型 tinyInt 很小的整數(shù)
smallint 小的整數(shù)
mediumint 中等大小的整數(shù)
int(integer) 普通大小的整數(shù)
小數(shù)類型 float 單精度浮點數(shù)
double 雙精度浮點數(shù)
decimal(m,d) 壓縮嚴(yán)格的定點數(shù)
日期類型 year YYYY 1901~2155
time HH:MM:SS -838:59:59~838:59:59
date YYYY-MM-DD 1000-01-01~9999-12-3
datetime YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
timestamp YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC
文本、二進制類型 CHAR(M) M為0~255之間的整數(shù)
VARCHAR(M) M為0~65535之間的整數(shù)
TINYBLOB 允許長度0~255字節(jié)
BLOB 允許長度0~65535字節(jié)
MEDIUMBLOB 允許長度0~167772150字節(jié)
LONGBLOB 允許長度0~4294967295字節(jié)
TINYTEXT 允許長度0~255字節(jié)
TEXT 允許長度0~65535字節(jié)
MEDIUMTEXT 允許長度0~167772150字節(jié)
LONGTEXT 允許長度0~4294967295字節(jié)
VARBINARY(M)允許長度0~M個字節(jié)的變長字節(jié)字符串
BINARY(M) 允許長度0~M個字節(jié)的定長字節(jié)字符串
12創(chuàng)建數(shù)據(jù)庫操作
</>復(fù)制代碼
* A: 創(chuàng)建數(shù)據(jù)庫
格式:
* create database 數(shù)據(jù)庫名;
* create database 數(shù)據(jù)庫名 character set 字符集;
例如:
#創(chuàng)建數(shù)據(jù)庫 數(shù)據(jù)庫中數(shù)據(jù)的編碼采用的是安裝數(shù)據(jù)庫時指定的默認(rèn)編碼 utf8
CREATE DATABASE day21_1;
#創(chuàng)建數(shù)據(jù)庫 并指定數(shù)據(jù)庫中數(shù)據(jù)的編碼
CREATE DATABASE day21_2 CHARACTER SET utf8;
* B: 查看數(shù)據(jù)庫
查看數(shù)據(jù)庫MySQL服務(wù)器中的所有的數(shù)據(jù)庫:
show databases;
查看某個數(shù)據(jù)庫的定義的信息:
show create database 數(shù)據(jù)庫名;
例如:
show create database day21_1;
* C: 刪除數(shù)據(jù)庫
drop database 數(shù)據(jù)庫名稱;
例如:
drop database day21_2;
* D: 其他的數(shù)據(jù)庫操作命令
切換數(shù)據(jù)庫:
use 數(shù)據(jù)庫名;
例如:
use day21_1;
* E: 查看正在使用的數(shù)據(jù)庫:
select database();
13創(chuàng)建數(shù)據(jù)表格式
</>復(fù)制代碼
* A:格式:
create table 表名(
字段名 類型(長度) 約束,
字段名 類型(長度) 約束
);
例如:
###創(chuàng)建分類表
CREATE TABLE sort (
sid INT, #分類ID
sname VARCHAR(100) #分類名稱
);
14約束
</>復(fù)制代碼
* A: 約束的作用:
create table 表名(
列名 類型(長度) 約束,
列名 類型(長度) 約束
);
限制每一列能寫什么數(shù)據(jù),不能寫什么數(shù)據(jù)。
* B: 哪些約束:
主鍵約束
非空約束
唯一約束
外鍵約束
15SQL代碼的保存
</>復(fù)制代碼
* A: 當(dāng)sql語句執(zhí)行了,就已經(jīng)對數(shù)據(jù)庫進行操作了,一般不用保存操作
在SQLyog 中Ctrl + S 保存的是寫sql語句。
16創(chuàng)建用戶表
</>復(fù)制代碼
* A: 創(chuàng)建用戶表:
需求:創(chuàng)建用戶表,用戶編號,姓名,用戶的地址
* B: SQL語句
CREAT TABLE users (
uid INT,
uname VARCHAR(20),
uaddress VARCHAR(200)
);
17主鍵約束
</>復(fù)制代碼
* A: 主鍵是用于標(biāo)識當(dāng)前記錄的字段。它的特點是非空,唯一。
在開發(fā)中一般情況下主鍵是不具備任何含義,只是用于標(biāo)識當(dāng)前記錄。
* B: 格式:
1.在創(chuàng)建表時創(chuàng)建主鍵,在字段后面加上 primary key.
create table tablename(
id int primary key,
.......
)
2. 在創(chuàng)建表時創(chuàng)建主鍵,在表創(chuàng)建的最后來指定主鍵
create table tablename(
id int,
.......,
primary key(id)
)
3.刪除主鍵:alter table 表名 drop primary key;
alter table sort drop primary key;
4.主鍵自動增長:一般主鍵是自增長的字段,不需要指定。
實現(xiàn)添加自增長語句,主鍵字段后加auto_increment(只適用MySQL)
18常見表的操作
</>復(fù)制代碼
* A: 查看數(shù)據(jù)庫中的所有表:
格式:show tables;
? 查看表結(jié)構(gòu):
格式:desc 表名;
例如:desc sort;
* B: 格式:drop table 表名;
例如:drop table sort;
19修改表結(jié)構(gòu)
</>復(fù)制代碼
* A: 修改表添加列
alter table 表名 add 列名 類型(長度) 約束;
例如:
#1,為分類表添加一個新的字段為 分類描述 varchar(20)
ALTER TABLE sort ADD sdesc VARCHAR(20);
* B: 修改表修改列的類型長度及約束
alter table 表名 modify 列名 類型(長度) 約束;
例如:
#2, 為分類表的分類名稱字段進行修改,類型varchar(50) 添加約束 not null
ALTER TABLE sort MODIFY sname VARCHAR(50) NOT NULL;
* C: 修改表修改列名
alter table 表名 change 舊列名 新列名 類型(長度) 約束;
例如:
#3, 為分類表的分類名稱字段進行更換 更換為 snamesname varchar(30)
ALTER TABLE sort CHANGE sname snamename VARCHAR(30);
* D: 修改表刪除列
alter table 表名 drop 列名;
例如:
#4, 刪除分類表中snamename這列
ALTER TABLE sort DROP snamename;
* E: 修改表名
rename table 表名 to 新表名;
例如:
#5, 為分類表sort 改名成 category
RENAME TABLE sort TO category;
* F: 修改表的字符集
salter table 表名 character set 字符集;
例如:
#6, 為分類表 category 的編碼表進行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
=============================第三節(jié)課開始====================================
20數(shù)據(jù)表添加數(shù)據(jù)_1</>復(fù)制代碼
* A: 語法:
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
* 舉例:
INSERT INTO product (id,pname,price) VALUES (1,"筆記本",5555.99);
INSERT INTO product (id,pname,price) VALUES (2,"智能手機",9999);
* 注意:
列表,表名問題
對應(yīng)問題,個數(shù),數(shù)據(jù)類型
21數(shù)據(jù)表添加數(shù)據(jù)_2
</>復(fù)制代碼
* A: 添加數(shù)據(jù)格式,不考慮主鍵
insert into 表名 (列名) values (值)
* 舉例:
INSERT INTO product (pname,price) VALUE("洗衣機",800);
* B: 添加數(shù)據(jù)格式,所有值全給出
格式
insert into 表名 values (值1,值2,值3..); --向表中插入所有列
INSERT INOT product VALUES (4,"微波爐",300.25)
* C: 添加數(shù)據(jù)格式,批量寫入
格式:
insert into 表名 (列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3)
舉例:
INSERT INTO product (pname,price) VALUES
("智能機器人",25999.22),
("彩色電視",1250.36),
("沙發(fā)",58899.02)
22更新數(shù)據(jù)
</>復(fù)制代碼
* A: 用來修改指定條件的數(shù)據(jù),將滿足條件的記錄指定列修改為指定值
語法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 條件;
* B: 注意:
列名的類型與修改的值要一致.
修改值得時候不能超過最大長度.
值如果是字符串或者日期需要加’’.
* C: 例如:
#1,將指定的sname字段中的值 修改成 日用品
UPDATE sort SET sname="日用品";
#2, 將sid為s002的記錄中的sname改成 日用品
UPDATE sort SET sname="日用品" WHERE sid="s002";
UPDATE sort SET sname="日用品" WHERE sid="s003";
23刪除數(shù)據(jù)
</>復(fù)制代碼
?* A: 語法:
delete from 表名 [where 條件];
或者
truncate table 表名;
* B: 面試題:
刪除表中所有記錄使用delete from 表名; 還是用truncate table 表名;
刪除方式:delete 一條一條刪除,不清空auto_increment記錄數(shù)。
truncate 直接將表刪除,重新建表,auto_increment將置為零,從新開始。
* C: 例如:
DELETE FROM sort WHERE sname="日用品";
#表數(shù)據(jù)清空
DELETE FROM sort;
24命令行亂碼問題
</>復(fù)制代碼
A: 問題
我們在dos命令行操作中文時,會報錯
insert into user(username,password) values(‘張三’,’123’);
ERROR 1366 (HY000): Incorrect string value: "xD5xC5xC8xFD" for column "username" at row 1
B: 原因:因為mysql的客戶端編碼的問題我們的是utf8,而系統(tǒng)的cmd窗口編碼是gbk
解決方案(臨時解決方案):修改mysql客戶端編碼。
show variables like "character%"; 查看所有mysql的編碼
client connetion result 和客戶端相關(guān)
database server system 和服務(wù)器端相關(guān)
將客戶端編碼修改為gbk.
set character_set_results=gbk; / set names gbk;
以上操作,只針對當(dāng)前窗口有效果,如果關(guān)閉了服務(wù)器便失效。如果想要永久修改,通過以下方式:
在mysql安裝目錄下有my.ini文件
default-character-set=gbk 客戶端編碼設(shè)置
character-set-server=utf8 服務(wù)器端編碼設(shè)置
注意:修改完成配置文件,重啟服務(wù)
25數(shù)據(jù)表和測試數(shù)據(jù)準(zhǔn)備
</>復(fù)制代碼
* A: 查詢語句,在開發(fā)中使用的次數(shù)最多,此處使用“zhangwu” 賬務(wù)表。
創(chuàng)建賬務(wù)表:
CREATE TABLE zhangwu (
id INT PRIMARY KEY AUTO_INCREMENT, -- 賬務(wù)ID
name VARCHAR(200), -- 賬務(wù)名稱
money DOUBLE, -- 金額
);
* B: 插入表記錄:
INSERT INTO zhangwu(id,name,money) VALUES (1,"吃飯支出",247);
INSERT INTO zhangwu(id,name,money) VALUES (2,"工資收入",12345);
INSERT INTO zhangwu(id,name,money) VALUES (3,"服裝支出",1000);
INSERT INTO zhangwu(id,name,money) VALUES (4,"吃飯支出",325);
INSERT INTO zhangwu(id,name,money) VALUES (5,"股票收入",8000);
INSERT INTO zhangwu(id,name,money) VALUES (6,"打麻將支出",8000);
INSERT INTO zhangwu(id,name,money) VALUES (7,null,5000);
26數(shù)據(jù)的基本查詢
</>復(fù)制代碼
* A: 查詢指定字段信息
select 字段1,字段2,...from 表名;
例如:
select id,name from zhangwu;
* B: 查詢表中所有字段
select * from 表名;
例如:
select * from zhangwu;
注意:使用"*"在練習(xí)、學(xué)習(xí)過程中可以使用,在實際開發(fā)中,不推薦使用。原因,要查詢的字段信息不明確,若字段數(shù)量很多,會導(dǎo)致查詢速度很慢。
* C: distinct用于去除重復(fù)記錄
select distinct 字段 from 表名;
例如:
select distinct money from zhangwu;
* D: 別名查詢,使用的as關(guān)鍵字,as可以省略的.
別名可以給表中的字段,表設(shè)置別名。 當(dāng)查詢語句復(fù)雜時,使用別名可以極大的簡便操作。
表別名格式:
select * from 表名 as 別名;
或
select * from 表名 別名;
列別名格式:
select 字段名 as 別名 from 表名;
或
select 字段名 別名 from 表名;
例如
表別名:
select * from zhangwu as zw;
列別名:
select money as m from zhangwu;
或
select money m from zhangwu;
我們在sql語句的操作中,可以直接對列進行運算。
例如:將所有賬務(wù)的金額+10000元進行顯示.
select pname,price+10000 from product;
==============================第四節(jié)課開始====================================
27數(shù)據(jù)的條件查詢_1</>復(fù)制代碼
* A:條件查詢
where語句表條件過濾。滿足條件操作,不滿足不操作,多用于數(shù)據(jù)的查詢與修改。
* B : 格式 :
select 字段 from 表名 where 條件;
* C: while條件的種類如下:
比較運算符
> < <= >= = <> ---------- 大于、小于、大于(小于)等于、不等于
BETWEEN ...AND... ----------- 顯示在某一區(qū)間的值(含頭含尾)
IN(set) -----------顯示在in列表中的值,例:in(100,200)
LIKE 通配符 -----------模糊查詢,Like語句中有兩個通配符:
% 用來匹配多個字符;例first_name like ‘a(chǎn)%’;
_ 用來匹配一個字符。例first_name like ‘a(chǎn)_’;
IS NULL 判斷是否為空
------------is null; 判斷為空
is not null; 判斷不為空
* D 邏輯運算符
and ------------ 多個條件同時成立
or ------------ 多個條件任一成立
not ------------ 不成立,例:where not(salary>100);
* E: 例如:
查詢所有吃飯支出記錄
SELECT * FROM zhangwu WHERE name = "吃飯支出";
查詢出金額大于1000的信息
SELECT * FROM zhangwu WHERE money >1000;
查詢出金額在2000-5000之間的賬務(wù)信息
SELECT * FROM zhangwu WHERE money >=2000 AND money <=5000;
或
SELECT * FROM zhangwu WHERE money BETWEEN 2000 AND 5000;
查詢出金額是1000或5000或3500的商品信息
SELECT * FROM zhangwu WHERE money =1000 OR money =5000 OR money =3500;
或
SELECT * FROM zhangwu WHERE money IN(1000,5000,3500);
28數(shù)據(jù)的條件查詢_2
</>復(fù)制代碼
* A 模糊查詢
查詢出賬務(wù)名稱包含”支出”的賬務(wù)信息。
SELECT * FROM zhangwu WHERE name LIKE "%支出%";
* B 查詢出賬務(wù)名稱中是五個字的賬務(wù)信息
SELECT * FROM gjp_ledger WHERE ldesc LIKE "_____"; -- 五個下劃線_
* C 查詢出賬務(wù)名稱不為null賬務(wù)信息
SELECT * FROM zhangwu WHERE name IS NOT NULL;
SELECT * FROM zhangwu WHERE NOT (name IS NULL);
29排序查詢
</>復(fù)制代碼
* A: 排序查詢
使用格式
* 通過order by語句,可以將查詢出的結(jié)果進行排序。放置在select語句的最后。
* SELECT * FROM 表名 ORDER BY 字段ASC;
* ASC 升序 (默認(rèn))
* DESC 降序
* B: 案例代碼
/*
查詢,對結(jié)果集進行排序
升序,降序,對指定列排序
order by 列名 [desc][asc]
desc 降序
asc 升序排列,可以不寫
*/
-- 查詢賬務(wù)表,價格進行升序
SELECT * FROM zhangwu ORDER BY zmoney ASC
-- 查詢賬務(wù)表,價格進行降序
SELECT * FROM zhangwu ORDER BY zmoney DESC
-- 查詢賬務(wù)表,查詢所有的支出,對金額降序排列
-- 先過濾條件 where 查詢的結(jié)果再排序
SELECT * FROM zhangwu WHERE zname LIKE"%支出%" ORDER BY zmoney DESC
30聚合函數(shù)
</>復(fù)制代碼
* A: 聚合函數(shù)
* B: 函數(shù)介紹
* 之前我們做的查詢都是橫向查詢,它們都是根據(jù)條件一行一行的進行判斷,而使用聚合函數(shù)查詢是縱向查詢,
它是對一列的值進行計算,然后返回一個單一的值;另外聚合函數(shù)會忽略空值。
* count:統(tǒng)計指定列不為NULL的記錄行數(shù);
* sum:計算指定列的數(shù)值和,如果指定列;
* max:計算指定列的最大值,如果指定列是字符串類型,那么使用字符串類型不是數(shù)值類型,那么計算結(jié)果為0排0序運算;
* min:計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算;
* avg:計算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計算結(jié)果為0;
* C: 案例代碼
/*
使用聚合函數(shù)查詢計算
*/
-- count 求和,對表中的數(shù)據(jù)的個數(shù)求和 count(列名)
-- 查詢統(tǒng)計賬務(wù)表中,一共有多少條數(shù)據(jù)
SELECT COUNT(*)AS"count" FROM zhangwu
-- sum求和,對一列中數(shù)據(jù)進行求和計算 sum(列名)
-- 對賬務(wù)表查詢,對所有的金額求和計算
SELECT SUM(zmoney) FROM zhangwu
-- 求和,統(tǒng)計所有支出的總金額
SELECT SUM(zname) FROM zhangwu WHERE zname LIKE"%收入%"
INSERT INTO zhangwu (zname) VALUES ("彩票收入")
-- max 函數(shù),對某列數(shù)據(jù),獲取最大值
SELECT MAX(zmoney) FROM zhangwu
-- avg 函數(shù),計算一個列所有數(shù)據(jù)的平均數(shù)
SELECT AVG(zmoney)FROM zhangwu
31分組查詢
</>復(fù)制代碼
* A: 分組查詢
* a: 使用格式
* 分組查詢是指使用group by字句對查詢信息進行分組,例如:我們要統(tǒng)計出zhanguw表中所有分類賬務(wù)的總數(shù)量,這時就需要使用group by 來對zhangwu表中的賬務(wù)信息根據(jù)parent進行分組操作。
* SELECT 字段1,字段2… FROM 表名 GROUP BY 字段 HAVING 條件;
* 分組操作中的having子語句,是用于在分組后對數(shù)據(jù)進行過濾的,作用類似于where條件。
* b: having與where的區(qū)別
* having是在分組后對數(shù)據(jù)進行過濾.
* where是在分組前對數(shù)據(jù)進行過濾
* having后面可以使用分組函數(shù)(統(tǒng)計函數(shù))
* where后面不可以使用分組函數(shù)。
* B: 案例代碼
/*
查詢所有的數(shù)據(jù)
吃飯支出 共計多少
工資收入 共計多少
服裝支出 共計多少
股票收入 共計多少
打麻將支出 共計多少錢
分組查詢: group by 被分組的列名
必須跟隨聚合函數(shù)
select 查詢的時候,被分組的列,要出現(xiàn)在select 選擇列的后面
*/
SELECT SUM(zmoney),zname FROM zhangwu GROUP BY zname
-- 對zname內(nèi)容進行分組查詢求和,但是只要支出
SELECT SUM(zmoney)AS "getsum",zname FROM zhangwu WHERE zname LIKE"%支出%"
GROUP BY zname
ORDER BY getsum DESC
-- 對zname內(nèi)容進行分組查詢求和,但是只要支出, 顯示金額大于5000
-- 結(jié)果集是分組查詢后,再次進行篩選,不能使用where, 分組后再次過濾,關(guān)鍵字 having
SELECT SUM(zmoney)AS "getsum",zname FROM zhangwu WHERE zname LIKE"%支出%"
GROUP BY zname HAVING getsum>5000
31總結(jié)
</>復(fù)制代碼
* 把今天的知識點總結(jié)一遍。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67183.html
摘要:讀寫分離中間件具有獨立的。變量語句將被廣播考慮到節(jié)點間數(shù)據(jù)一致性問題,只會分發(fā)到主節(jié)點。節(jié)點健康檢查,提升數(shù)據(jù)庫系統(tǒng)可用性。UCloud MySQL云數(shù)據(jù)庫讀寫分離 背景 數(shù)據(jù)顯示,關(guān)系型數(shù)據(jù)庫在OLTP業(yè)務(wù)下96.87%都在等待讀I/O,而處理器計算僅僅占了5.3%,這說明要提高數(shù)據(jù)庫的QPS性能,關(guān)鍵的一點是提高系統(tǒng)的IO能力。 另一個數(shù)據(jù)表明, 大多數(shù)業(yè)務(wù)對數(shù)據(jù)庫的訪...
摘要:處在局域網(wǎng)之內(nèi)的,由于有局域網(wǎng)出入口的網(wǎng)絡(luò)設(shè)備的基本保護,相對于暴露在廣域網(wǎng)中要安全不少,主要威脅對象基本控制在了可以接入局域網(wǎng)的內(nèi)部潛在威脅者,和極少數(shù)能夠突破最外圍防線局域網(wǎng)出入口的安全設(shè)備的入侵者。 前言 對于任何一個企業(yè)來說,其數(shù)據(jù)庫系統(tǒng)中所保存數(shù)據(jù)的安全性無疑是非常重要的,尤其是公司的有些商業(yè)數(shù)據(jù),可能數(shù)據(jù)就是公司的根本。 失去了數(shù)據(jù),可能就失去了一切 本章將針對mysql...
閱讀 2133·2021-09-06 15:02
閱讀 1751·2021-08-13 15:02
閱讀 2314·2019-08-29 14:14
閱讀 1475·2019-08-26 13:55
閱讀 558·2019-08-26 13:46
閱讀 3411·2019-08-26 11:41
閱讀 529·2019-08-26 10:27
閱讀 3275·2019-08-23 15:28
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要