MySQL中的聚合函式及常用函式
阿新 • • 發佈:2019-01-07
#----------------------聚合函式(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;