MySQL数据库 | 数据表-查询命令详细记录
生活随笔
收集整理的這篇文章主要介紹了
MySQL数据库 | 数据表-查询命令详细记录
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本篇專門記錄數(shù)據(jù)庫增刪改查中最常用、花招最多的 查。
【文章結(jié)構(gòu)】
一、數(shù)據(jù)的準(zhǔn)備
二、基本的查詢功能
三、條件查詢
四、查詢排序
五、聚合函數(shù)
六、分組查詢
七、分頁查詢
八、連接查詢
九、子查詢
十、自關(guān)聯(lián)
?
【正文】
一、數(shù)據(jù)的準(zhǔn)備
首先創(chuàng)建一個(gè)數(shù)據(jù)庫,以便后文命令的使用。
-- 創(chuàng)建一個(gè)數(shù)據(jù)庫 create database pysql charset=utf8;-- 使用數(shù)據(jù)庫 use pysql;-- 查看當(dāng)前使用的是哪個(gè)數(shù)據(jù)庫 select database();-- 創(chuàng)建數(shù)據(jù)表groups, heroes create table groups (id int unsigned auto_increment primary key,name varchar(20) not null );create table heroes (id int unsigned auto_increment primary key not null,name varchar(20) default "",age tinyint unsigned default 0,height decimal(5,2),gender enum("男", "女", "保密") default "保密",grp_id int unsigned default 0,is_delete bit default 0 );-- 查看數(shù)據(jù)庫中已有的數(shù)據(jù)表 show tables;-- 了解數(shù)據(jù)表的創(chuàng)建方式 show create table heroes;-- 插入數(shù)據(jù) insert into heroes values (0,"妮蔻",18,150.00,2,1,0), (0,"泰隆",50,188.00,1,1,0), (0,"阿貍",16,179.00,1,1,0), (0,"賞金",17,175.68,2,3,1), (0,"盲僧",90,190.00,1,1,0), (0,"蓋倫",30,197.89,1,1,0), (0,"光輝",18,160.00,2,1,1), (0,"希維爾",21,167.90,3,2,0), (0,"劫",70,null,2,1,1), (0,"派克",34,170.00,1,6,0), (0,"卡莎",18,180.90,2,1,0), (0,"塔姆",56,150.00,1,2,0), (0,"阿木木",90,130.01,1,1,0), (0,"娜美",18,173.00,2,4,0);insert into groups values (0, "超凡"), (0, "黑鐵"), (0, "黃金");?
二、基本的查詢功能
-- 查詢所有字段(大數(shù)據(jù)庫中慎用) -- select * from 表名; select * from heroes; select * from groups;-- 查詢指定字段 -- select 列1, 列2,...from 表名; select name, age from heroes;-- 使用as給字段起別名 -- select 字段 as 別名 from 表名; select name as "姓名", age as "年齡" from heroes;-- select 表名.字段... from 表名 select heroes.name, heroes.gender from heroes;-- 通過as給表起別名 select h.name, h.gender from heroes as h; -- select heroes.name, heroes.gender from heroes as h; 報(bào)錯(cuò),改了名就要用...-- 消除重復(fù)行(要是京東查手機(jī)的時(shí)候能有這么個(gè)命令,出現(xiàn)過的型號(hào)不要再出現(xiàn)就好了) -- distinct 字段 select distinct gender from heroes;?
三、條件查詢
-- 比較運(yùn)算符-- select ... from 表名 where 條件-- >-- 查詢大于18歲的信息select * from heroes where age>18;-- <-- 查詢id小于5的信息select * from heroes where id<5;-- >=-- <=-- 略-- =--查詢性別為男的英雄的id和名字select id,name from heroes where gender=1;-- != 或者 <> (<>在很多語言中都不用,所以首選 !=)select id,name from heroes where gender!=1;-- 邏輯運(yùn)算符(與 或 非)-- and-- 18到50歲之間英雄的信息-- 報(bào)錯(cuò) select * from heroes where age>18 and <50; 判斷語句 左右兩邊都要寫全select * from heroes where age>18 and age<50;-- 18歲以上的女性select * from heroes where age>18 and gender=2;select * from heroes where age>18 and gender="女";-- or-- 50歲以上或身高180(包含)以上select * from heroes where age>50 or height>=180;-- not-- not 加在誰前面就僅僅否定這一個(gè)條件,用()解決優(yōu)先級(jí)的問題,不要死記硬背-- 不屬于 70歲以上男英雄 的select * from heroes where not (age>70 and gender=1);-- 年齡不小于或等于18 的女性英雄.用()解決優(yōu)先級(jí)的問題select * from heroes where (not age<=18) and gender=2;-- 模糊查詢-- like (效率低)-- % 替換1個(gè),0個(gè)或多個(gè)-- _替換一個(gè)--查詢姓名中以“賞”開頭的名字select name from heroes where name like "賞%";--查詢姓名中有“賞”的名字select name from heroes where name like "%賞%";--查詢兩個(gè)字的名字select name from heroes where name like "__";--查詢至少兩個(gè)字的名字select name from heroes where name like "__%";-- rlike 正則-- 查詢以“泰”開始的名字select name from heroes where name rlike "^泰.*";-- 查詢以“希”開頭,“爾”結(jié)尾的名字select name from heroes where name rlike "^希.*爾$";-- 范圍查詢-- in (18, 70, 50) 表示在一個(gè)非連續(xù)的范圍內(nèi)-- 查詢年齡為18,70的英雄select name, age from heroes where age in (18, 70, 50);-- not in (18, 70, 50) 不在某個(gè)非連續(xù)的范圍內(nèi)select name, age from heroes where age not in (18, 70, 50);-- between .. and .. 在某個(gè)連續(xù)的范圍內(nèi)select name, age from heroes where age between 18 and 50;-- not between .. and .. 不在某個(gè)范圍中,這是一個(gè)整體的語句,同時(shí)否定between和and的內(nèi)容-- 報(bào)錯(cuò) select name, age from heroes where age not (between 18 and 50);select name, age from heroes where age not between 18 and 50;select name, age from heroes where not age between 18 and 50;-- 判斷為空-- is null-- a = None 表示 a沒有指向任何東西,a = "" 表示a指向一個(gè)為空的對(duì)象-- 查詢身高為空的信息select * from heroes where height is null;-- 不為空的select * from heroes where height is not null;?
四、查詢排序
-- order by 字段 -- asc 升序(默認(rèn)值) -- desc 降序 -- 先寫那個(gè)條件,先按照這個(gè)條件排序,相同情況下,按第二個(gè)排,否則不生效--查詢年齡在20-70的男英雄,按照年齡升序排列 select * from heroes where (age between 20 and 70) and gender=1 order by age; select * from heroes where (age between 20 and 70) and gender=1 order by age asc;-- order by 多個(gè)字段 -- 查詢年齡在16-24之間的女性,按身高降序排列,如相同,按年齡升序排列 select * from heroes where (age between 16 and 20) and gender=2 order by height desc,age asc;-- 全部人員,按照年齡從小到大排列,身高從高到低 select * from heroes order by age, height desc;?
五、聚合函數(shù)
-- 函數(shù),帶括號(hào)那種。-- 總數(shù) -- count -- 查詢男英雄有多少人 select count(*) as "男英雄個(gè)數(shù)" from heroes where gender=1;-- 最大值 -- max -- 查詢最大的年齡 select age from heroes; select max(age) from heroes;-- 查詢女性最高身高 select max(height) as "最高身高" from heroes where gender=2;-- 求和 -- sum -- 所有人身高總和 select sum(height) from heroes;-- 平均值 -- avg -- 女性平均年齡,以下兩種方式均可,此處目的在于說明select后面可以加運(yùn)算式, -- 但此類統(tǒng)計(jì)中盡量避免第二種方式,例如在此數(shù)據(jù)表中,如果是平均身高的話,因?yàn)橛幸粋€(gè)null的存在... select avg(age) from heroes where gender=2; select sum(age)/count(*) from heroes where gender=2;--=====================================-- 通過下面的命令得到的是女性的個(gè)數(shù) select count(*) from heroes where gender=2; -- 通過下面的命令得到的是女性的總身高 select sum(height) from heroes where gender=2;-- 以下兩種方式得到的女性平均身高不相等 select avg(height) from heroes where gender=2; select sum(height)/count(*) from heroes where gender=2;--自然也是不相等的... select avg(height) from heroes; select sum(height)/count(*) from heroes;--=====================================-- 四舍五入 round(123.23 , 1) => 保留1位小數(shù) --計(jì)算所有人的平均年齡,保留2位小數(shù) select round(sum(age)/count(*), 2) from heroes; select round(avg(age), 2) from heroes;-- 男性的平均身高,保留2位小數(shù) select round(avg(height), 2) from heroes where gender=1;?
六、分組查詢
-- 要和聚合搭配使用,才比較有意義-- group by -- 按照性別分組,查詢所有的性別 -- select 可以唯一標(biāo)記每個(gè)分組的...東西 from heroes group by gender; select gender from heroes group by gender;-- 計(jì)算每種性別有多少人 select gender, count(*) from heroes group by gender; -- 此處的count(*) 是對(duì)每組的計(jì)算結(jié)果-- 計(jì)算每組中的最大年齡、平均年齡 select gender, max(age) from heroes group by gender; select gender, avg(age) from heroes group by gender;-- group_concat(...) -- 查詢同種性別中的姓名等信息 -- 統(tǒng)計(jì)每種性別都包括哪個(gè)英雄(數(shù)據(jù)多了,就可以統(tǒng)計(jì),地區(qū),部門等等) select gender, group_concat(name) from heroes group by gender;-- 計(jì)算男性的人數(shù)(先寫where,再寫group by) select gender,count(*) from heroes where gender=1 group by gender; -- 計(jì)算男性人數(shù),并查看男性都包括誰 select gender,count(*), group_concat(name) from heroes where gender=1 group by gender; -- 計(jì)算男性人數(shù),并查看男性都包括誰,以及每個(gè)人的id select gender,count(*), group_concat(name,id) from heroes where gender=1 group by gender; select gender,count(*), group_concat(name,"_",id," ",age) from heroes where gender=1 group by gender;-- having -- where 是從數(shù)據(jù)表中過濾數(shù)據(jù),而having是從分組結(jié)果中過濾數(shù)據(jù) -- 查詢平均年齡超過40的性別,以及其中包含的人名 having avg(age) > 30 select gender, group_concat(name), avg(age) from heroes group by gender having avg(age) > 30;-- 查詢?nèi)藬?shù)多于2的性別 select gender, group_concat(name), count(*) from heroes group by gender having count(*) > 2;?
七、分頁查詢
-- 例如 網(wǎng)頁中選擇頁數(shù) -- limit start(起始), count(個(gè)數(shù))-- 限制查詢出來的數(shù)據(jù)個(gè)數(shù) select * from heroes where gender=1 limit 2;-- 查詢前5個(gè)數(shù)據(jù) select * from heroes limit 0, 5;-- 查詢id 6-10(包含)的數(shù)據(jù)(id=1是第0個(gè),id=6是第5個(gè)) select * from heroes limit 5, 5;-- 每頁顯示2個(gè),顯示第6頁的信息,按照年齡升序排序(limit 放在命令末尾) select * from heroes order by age asc limit 10, 2;-- 查詢所有女性信息,按升高降序,只顯示前兩個(gè) -- 報(bào)錯(cuò),剛開始想的..select gender, group_concat(name), age from heroes having gender=2 limit 2; select * from heroes where gender=2 order by height desc limit 2;?
八、連接查詢
-- 內(nèi)連接 取多個(gè)表的交集,否則不顯示-- inner join ... on-- select * from 表1 inner join 表2; 將兩張表對(duì)應(yīng)起來-- 表1 一行一行的來對(duì)應(yīng)表2 所有行select * from heroes inner join groups;-- 查詢有能夠?qū)?yīng)小隊(duì)的的英雄以及小隊(duì)信息-- select * from 表1 inner join 表2 on 條件;select * from heroes inner join groups on heroes.grp_id=groups.id;-- 按照要求顯示姓名 小隊(duì)select heroes.*, groups.name from heroes inner join groups on heroes.grp_id=groups.id;select heroes.name, groups.name from heroes inner join groups on heroes.grp_id=groups.id;-- 給數(shù)據(jù)表起別名select h.name, g.name from heroes as h inner join groups as g on h.grp_id=g.id;select h.name as "英雄", g.name as "小隊(duì)" from heroes as h inner join groups as g on h.grp_id=g.id;-- 查詢 有能夠?qū)?yīng)小隊(duì)的英雄以及小隊(duì)的信息,顯示英雄的所有信息,只顯示小隊(duì)名稱select h.*, g.name from heroes as h inner join groups as g on h.grp_id=g.id;-- 在以上的查詢中,將小隊(duì)名字顯示在第一列select g.name, h.* from heroes as h inner join groups as g on h.grp_id=g.id;-- 查詢有能夠?qū)?yīng)小隊(duì)的的英雄以及小隊(duì)信息,按照小隊(duì)進(jìn)行排序,當(dāng)小隊(duì)相同時(shí),按英雄的id 升序排序select g.name, h.* from heroes as h inner join groups as g on h.grp_id=g.id order by g.name,h.id;-- 左連接:以左邊的表為基準(zhǔn)去從右面的表取東西-- left join-- 查詢每位英雄對(duì)應(yīng)的小組信息select h.*, g.name from heroes as h left join groups as g on h.grp_id=g.id order by g.name,h.id;select h.*, g.name from heroes as h left join groups as g on h.grp_id=g.id;select * from heroes as h left join groups as g on h.grp_id=g.id;-- 查詢沒有對(duì)應(yīng)班級(jí)信息的學(xué)生select * from heroes as h left join groups as g on h.grp_id=g.id having g.id is null;select * from heroes as h left join groups as g on h.grp_id=g.id where g.id is null;-- 右連接-- right join...on 用的很少-- 將數(shù)據(jù)表名字互換位置,用left join即可完成?
九、子查詢
-- select 中套著一個(gè)select -- 查詢最高的男英雄的信息 select * from heroes where height = (select max(height) from heroes where gender=1);?
十、自關(guān)聯(lián)
-- 一個(gè)表通過更改別名,當(dāng)做兩個(gè)表使用 -- select * from 表1 as 表A inner join 表1 as 表B on 表A.xxx=表B.yyy having 條件;?
?
# 和時(shí)間賽跑
?
轉(zhuǎn)載于:https://www.cnblogs.com/ykit/p/10252339.html
總結(jié)
以上是生活随笔為你收集整理的MySQL数据库 | 数据表-查询命令详细记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉(CV)-生成模型:WGAN【
- 下一篇: 测一测自己的Sql能力之MYSQL的GR