1. 程式人生 > 其它 >一份超長的MySQL學習筆記(正在更新)

一份超長的MySQL學習筆記(正在更新)

學習資源

視訊資料:韓順平講MySQL

MySQL安裝(Windows):MySQL安裝+初始化操作

MySQL本地服務配置(Windows):製作MySQL的Windows服務+建立使用者及授權

資料庫

備份資料庫

mysqldump -u root -p -B 資料庫名 > d:\\檔名.sql

恢復資料庫

SOURCE d:\\bak.sql

備份資料庫表

mysqldump -u root -p  資料庫名 表1 表2 > d:\\檔名.sql

建立

#建立
CREATE TABLE `user`(
	id INT,
	`name` VARCHAR(255),
	`password` VARCHAR(255),
	`birthday` DATE)
	CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

刪除

drop table `actor`;

修改

--在password後面新增salary列
ALTER TABLE `user`
	ADD salary VARCHAR(32) NOT NULL DEFAULT '' 
	AFTER PASSWORD;
	
--修改列birthday欄位的結構
ALTER TABLE `user`
	MODIFY birthday VARCHAR(60) NOT NULL DEFAULT '';

--刪除name欄位
ALTER TABLE `user`
	DROP NAME;

--重命名錶
RENAME TABLE `user` TO `student`;

--修改表的字符集為utf8
ALTER TABLE student CHARACTER SET utf8;

--修改列名salary為user_name
ALTER TABLE student 
	CHANGE salary user_name VARCHAR(32) NOT NULL DEFAULT '';

DESC `user`;--顯示錶結構,檢視所有的列

CRUD

insert

INSERT INTO `goods`(id,good_name,price)
	VALUES (1,'華為手機',2000);
INSERT INTO `goods`(id,good_name,price)
	VALUES (2,'蘋果手機',3000);

update

UPDATE `goods`SET price = 1000;
UPDATE `goods`SET price = 2000 WHERE good_name='華為手機';
UPDATE `goods`SET price=price+5000 WHERE good_name='蘋果手機';
#如果需要修改多個欄位,可以通過 set 欄位1=值1,欄位2=值2...

delete

DELETE FROM `goods` WHERE price=2000;

select

#查詢表內所有內容
SELECT * FROM student;
#按列查詢表內容
SELECT id FROM student;
SELECT `id`,english FROM student;
#去除重複資料(只有這一行每一列的資料相同的時候才會去重)
SELECT DISTINCT english FROM student;
#使用表示式對查詢的列進行運算
#在select語句中可使用as語句
SELECT `name`AS`名字`,(chinese+english+math) AS `COUNT` FROM student;
#條件查詢
SELECT * FROM student 
	WHERE `name` = '趙雲';
SELECT * FROM student 
	WHERE `english` > 90;
SELECT * FROM student 
	WHERE (chinese + english + math) > 200;
#order by
	#升序
SELECT `name`,(chinese + english + math)AS`count` FROM student 
	WHERE (chinese+english+math)>200 
	ORDER BY math ASC;
	#降序
SELECT `name`,(chinese + english + math)AS`count` FROM student 
	WHERE (chinese+english+math)>200 
	ORDER BY math DESC;
#多條件升降序查詢
SELECT `name`,(chinese+english+math)AS`count` FROM student 
	WHERE `name` LIKE '張%'
	ORDER BY `count` DESC;

where語句中常用到的運算子

MySQL函式

合計/統計函式

#count(返回查詢結果的行數)
#統計滿足條件的某列有多少個,但是會排除為null的情況
SELECT COUNT(*) FROM student;

SELECT COUNT(*) FROM student
	WHERE (math+chinese+english)>200;
	
SELECT COUNT(chinese) FROM student
	WHERE chinese>90;
	

#SUM函式
#僅對數值起作用,否則會報錯
SELECT SUM(math) FROM student;
SELECT SUM(math),SUM(chinese),SUM(english) FROM student;
SELECT SUM(chinese+english+math) FROM student;
SELECT SUM(chinese)/COUNT(*) FROM student;

#AVG函式
SELECT AVG(math) FROM student;
SELECT AVG(math+english+chinese) FROM student;

#MAX函式
SELECT MAX(math) FROM student;
#MIN函式
SELECT MIN(math) FROM student;

分組統計

--按照部門查詢工資平均值和最大值
SELECT AVG(sal),MAX(sal),deptno FROM emp GROUP BY deptno; 

--多條件分組
SELECT AVG(sal),MAX(sal),deptno , job FROM emp GROUP BY deptno , job;

--查詢平均工資低於2000的部門
SELECT  AVG(sal) , deptno FROM emp GROUP BY deptno HAVING AVG(sal) < 2000;

字串函式


加密和系統函式

--演示加密函式和系統函式

查詢增強

WHERE

-- 查詢增強
-- 	使用where子句
-- 	在MySQL中,日期型別可以直接比較
SELECT * FROM emp WHERE hiredate <= '1991-12-11'; -- 需要注意格式

-- 模糊查詢like
--	%表示0~多個任意字元
--	_表示單個任意字元
SELECT ename,sal FROM emp WHERE ename LIKE 'S%' ;
SELECT ename,sal FROM emp WHERE ename LIKE '__o%';

-- 顯示沒有上級的員工資訊
SELECT * FROM emp WHERE mgr IS NULL;

-- 查詢表結構
DESC emp;

ORDER BY

-- 使用ORDER BY
--	按照工資從低到高顯示資訊
SELECT * FROM emp ORDER BY sal; -- 預設降序
SELECT * FROM emp ORDER BY deptno ASC; -- 升序
SELECT * FROM emp ORDER BY deptno ASC , sal DESC;

分頁查詢

-- 分頁查詢
SELECT * FROM emp ORDER BY empno LIMIT 0,3;-- 第一頁
SELECT * FROM emp ORDER BY empno LIMIT 3,3;-- 第二頁

分組增強

-- 增強 GROUP BY 的使用
SELECT COUNT(*) FROM emp GROUP BY job;-- 各個崗位的人數
SELECT COUNT(*),COUNT(comm) FROM emp;-- 僱員總數、獲得補助的僱員數

多子句查詢

--統計各部門平均工資,並且大於1000的按照平均工資降序排序,取出前兩行資料
SELECT deptno,AVG(sal) AS avg_sal
	FROM emp
	GROUP BY deptno
	HAVING avg_sal > 1000
	ORDER BY avg_sal DESC
	LIMIT 0,2;

多表查詢

多表笛卡爾集

-- 多表查詢
SELECT * FROM emp,dept; 
SELECT * FROM emp;
SELECT * FROM dept;

-- 顯示僱員名稱和僱員所在部門的名稱
-- 從第一張表取出一行,與第二張表中的每一行進行組合,返回結果包含兩張表的所有列
SELECT ename,sal,dname,emp.deptno FROM emp,dept WHERE emp.deptno = dept.deptno;

-- 顯示部門10的部門名、員工名、工資
SELECT ename,sal,dname,emp.deptno FROM emp,dept WHERE emp.deptno = dept.deptno AND emp.deptno = 10;

-- 顯示各個員工的姓名、工資和工資級別
SELECT ename,sal,grade FROM emp,salgrade WHERE sal BETWEEN losal AND hisal;

自連線

自連線是指在同一張表的連線查詢,即將同一張表看成兩張表

-- 自連線
SELECT worker.ename AS '職員名',boss.ename AS '上級名' 
	FROM emp worker,emp boss
	WHERE worker.mgr = boss.empno;