前言:今天給你們講的是:MySQL數據庫表的模糊/多行/分組/排序/分頁查詢以及mysql數據類型的講解,固然若是你對數據庫的基礎操做--對庫的建立/對錶的增刪改查有興趣,能夠去看看個人這篇文章---MySQL數據庫表的基礎操做(增刪改查)---講解一。java
將該數據庫導入mysql中
先將其存入.sql
的文檔,肯定路徑中無中文,而後打開數據庫,用source xxx/db10.sql
或者粗暴點,直接複製粘貼在數據庫中(不過很low通常不採用)mysql
-- 建立db10庫、emp表並插入記錄 -- ----------------------------------- -- 刪除db10庫(若是存在) drop database if exists db10; -- 從新建立db10庫 create database db10 charset utf8; -- 選擇db10庫 use db10; -- 刪除員工表(若是存在) drop table if exists emp; -- 建立員工表 create table emp( id int primary key auto_increment, -- 員工編號 name varchar(50), -- 員工姓名 gender char(1), -- 員工性別 birthday date, -- 員工生日 dept varchar(50), -- 所屬部門 job varchar(50), -- 所任職位 sal double, -- 薪資 bonus double -- 獎金 ); -- 往員工表中插入記錄 insert into emp values(null,'王富國','男','1995-10-25','市場部','部門總監','8400','1200'); insert into emp values(null,'齊雷鋒','男','1994-11-6','市場部','市場調查員','5600','800'); insert into emp values(null,'劉治雪','女','1996-09-14','市場部','營銷講師','3000','1300'); insert into emp values(null,'陳子封','男','1991-05-18','技術部','部門總監','4200','500'); insert into emp values(null,'劉海濤','男','1993-11-18','技術部','研發員','6600','500'); insert into emp values(null,'王明悅','女','1998-07-18','技術部','測試師','5400','600'); insert into emp values(null,'蒼若智','男','1995-08-18','人事部','部門總監','4850','800'); insert into emp values(null,'範中閒','男','1999-09-18','人事部','人力資源師','3600','600'); insert into emp values(null,'劉克','男','1990-10-18','人事部','助理','3200','400'); insert into emp values(null,'韓約','男','1980-12-18',null,'CEO','11000',null);
Like操做符用於在WHERE子句中搜索列中的指定模式
能夠和通配符(%)配合使用,其中(%)表示0或多個任意的字符。「_」表示一個任意的字符。
語法:SELECT 列 | * FROM 表名 WHERE 列名 LIKE 值
例如:sql
-- 25.查詢emp表中姓名中包含"雷"字的員工,顯示員工姓名。 select * from emp where name like '%雷%'; -- 26.查詢emp表中姓名中以"王"字開頭的員工,顯示員工姓名。 select * from emp where name like '王%'; -- 27.查詢emp表中姓名以"劉"開頭,而且姓名爲兩個字的員工,顯示員工姓名。 select * from emp where name like '劉_'; select * from emp where name like '劉__';
多行函數也叫作聚合函數,根據某一列或全部列進行統計。
常見的多行函數有:數據庫
提示:多行函數不能在where子句中使用函數
-- 28.統計emp表中薪資大於3000的員工個數 select count(bonus) from emp where sal>3000; -- 29.求emp表中的最高薪資 select max(sal) from emp; -- 求最低薪資 select min(sal) from emp; -- 30.統計emp表中全部員工的薪資總和(不包含獎金) select sum(sal) from emp; -- 31.統計emp表員工的平均薪資(不包含獎金) select avg(sal) from emp; select sum(sal) / count( * ) from emp;
GRUOP BY語句根據一個或多個列對結果集進行分組。
在分組的列上咱們可使用COUNT, SUM, AVG, MAX, MIN等函數。
語法:SELECT 列 | * FROM 表名 [WHERE子句] GROUP BY 列;測試
對emp表按照部門對員工進行分組,查看分組後效果。.net
-- 32.對emp表按照部門對員工進行分組,查看分組後效果。 select count(*) from emp; -- 默認整個查詢結果也是一組 -- 按照部門分組 select * from emp group by dept; -- 按照部門分組,統計每一個組的人數 select count(*) from emp group by dept; -- 按照獎金分組,統計每一個組的人數 select count(*) from emp group by bonus;
對emp表按照職位進行分組,並統計每一個職位的人數,顯示職位和對應人數code
-- 33.對emp表按照職位進行分組,並統計每一個職位的人數,顯示職位和對應人數 select * from emp group by job; select job, count(*) from emp group by job;
對emp表按照部門進行分組,求每一個部門的最高薪資(不包含獎金),顯示部門名稱和最高薪資blog
-- 34.對emp表按照部門進行分組,求每一個部門的最高薪資(不包含獎金),顯示部門名稱和最高薪資 -- 按照部門分組 select * from emp group by dept; -- 按照部門分組,統計每一個部門的最高薪資 select dept, max(sal) from emp group by dept; -- 按照部門分組,統計每一個部門的最高薪資,並顯示對應的員工姓名( select dept, max(sal), name from emp group by dept;
若是不分組,默認整個查詢結果也是一個組,此時用聚合函數(count、sum、avg、max、min) 是統計這一個組的人數、和、平均值、最大值、最小值。排序
使用 ORDER BY 子句將結果集根據指定的列排序後再返回
語法:SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC]
ASC(默認)升序,即從低到高;
DESC(須要本身聲明) 降序,即從高到低。
-- 35.對emp表中全部員工的薪資進行升序(從低到高)排序,顯示員工姓名、薪資。 SELECT name,sal FROM emp ORDER BY sal; -- 默認也是升序 -- 36.對emp表中全部員工獎金進行降序(從高到低)排序,顯示員工姓名、獎金。 select name,bonus from emp order by bonus desc; -- 根據獎金和薪資進行排序(獎金是降序排序,薪資是升序排序,先根據獎金排序,若是獎金相同再根據薪資進行排序) select name,bonus,sal from emp order by bonus desc,sal asc;
在mysql中,經過limit進行分頁查詢:
*select * from emp limit (頁碼-1)每頁顯示記錄數,每頁顯示記錄數
-- 37.查詢emp表中的全部記錄,分頁顯示:每頁顯示3條記錄,返回第 1 頁。 select * from emp limit 0, 3; -- 38.查詢emp表中的全部記錄,分頁顯示:每頁顯示3條記錄,返回第 2 頁。 select * from emp limit 3, 3; -- 查詢emp表中薪資最高的前三個員工的信息 select * from emp order by sal desc limit 0,3;
查詢emp表中全部在1993和1995年之間出生的員工,顯示姓名、出生日期。
-- 39.查詢emp表中全部在1993和1995年之間出生的員工,顯示姓名、出生日期 select name, birthday from emp where birthday between '1993-1-1' and '1995-12-31'; -- 或 select name, birthday from emp where year(birthday) between 1993 and 1995;
查詢emp表中本月過生日的全部員工
-- 40.查詢emp表中本月過生日的全部員工 select * from emp where month( now() ) = month( birthday ); -- 查詢下個月過生日的員工 select * from emp where (month( now() )+1) % 12 = month( birthday ) % 12;
查詢emp表中員工的姓名和薪資(薪資格式爲: xxx(元) )
-- 41.查詢emp表中員工的姓名和薪資(薪資格式爲: xxx(元) ) select name, concat(sal, '(元)') from emp;
MySQL中支持多種整型,其實很大程度上是相同,只是存儲值得大小範圍不一樣而已。
還有浮點類型:float和double類型
定長字符串,最長255個字符。n表示字符數,例如:
-- 建立user表,指定用戶名爲char類型,字符長度不超過10個字符 create table user( username char(10), ... --使用代碼時請不要將省略號謄寫上去了,它就是一個簡單的省略君 );
所謂的定長:是當插入的值長度小於指定的長度時,剩餘的空間會用空格填充。(這樣會浪費空間)
所以,char類型適用於長度固定的數據(例如電話號,身份證號之類),這樣既不會有空間的浪費,並且效率還比varchar類型高。
變長字符串,最長不超過 65535個字節,n表示字符數,通常超過255個字符,會使用text類型
例如:
-- 建立user表,指定用戶名爲varchar類型,長度不超過10 create table user( username varchar(10), );
所謂的不定長,是當插入的值長度小於指定的長度時,剩餘的空間能夠留給別的數據使用。(節省空間)
所以,varchar類型適用於長度不固定的數據,這樣雖然效率不如char類型高,可是不會有空間的浪費。
最長65535個字節,通常超過255個字符列的會使用text。例如:
-- 建立user表: create table user( resume text, );
並且,text也分多種,其中bigtext存儲數據的長度約爲4GB。
(1)char(n)在保存數據時, 若是存入的字符串長度小於指定的長度n,後面會用空格補全,所以可能會形成空間浪費,可是char類型的存儲速度較varchar和text快。
所以char類型適合存儲長度固定的數據,這樣就不會有空間浪費,存儲效率比後二者還快!
(2)varchar(n)保存數據時, 按數據的真實長度存儲, 剩餘的空間能夠留給別的數據用,所以varchar不會浪費空間。
所以varchar適合存儲長度不固定的數據,這樣不會有空間的浪費。
(3)text是大文本類型,通常文本長度超過255個字符,就會使用text類型存儲。
date:年月日
time:時分秒
datetime:年月日 時分秒
timestamp:時間戳(實際存儲的是一個時間毫秒值),與datetime存儲日期格式相同。二者的區別是:
(1)timestamp最大表示2038年,而datetime範圍是1000~9999
(2)timestamp在插入數、修改數據時,能夠自動更新成系統當前時間
createtime datetime 2019-12-27 14:27:35
createtime timestamp 2019-12-27 14:27:35
id | username | password | createtime |
---|---|---|---|
1 | xxh | 123456 | 2019-12-27 14:27:35 |
後面還有講解三,將會講到mysql的字段(列)約束等等