1. 程式人生 > >MySQL中的聚合函式及常用函式

MySQL中的聚合函式及常用函式

#----------------------聚合函式(mysql中的內建函式)--------------------
# 在mysql中函式使用select關鍵字呼叫: select 函式名(欄位) 【from 表名】

# 找出最大值:max(欄位名)

# 找出users表中javaScore的最高分
SELECT MAX(javaScore) AS 最高分 FROM users;

# 找出最小值: min(欄位名)
SELECT MIN(javaScore) AS 最低分 FROM users;
SELECT MIN(javaScore) AS 最低分,username FROM users;

SELECT us.`username`,uu.* FROM users us,(SELECT MIN(javaScore) AS js FROM users) uu WHERE us.javaScore=uu.js;
SELECT * FROM users;

# 求平均數:avg(欄位名)
SELECT AVG(javaScore) AS 平均分 FROM users;

# 求和
SELECT SUM(javaScore) AS 總分數 FROM users;

# 統計記錄 count(欄位名) 如果欄位值為null這對應資料條數不在統計之內。使用欄位名做只統計非空的記錄 count(*) 使用*統計時是統計所有記錄數不會少記錄  mysql資料庫欄位與表名不區分大小寫
SELECT * FROM users;

SELECT COUNT(IDCard) AS 總條數 FROM users;

SELECT COUNT(phone) AS 總條數 FROM users;

SELECT COUNT(*) FROM users;

# -----------常用函式--------
# NOW();時間函式 獲取當前系統時間 時間格式包括年月日時分秒
# CURTIME(); 時間函式 獲取當前系統時間 時間格式包括時分秒
# CURDATE(); 年月日
SELECT NOW() AS 當前系統時間;
SELECT CURTIME() AS 當前系統時間;
SELECT CURDATE() AS 當前系統時間;

# -----------數學函式--------
# 向上取捨
SELECT CEIL(2.3);
# 向下取捨
SELECT FLOOR(2.3);
# 隨機數 rand()不用接收引數,返回是0-1之間的小數
SELECT RAND();
# 獲取一個隨機的4位數,沒有小數
SELECT RAND()*10000;
SELECT CEIL(RAND()*10000);

# -----------同時查詢多條記錄-----------
SELECT * FROM users WHERE id=1;

# 獲取id=1或者id=2或者id=4的記錄

SELECT * FROM users WHERE id=1 OR id=2 OR id=4;

# in (資料1,資料2,...); 判斷某一個欄位數值是否在in後面的引數列表之中
SELECT * FROM users WHERE id IN(1,3,4);
# not in (資料1,資料2,...); 判斷某一個欄位是否不在in後面的引數列表之中
SELECT * FROM users WHERE id NOT IN(2,3);

SELECT * FROM users WHERE id NOT IN(2,3) ORDER BY javaScore ASC;

SELECT * FROM users WHERE username='古';

# ----------- 分組查詢(group by) --------
CREATE TABLE goods(
  id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵',
  goodName VARCHAR(40) COMMENT '商品名稱',
  goodCategory VARCHAR(20) COMMENT '商品種類'
);

RENAME TABLE goods TO good;

INSERT INTO goods SET goodName='聯想air7000',goodCategory='數碼';
INSERT INTO goods SET goodName='《Java開發大全》',goodCategory='書籍';
INSERT INTO goods SET goodName='小娃娃',goodCategory='玩具';
INSERT INTO goods SET goodName='《Mysql從刪庫到跑路》',goodCategory='書籍';
INSERT INTO goods SET goodName='《php從入門到放棄》',goodCategory='書籍';
# 查詢goods表中商品種類
SELECT goodcategory FROM goods GROUP BY goodcategory;

# 查詢goods表中是否有衣服種類 having分組的條件關鍵字 與group by 配合使用
SELECT goodcategory FROM goods GROUP BY goodcategory HAVING goodcategory = '數碼';

# ----------分頁(limit 起始下標, 每頁顯示的資料量)-----------
# 傳遞引數 當前頁碼pageNum 每頁顯示條數 pageSize

#  獲取第1頁的資料
SELECT * FROM goods LIMIT 0,3; 
#  獲取第2頁的資料
SELECT * FROM goods LIMIT 3,3;
#  獲取第3頁的資料
SELECT * FROM goods LIMIT 6,3;

# index = (pageNum - 1) * pageSize

SELECT * FROM goods LIMIT (pageNum-1)*pageSize,pageSize;

SELECT * FROM goods ORDER BY id DESC LIMIT (pageNum-1)*pageSize,pageSize;

CREATE TABLE publisher(
	P_ID BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '出版社編號',
	P_NAME VARCHAR(20) NOT NULL UNIQUE COMMENT '出版社名稱',
	p_LINKMAN VARCHAR(20) NOT NULL COMMENT '出版社聯絡人',
	P_TEL VARCHAR(20) COMMENT '電話',
	P_ADDRESS VARCHAR(50)
)
#往指定表中新增一個欄位
ALTER TABLE `publisher` ADD price FLOAT;
#修改欄位名
ALTER TABLE `publisher` CHANGE P_ID id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '出版社編號';
ALTER TABLE `publisher` CHANGE P_NAME `name` VARCHAR(20) COMMENT '出版社名稱';
#同時新增5條資料記錄
INSERT INTO `publisher` SET NAME='北京大學出版社',p_LINKMAN='王二麻子',price=99;
INSERT INTO `publisher` SET NAME='清華大學出版社',p_LINKMAN='李四',price=20;
INSERT INTO `publisher` SET NAME='武漢大學出版社',p_LINKMAN='戰三',price=40;
#找出最高價
SELECT MAX(price) AS 最高價 FROM `publisher`;
SELECT MIN(price) AS 最低價 FROM `publisher`;

SELECT * FROM `publisher` ORDER BY price DESC LIMIT 2,2
  
#------------------------------------------------------------------------------
#複製某一張指定的表以及表資料

SELECT * FROM `publisher`

# 此新表無主鍵
CREATE TABLE publisherBak(
   SELECT * FROM `publisher`
);

#插入資料
INSERT INTO publisherBak 
SELECT * FROM publisherBak WHERE id=3;

#---------------------------------時間格式函式--------------------------------------
# 資料庫日期一般datatime型別
CREATE TABLE persons(
	id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵',
	personName VARCHAR(40) COMMENT '人名',
	birthday DATETIME 
);
SELECT personName,DATE_FORMAT(birthday,'%Y/%m/%d/ %H:%i:%s') AS birthday FROM `persons`;

SELECT personName,DATE_FORMAT(birthday,'%Y年%m月%d日 %H:%i:%s') AS birthday FROM `persons`; # 2018年7月4號

#-----------------------#子查詢(****)-----------------------------
# select 中巢狀 select 
SELECT * FROM users WHERE id IN(1,3,4);
SELECT * FROM users WHERE id = 1 OR id=3 OR id=4 ;

# 聚合函式:max()、min()、avg()、sum()、count()
# 最高分
SELECT * FROM users;
SELECT MAX(javaScore) AS topScore FROM users;
SELECT MIN(javaScore) AS topScore,username FROM users;

# 最低分的那個人名和分數
SELECT MIN(javaScore) AS minScore FROM users;

SELECT username FROM users WHERE javaScore=50;

#同時查詢多張表
SELECT * FROM 表1,表2...表n WHERE 條件

# 多表查詢時給每個表取別名 不用寫as 空格即可

SELECT u.username,temp.minScore 
FROM users u,(SELECT MIN(javaScore) AS minScore FROM users) temp 
WHERE u.javaScore = temp.minScore;

#-----------------------#多表查詢(****)-----------------------------
SELECT * FROM users WHERE id IN(1,3,4);
SELECT * FROM users WHERE id=1 OR id=3 OR id=4
#聚合函式:max()、min()、avg()、sum()、count
#最高分
SELECT MIN(javaScore) AS minScore FROM users;

SELECT username FROM users WHERE javaScore=60;