日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库 | 数据表-查询命令详细记录

發布時間:2023/12/8 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据库 | 数据表-查询命令详细记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇專門記錄數據庫增刪改查中最常用、花招最多的 查。

【文章結構】

一、數據的準備

二、基本的查詢功能

三、條件查詢

四、查詢排序

五、聚合函數

六、分組查詢

七、分頁查詢

八、連接查詢

九、子查詢

十、自關聯

?

【正文】

一、數據的準備

首先創建一個數據庫,以便后文命令的使用。

-- 創建一個數據庫 create database pysql charset=utf8;-- 使用數據庫 use pysql;-- 查看當前使用的是哪個數據庫 select database();-- 創建數據表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 );-- 查看數據庫中已有的數據表 show tables;-- 了解數據表的創建方式 show create table heroes;-- 插入數據 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, "黃金");

?

二、基本的查詢功能

-- 查詢所有字段(大數據庫中慎用) -- 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; 報錯,改了名就要用...-- 消除重復行(要是京東查手機的時候能有這么個命令,出現過的型號不要再出現就好了) -- distinct 字段 select distinct gender from heroes;

?

三、條件查詢

-- 比較運算符-- 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;-- 邏輯運算符(與 或 非)-- and-- 18到50歲之間英雄的信息-- 報錯 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 加在誰前面就僅僅否定這一個條件,用()解決優先級的問題,不要死記硬背-- 不屬于 70歲以上男英雄 的select * from heroes where not (age>70 and gender=1);-- 年齡不小于或等于18 的女性英雄.用()解決優先級的問題select * from heroes where (not age<=18) and gender=2;-- 模糊查詢-- like (效率低)-- % 替換1個,0個或多個-- _替換一個--查詢姓名中以“賞”開頭的名字select name from heroes where name like "賞%";--查詢姓名中有“賞”的名字select name from heroes where name like "%%";--查詢兩個字的名字select name from heroes where name like "__";--查詢至少兩個字的名字select name from heroes where name like "__%";-- rlike 正則-- 查詢以“泰”開始的名字select name from heroes where name rlike "^泰.*";-- 查詢以“希”開頭,“爾”結尾的名字select name from heroes where name rlike "^希.*爾$";-- 范圍查詢-- in (18, 70, 50) 表示在一個非連續的范圍內-- 查詢年齡為18,70的英雄select name, age from heroes where age in (18, 70, 50);-- not in (18, 70, 50) 不在某個非連續的范圍內select name, age from heroes where age not in (18, 70, 50);-- between .. and .. 在某個連續的范圍內select name, age from heroes where age between 18 and 50;-- not between .. and .. 不在某個范圍中,這是一個整體的語句,同時否定between和and的內容-- 報錯 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指向一個為空的對象-- 查詢身高為空的信息select * from heroes where height is null;-- 不為空的select * from heroes where height is not null;

?

四、查詢排序

-- order by 字段 -- asc 升序(默認值) -- desc 降序 -- 先寫那個條件,先按照這個條件排序,相同情況下,按第二個排,否則不生效--查詢年齡在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 多個字段 -- 查詢年齡在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;

?

五、聚合函數

-- 函數,帶括號那種。-- 總數 -- count -- 查詢男英雄有多少人 select count(*) as "男英雄個數" 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后面可以加運算式, -- 但此類統計中盡量避免第二種方式,例如在此數據表中,如果是平均身高的話,因為有一個null的存在... select avg(age) from heroes where gender=2; select sum(age)/count(*) from heroes where gender=2;--=====================================-- 通過下面的命令得到的是女性的個數 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位小數 --計算所有人的平均年齡,保留2位小數 select round(sum(age)/count(*), 2) from heroes; select round(avg(age), 2) from heroes;-- 男性的平均身高,保留2位小數 select round(avg(height), 2) from heroes where gender=1;

?

六、分組查詢

-- 要和聚合搭配使用,才比較有意義-- group by -- 按照性別分組,查詢所有的性別 -- select 可以唯一標記每個分組的...東西 from heroes group by gender; select gender from heroes group by gender;-- 計算每種性別有多少人 select gender, count(*) from heroes group by gender; -- 此處的count(*) 是對每組的計算結果-- 計算每組中的最大年齡、平均年齡 select gender, max(age) from heroes group by gender; select gender, avg(age) from heroes group by gender;-- group_concat(...) -- 查詢同種性別中的姓名等信息 -- 統計每種性別都包括哪個英雄(數據多了,就可以統計,地區,部門等等) select gender, group_concat(name) from heroes group by gender;-- 計算男性的人數(先寫where,再寫group by) select gender,count(*) from heroes where gender=1 group by gender; -- 計算男性人數,并查看男性都包括誰 select gender,count(*), group_concat(name) from heroes where gender=1 group by gender; -- 計算男性人數,并查看男性都包括誰,以及每個人的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 是從數據表中過濾數據,而having是從分組結果中過濾數據 -- 查詢平均年齡超過40的性別,以及其中包含的人名 having avg(age) > 30 select gender, group_concat(name), avg(age) from heroes group by gender having avg(age) > 30;-- 查詢人數多于2的性別 select gender, group_concat(name), count(*) from heroes group by gender having count(*) > 2;

?

七、分頁查詢

-- 例如 網頁中選擇頁數 -- limit start(起始), count(個數)-- 限制查詢出來的數據個數 select * from heroes where gender=1 limit 2;-- 查詢前5個數據 select * from heroes limit 0, 5;-- 查詢id 6-10(包含)的數據(id=1是第0個,id=6是第5個) select * from heroes limit 5, 5;-- 每頁顯示2個,顯示第6頁的信息,按照年齡升序排序(limit 放在命令末尾) select * from heroes order by age asc limit 10, 2;-- 查詢所有女性信息,按升高降序,只顯示前兩個 -- 報錯,剛開始想的..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;

?

八、連接查詢

-- 內連接 取多個表的交集,否則不顯示-- inner join ... on-- select * from 表1 inner join 表2; 將兩張表對應起來-- 表1 一行一行的來對應表2 所有行select * from heroes inner join groups;-- 查詢有能夠對應小隊的的英雄以及小隊信息-- select * from 表1 inner join 表2 on 條件;select * from heroes inner join groups on heroes.grp_id=groups.id;-- 按照要求顯示姓名 小隊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;-- 給數據表起別名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 "小隊" from heroes as h inner join groups as g on h.grp_id=g.id;-- 查詢 有能夠對應小隊的英雄以及小隊的信息,顯示英雄的所有信息,只顯示小隊名稱select h.*, g.name from heroes as h inner join groups as g on h.grp_id=g.id;-- 在以上的查詢中,將小隊名字顯示在第一列select g.name, h.* from heroes as h inner join groups as g on h.grp_id=g.id;-- 查詢有能夠對應小隊的的英雄以及小隊信息,按照小隊進行排序,當小隊相同時,按英雄的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;-- 左連接:以左邊的表為基準去從右面的表取東西-- left join-- 查詢每位英雄對應的小組信息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;-- 查詢沒有對應班級信息的學生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 用的很少-- 將數據表名字互換位置,用left join即可完成

?

九、子查詢

-- select 中套著一個select -- 查詢最高的男英雄的信息 select * from heroes where height = (select max(height) from heroes where gender=1);

?

十、自關聯

-- 一個表通過更改別名,當做兩個表使用 -- select * from 表1 as 表A inner join 表1 as 表B on 表A.xxx=表B.yyy having 條件;

?

?

# 和時間賽跑

?

轉載于:https://www.cnblogs.com/ykit/p/10252339.html

總結

以上是生活随笔為你收集整理的MySQL数据库 | 数据表-查询命令详细记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。