MySQL數據庫表的模糊/多行/分組/排序/分頁查詢以及字mysql數據類型的講解---講解二

前言:今天給你們講的是: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);

5.三、模擬查詢

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 '劉__';

5.四、多行函數查詢

多行函數也叫作聚合函數,根據某一列或全部列進行統計。
常見的多行函數有:數據庫

  • COUNT( 列名|* ):統計結果集中某一列或全部列的行數。
  • MAX( 列 ):統計結果集中某一列值中的最大值
  • MIN( 列 ):統計結果集中某一列值中的最小值
  • SUM( 列 ):統計結果集中某一列全部值的和
  • AVG( 列 ):統計結果集中某一列值的平均值

提示:多行函數不能在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;

5.五、分組查詢

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) 是統計這一個組的人數、和、平均值、最大值、最小值。排序

5.六、排序查詢

使用 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;

5.七、分頁查詢

在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;

5.八、其餘函數

查詢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的數據類型

6.一、數值類型

MySQL中支持多種整型,其實很大程度上是相同,只是存儲值得大小範圍不一樣而已。

  • tinyint:佔用1個字節,相對於java中的byte
  • smallint:佔用2個字節,相對於java中的short
  • int:佔用4個字節,相對於java中的int
  • bigint:佔用8個字節,相對於java中的long

還有浮點類型:float和double類型

  • float:4字節單精度浮點類型,相對於java中的float
  • double:8字節雙精度浮點類型,相對於java中的double

6.二、字符串類型

6.2.1 char(n)

定長字符串,最長255個字符。n表示字符數,例如:

-- 建立user表,指定用戶名爲char類型,字符長度不超過10個字符
create table user(
    username char(10),
    ...  --使用代碼時請不要將省略號謄寫上去了,它就是一個簡單的省略君
);

所謂的定長:是當插入的值長度小於指定的長度時,剩餘的空間會用空格填充。(這樣會浪費空間)

所以,char類型適用於長度固定的數據(例如電話號,身份證號之類),這樣既不會有空間的浪費,並且效率還比varchar類型高。

6.2.2 varchar(n)

變長字符串,最長不超過 65535個字節,n表示字符數,通常超過255個字符,會使用text類型

例如:

-- 建立user表,指定用戶名爲varchar類型,長度不超過10
create table user(
    username varchar(10),
);

所謂的不定長,是當插入的值長度小於指定的長度時,剩餘的空間能夠留給別的數據使用。(節省空間)

所以,varchar類型適用於長度不固定的數據,這樣雖然效率不如char類型高,可是不會有空間的浪費。

6.2.3 text(長文本類型)

最長65535個字節,通常超過255個字符列的會使用text。例如:

-- 建立user表:
create table user(
    resume text,
);

並且,text也分多種,其中bigtext存儲數據的長度約爲4GB。

char(n)、varchar(n)、text均可以表示字符串類型,其區別在於:

(1)char(n)在保存數據時, 若是存入的字符串長度小於指定的長度n,後面會用空格補全,所以可能會形成空間浪費,可是char類型的存儲速度較varchar和text快。

所以char類型適合存儲長度固定的數據,這樣就不會有空間浪費,存儲效率比後二者還快!

(2)varchar(n)保存數據時, 按數據的真實長度存儲, 剩餘的空間能夠留給別的數據用,所以varchar不會浪費空間。

所以varchar適合存儲長度不固定的數據,這樣不會有空間的浪費。

(3)text是大文本類型,通常文本長度超過255個字符,就會使用text類型存儲。

6.三、日期類型(瞭解)

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的字段(列)約束等等

相關文章
相關標籤/搜索