開啟/退出:
net start mysql;
net stop mysql;
登錄與退出
mysql -uroot -pAa8316057 -hlocalhost exit或quit
常見操作:
DDL 數據庫或表的結構操作(****) DML 對表的記錄更新(增/刪/改)(****) DQL 對表的記錄查詢(****,難點) DCL 用戶創建及授權
類型:
標准:
int整型 double(5,2) decimal精確浮點型 char 固長 字符串255 補 varchar 變長 字符串65535 不補
方言(mySQL獨有)
MySQL獨有: text(clob):字符串類型 blob:字節類型 date:日期 time:時間 timestamp:時間戳
DDL:
數據庫(DATABASE)
(創建CREATE,查看SHOW,進入USE,刪除DROP)
表(TABLE):
查詢表結構: DESC 表名
創建: CREATE TABLE [IF NOT EXISTS] 表名( 列名 列類型 [PRIMARY KEY] [AUTO_INCREMENT]; ... );
修改: ***公共前綴***ALTER TABLE 表名 添加列: ***公共前綴*** ADD(列名 列類型,...); 刪除列: ***公共前綴*** DROP 列名 改列名: ***公共前綴*** CHANGE 原列名 新列名 列類型 改列類型:***公共前綴*** MODIFY 列名 列新類型 改表名: ***公共前綴*** RENAME TO 新表名
DQL(基本查詢):
列控制:
查詢所有列(或指定列 丨 查詢但不顯示完全重復行):
SELECT * FROM 表名 查詢指定列: 把 * 變成 列1,..,列n 查詢但不顯示完全重復行: 在 * 前 加DISTINCT
列運算:(光查,並不改變數據)
SELECT 運算 FROM 表名; 加/減/乘/除: sal+8 sal+name 字符串運算: CONCAT('$',sal) 轉換NULL值(把NULL當0來運算): IFNULL(comm,0)+100 給列取別名: IFNULL(comm,0)+100 AS 獎金 - (其中AS可以省略)
條件控制:
條件查詢:(和UPDATE一樣的操作方式) SELECT * FROM 表名 WHERE 條件; 模糊查詢: SELECT * FROM 表名 WHERE 列名 like '張_'; **** 重點: _ 一個字符 % 0-n個字符; 排序: SELECT * FROM 表名 ORDER BY 列名 ASC; 升序: ASC(ASC可以省略) 降序: DESC(DESC不可以省略) 多列作為排序條件:列名 ASC,列名 DESC
聚合函數:(列縱向運算)
SELECT 聚合函數 FROM 表名; 1:行數 COUNT(*或列名) - 不記NULL 2:大 MAX(列名) 3:小 MIN(列名) 4:和 SUM(列名) 5:平均 AVG(列名) 多項:MAX(列名) AS 大 , MIN(列名) AS 小 ,SUM(列名) AS 和;
分組查詢:
SELECT 分組列,聚合函數(支持多項) FROM 表名 [WHERE 條件] GROUP BY 分組列 [HAVING 條件];
執行順序 SELECT 查詢 FROM 從 WHERE 去分組前條件 GROUP BY 分組 HAVING 去分組后條件 ORDER BY 排序
LIMIT子句(方言)
SELECT * FROM 表名 LIMIT 4,3;(從第5行開始查,一共查3行) -(當前頁-1) * 每頁記錄數 , 每頁記錄數;
DML:
插入數據:
插入列數據: INSERT INTO 表名(列名1,列名2,...) VALUES(列值1,列值2,..); 修改列值: UPDATE 表名 SET 列名=列值,...;(全改) UPDATE 表名 SET 列名=列值 WHERE 條件列名 = 條件列值 or ... ;(指定條件改) = != <> > < >= <= NOT OR AND BETWEEN...AND IN(...) IS NULL 刪除數據: DELETE FROM 表名 [WHERE 條件]; - 一定要加WHERE!!!
DCL:
創建用戶: CREATE USER 用戶名@ip地址 IDENTIFIED BY '密碼'; 任意IP登錄: @'%' 給用戶授權: GRANT 權限1,..權限n NO 數據庫.* TO 用戶名@ip地址 所有權限: ALL 取消權限: REVOKE 權限1,..權限n NO 數據庫.* FROM 用戶名@ip地址 查看權限: SHOW GRANTS FOR 用戶名@ip地址 刪除用戶: DROP USER 用戶名@ip地址
SQL導入(原版和阿里雲版)
/*原版*/ CREATE TABLE emp ( empno NUMERIC(4) NOT NULL, ename VARCHAR(10), job VARCHAR(9), mgr NUMERIC(4), hiredate DATETIME, sal NUMERIC(7, 2), comm NUMERIC(7, 2), deptno NUMERIC(2) ); INSERT INTO emp VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20); INSERT INTO emp VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30); INSERT INTO emp VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30); INSERT INTO emp VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20); INSERT INTO emp VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30); INSERT INTO emp VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30); INSERT INTO emp VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10); INSERT INTO emp VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1982-12-09', 3000, NULL, 20); INSERT INTO emp VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10); INSERT INTO emp VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30); INSERT INTO emp VALUES (7876, 'ADAMS', 'CLERK', 7788, '1983-01-12', 1100, NULL, 20); INSERT INTO emp VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30); INSERT INTO emp VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20); INSERT INTO emp VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10); CREATE TABLE dept ( deptno NUMERIC(2), dname VARCHAR(14), loc VARCHAR(13) ); INSERT INTO dept VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO dept VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO dept VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO dept VALUES (40, 'OPERATIONS', 'BOSTON'); CREATE TABLE bonus ( empno NUMERIC(4), job VARCHAR(9), sal NUMERIC, comm NUMERIC ); CREATE TABLE salgrade ( grade NUMERIC, losal NUMERIC, hisal NUMERIC ); INSERT INTO salgrade VALUES (1, 700, 1200); INSERT INTO salgrade VALUES (2, 1201, 1400); INSERT INTO salgrade VALUES (3, 1401, 2000); INSERT INTO salgrade VALUES (4, 2001, 3000); INSERT INTO salgrade VALUES (5, 3001, 9999); /*阿里雲emp表*/ CREATE TABLE `emp` ( `empno` INT(11) NOT NULL, `ename` VARCHAR(255) DEFAULT NULL, `job` VARCHAR(255) DEFAULT NULL, `mgr` INT(11) DEFAULT NULL, `hiredate` DATE DEFAULT NULL, `sal` DECIMAL(10,2) DEFAULT NULL, `COMM` DECIMAL(10,2) DEFAULT NULL, `deptno` INT(11) DEFAULT NULL, PRIMARY KEY (`empno`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `emp` VALUES ('1001', '甘寧', '文員', '1013', '2000-12-17', '8000.00', NULL, '20'); INSERT INTO `emp` VALUES ('1002', '黛綺絲', '銷售員', '1006', '2001-02-20', '16000.00', '3000.00', '30'); INSERT INTO `emp` VALUES ('1003', '殷天正', '銷售員', '1006', '2001-02-22', '12500.00', '5000.00', '30'); INSERT INTO `emp` VALUES ('1004', '劉備', '經理', '1009', '2001-04-02', '29750.00', NULL, '20'); INSERT INTO `emp` VALUES ('1005', '謝遜', '銷售員', '1006', '2001-09-28', '12500.00', '14000.00', '30'); INSERT INTO `emp` VALUES ('1006', '關羽', '經理', '1009', '2001-05-01', '28500.00', NULL, '30'); INSERT INTO `emp` VALUES ('1007', '張飛', '經理', '1009', '2001-09-01', '24500.00', NULL, '10'); INSERT INTO `emp` VALUES ('1008', '諸葛亮', '分析師', '1004', '2007-09-01', '30000.00', NULL, '20'); INSERT INTO `emp` VALUES ('1009', '曾阿牛', '董事長', NULL, '2001-11-17', '50000.00', NULL, '10'); INSERT INTO `emp` VALUES ('1010', '韋一笑', '銷售員', '1006', '2001-09-08', '15000.00', '0.00', '30'); INSERT INTO `emp` VALUES ('1011', '周泰', '文員', '1008', '2007-05-28', '11000.00', NULL, '20'); INSERT INTO `emp` VALUES ('1012', '程普', '文員', '1006', '2001-12-03', '9500.00', NULL, '30'); INSERT INTO `emp` VALUES ('1013', '龐統', '分析師', '1004', '2001-12-09', '30000.00', NULL, '20'); INSERT INTO `emp` VALUES ('1014', '黃蓋', '文員', '1007', '2002-01-23', '13000.00', NULL, '10'); INSERT INTO `emp` VALUES ('1015', '張三', '保潔員', '1001', '2019-09-02', '80000.00', '50000.00', '50'); SELECT * FROM emp;
CREATE TABLE dept (
deptno NUMERIC(2),
dname VARCHAR(14),
loc VARCHAR(13)
);
INSERT INTO dept VALUES (10, '財務部', '北京');
INSERT INTO dept VALUES (20, '業務部', '上海');
INSERT INTO dept VALUES (30, '銷售部', '廣州');
INSERT INTO dept VALUES (40, '運營部', '昆明');
SELECT * FROM dept;
單表查詢練習
/*單表查詢*/ /*1、查詢出部門編號為30的所有員工*/ SELECT * FROM emp WHERE deptno = 30; /*2、查詢所有銷售員的名字、編號和部門編號*/ SELECT ename AS 姓名, empno AS 編號, deptno AS 部門編號 FROM emp WHERE job = '銷售員'; /*3、找出獎金高於工資的員工*/ SELECT * FROM emp WHERE COMM > sal; /*4、找出獎金高於工資60%的員工*/ SELECT *,(IFNULL(sal,0)*0.6) AS `工資的60%` FROM emp WHERE COMM > sal*0.6; /*注意: 其中IFNULL是聚合函數:表示將null值變為數值0,便於數學計算 別名中要輸出特殊字符 必須使用``反引號(鍵盤左上角第二排第一個)包含輸出內容*/ /*5、找出部門編號為10中所有經理和部門編號為20中所有銷售人員的詳細資料*/ SELECT * FROM emp WHERE (deptno = '10' AND job = '經理') OR (deptno='20' AND job='銷售員'); /*6、找出部門編號為10中所有經理,部門編號為20中所有銷售員,還有既不是經理又不是銷售員但其工資大於或等於20000的所有員工詳細資料*/ SELECT * FROM emp WHERE (deptno = '10' AND job = '經理') OR (deptno='20' AND job='銷售員') OR (job != '經理' AND job != '銷售員' AND sal > 20000); /*或者*/ SELECT * FROM emp WHERE (deptno = '10' AND job = '經理') OR (deptno='20' AND job='銷售員') OR (job NOT IN('經理', '銷售員') AND sal >= 20000); /*7、無獎金或獎金低於1000的員工*/ SELECT * FROM emp WHERE COMM IS NULL OR COMM < 1000; /*8、 查詢名字由三個字組成的員工*/ SELECT * FROM emp WHERE ename LIKE '___'; /*9、查詢2000年入職的員工*/ SELECT * FROM emp WHERE hiredate BETWEEN '2000-01-01' AND '2000-12-31'; /*或者*/ SELECT * FROM emp WHERE hiredate LIKE '2000-%'; /*10、查詢所有員工詳細信息,用編號降序排序*/ SELECT * FROM emp ORDER BY empno DESC; /*11、查詢所有員工詳細信息,用工資降序排序,如果工資相同使用入職日期升序排序*/ SELECT * FROM emp ORDER BY sal DESC, hiredate ASC; /*12、查詢每個部門的平均工資*/ SELECT deptno, AVG(sal) AS 平均工資 FROM emp GROUP BY deptno; /*13、查詢每個部門的雇員數量*/ SELECT deptno, COUNT(*) AS 部門人數 FROM emp GROUP BY deptno; /*14、查詢每種工作的最高工資、最低工資、人數*/ SELECT job, MAX(sal) AS 最高工資, MIN(sal) AS 最低工資, COUNT(*) FROM emp GROUP BY job;
查看數據庫編碼:
SHOW VARIABLES LIKE 'char%'; 改:C:\ProgramData下my.ini文件 : default-character-set=gbk 可以改3個變量client(進).connection.results(出)
備份/恢復 數據庫內容:
備份數據庫內容(退出狀態下輸入): mysqldump -u用戶名 -p密碼 據庫名>f:/a.sql 恢復數據庫內容(退出狀態下輸入): mysql -u用戶名 -p密碼 據庫名<f:/a.sql 第二種方式:進入數據庫后 source f:/a.sql
約束:
1:主鍵約束:
非空,唯一,被引用
創建: 創建時候在 列名 列類型 后加 PRIMARY KEY []; 創建后: ALTER TABLE 表名 ADD PRIMARY KEY(列名); 刪除: ALTER TABLE 表名 DROP PRIMARY KEY;
2:主鍵自增長:
創建:AUTO_INCREMENT(在主鍵后面加 , 詳看創建列) - 只能加在整數
uuid
CREATE TABLE person( uid VARCHAR(50) PRIMARY KEY, ename VARCHAR(10) ); INSERT INTO person VALUES(REPLACE(UUID(),"-",""),'張三');
3:非空約束:
加 NOT NULL;
4:唯一約束:
加 UNIQUE;一般和NOT NULL一起用
5:概念模型:
6:外鍵約束:
語法:CONSTRAINT fk_子表_父表 FOREIGN KEY(外鍵列名) REFERENCES 關系表(關聯表的主鍵) 例:CONSTRAINT fk_student_class FOREIGN KEY(s_cid) REFERENCES class(cid)
1對1(從表的主鍵即是外鍵,鏈接主表主鍵)
/*--------1對1--------*/ /*創建表*/ CREATE TABLE hashand(/*主表*/ hid INT PRIMARY KEY AUTO_INCREMENT, hname VARCHAR(50) ); /*修改表名*/ ALTER TABLE hashand RENAME TO hasband /*插入記錄*/ INSERT INTO hasband VALUES(NULL,'劉備'); INSERT INTO hasband VALUES(NULL,'關羽'); INSERT INTO hasband VALUES(NULL,'張飛'); /*查看*/ SELECT * FROM hasband /*這是1對多,違反了婚姻法 CREATE TABLE wife( wid int primary KEY auto_increment, wname VARCHAR(50), hid int, CONSTRAINT fk_wife_hasband foreign key(hid) references hasband(hid) ); */ /*創建1對1*/ CREATE TABLE wife( wid INT PRIMARY KEY AUTO_INCREMENT, wname VARCHAR(50), CONSTRAINT fk_wife_hasband FOREIGN KEY(wid) REFERENCES hasband(hid)/*把主鍵作為了外鍵*/ ); /* wid 1:非空 2:唯一 3:引用hid */ /*滿足以上3個條件*/ INSERT INTO wife VALUES(1,'楊貴妃'); INSERT INTO wife VALUES(2,'妲己'); INSERT INTO wife VALUES(3,'大喬'); /*查詢*/ SELECT * FROM wife;
1對多(從表新創建列作為外鍵,連接主表主鍵)
/*--------1對多--------*/
CREATE TABLE class(
cid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(15) NOT NULL ); INSERT INTO class VALUES(NULL,'六年級一班'); INSERT INTO class VALUES(NULL,'六年級二班'); SELECT * FROM class; /*在sql語句末端添加*/ CREATE TABLE student( sid INT AUTO_INCREMENT, sname VARCHAR(10), s_cid INT, PRIMARY KEY(sid), FOREIGN KEY (s_cid) REFERENCES class(cid) ); INSERT INTO student VALUES(NULL,'王大錘',2); INSERT INTO student VALUES(NULL,'胡漢三',3);/*約束生效 插入失敗*/ SELECT * FROM student; /*fk的使用*/ CREATE TABLE student( sid INT AUTO_INCREMENT, sname VARCHAR(10) NOT NULL, s_cid INT , PRIMARY KEY(sid), CONSTRAINT fk_student_class FOREIGN KEY(s_cid) REFERENCES class(cid) ); INSERT INTO student VALUES(NULL,'王大錘',2); INSERT INTO student VALUES(NULL,'胡漢三',3);/*約束生效 插入失敗*/ SELECT * FROM student; /*在建表后添加外鍵*/ CREATE TABLE student( sid INT AUTO_INCREMENT, sname VARCHAR(10) NOT NULL, s_cid INT , PRIMARY KEY(sid) ); ALTER TABLE student ADD FOREIGN KEY (s_cid) REFERENCES class(cid); INSERT INTO student VALUES(NULL,'王大錘',2); INSERT INTO student VALUES(NULL,'胡漢三',3); /*約束生效 插入失敗*/ SELECT * FROM student;
多對多(創建中間表,列分別作為外鍵,鏈接對應主表主鍵)
/*--------多對多--------*/ /*創建學生表*/ CREATE TABLE student( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(50)); /*創建教師表*/ CREATE TABLE teacher( tid INT PRIMARY KEY AUTO_INCREMENT, tname VARCHAR(50)); /*創建關聯表*/ CREATE TABLE stu_tea( sid INT, tid INT, CONSTRAINT fk_student FOREIGN KEY(sid) REFERENCES student(sid), CONSTRAINT fk_teacher FOREIGN KEY(tid) REFERENCES teacher(tid) ); /*往2張表插記錄*/ INSERT INTO student VALUES(NULL,'劉德華'); INSERT INTO student VALUES(NULL,'梁朝偉'); INSERT INTO student VALUES(NULL,'謝霆鋒'); INSERT INTO student VALUES(NULL,'張含韻'); INSERT INTO student VALUES(NULL,'小虎樂隊'); INSERT INTO teacher VALUES(NULL,'李代萍'); INSERT INTO teacher VALUES(NULL,'童林'); INSERT INTO teacher VALUES(NULL,'張老師'); /*分別查出來*/ SELECT * FROM student; SELECT * FROM teacher; /*建立關系*/ INSERT INTO stu_tea VALUES(1,1); INSERT INTO stu_tea VALUES(2,1); INSERT INTO stu_tea VALUES(3,1); INSERT INTO stu_tea VALUES(4,1); INSERT INTO stu_tea VALUES(5,1); INSERT INTO stu_tea VALUES(2,2); INSERT INTO stu_tea VALUES(3,2); INSERT INTO stu_tea VALUES(4,2); INSERT INTO stu_tea VALUES(3,3); INSERT INTO stu_tea VALUES(4,3); INSERT INTO stu_tea VALUES(5,3); /*查關系表*/ SELECT * FROM stu_tea;
多表查詢
1:分類:
合並結果集
*要求被合並的表中,列的類型和列數相同 *UNION,去除重復行 *UNION ALL,不去除重復行
SELECT * FROM cd UNION ALL SELECT * FROM ab
/*--------課時11 合並結果集--------*/ /*創建2個表結構一樣的表*/ CREATE TABLE ab (a INT , b VARCHAR(50)); CREATE TABLE cd (c INT , d VARCHAR(50)); /*插入記錄*/ INSERT INTO ab VALUES(1,'1'); INSERT INTO ab VALUES(2,'2'); INSERT INTO ab VALUES(3,'3'); INSERT INTO cd VALUES(3,'3'); INSERT INTO cd VALUES(4,'4'); INSERT INTO cd VALUES(5,'5'); /*鏈接2個表結構一樣的表(合並結果集))*/ SELECT * FROM ab UNION ALL SELECT * FROM cd /*鏈接2個表結構一樣的表(合並結果集))*/ SELECT * FROM ab UNION /*完全相同的行會被去除*/ SELECT * FROM cd
鏈接查詢
內鏈接
*方言: SELECT * FROM 表1 別名1,表2 別名2 WHERE 別名1.xx = 別名2.xx *標准: SELECT * FROM 表1 別名1 INNER JOIN 表2 別名2 ON 別名1.xx = 別名2.xx *自然: SELECT * FROM 表1 別名1 NATURAL JOIN 表2 別名2 *內鏈接查詢出的所有記錄都滿足條件
/*方言內鏈接*/ SELECT * FROM emp,dept WHERE emp.deptno = dept.deptno; /*去除笛卡爾積*/ /*打印所有員工的姓名,工資,以及部門名稱*/ SELECT emp.ename,emp.sal,dept.dname FROM emp,dept WHERE emp.deptno = dept.deptno; /*取別名*/ SELECT e.ename,e.sal,d.dname FROM emp e,dept d WHERE e.deptno = d.deptno; /*標准內連接*/ SELECT e.ename,e.sal,d.dname FROM emp e INNER JOIN dept d /*逗號改為 INNER JOIN */ ON e.deptno = d.deptno; /*WHERE 改為 ON */
/*自然內連接*/ /*這種不用記*/ SELECT e.ename,e.sal,d.dname FROM emp e NATURAL JOIN dept d ;/*INNER JOIN 改為 NATURAL JOIN */
外鏈接 >左外連接 >右外連接 >全外連接(MySQL不支持) *自然鏈接(屬於一種簡化方式)
/*--------課時14 連接查詢之外連接--------*/ /*外連接之左外*/ SELECT e.ename,e.sal,IFNULL(d.dname,'無部門') FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno; /*外連接之右外*/ SELECT e.ename,e.sal,IFNULL(d.dname,'無部門') FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno; /*外連接之全外*/ SELECT e.ename,e.sal,d.dname FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno UNION SELECT e.ename,e.sal,d.dname FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno
子查詢
/*查詢本公司工資最高的員工的詳細信息*/ 第一步:SELECT MAX(SAL) FROM emp;/*查詢最高工資*/ 第二步:SELECT * FROM emp WHERE sal=()/*把最高工資放到括號里*/ 第三步:SELECT * FROM emp WHERE sal=(SELECT MAX(SAL) FROM emp);/*這就是子查詢*/
子查詢可以出現的位置
/*FROM方式查詢*/ SELECT * FROM 表 /*這里可以*/ WHERE 條件 /*這里可以*/
/*單行單列案例:高於平均工資的所有人*/ SELECT * FROM emp WHERE sal > (SELECT AVG(sal) FROM emp) /*多行單列案例1:高於30部門最高工資的所有員工*/ SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno = 30) /*ALL 所有的意思*/ /*案例2:大於任意1個經理工資的所有員工*/ SELECT * FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE job='經理') /*ANY 任意的意思*/ /*單行多列案例(很少使用):查詢工資和部門與張學友完全相同的員工*/ SELECT * FROM emp WHERE (job,deptno,sal) IN (SELECT job,deptno,sal FROM emp WHERE ename='殷天正') /*多行多列案例:30部門所有人*/ SELECT * FROM emp WHERE deptno=30;
作業:
/* 1. 查出至少有一個員工的部門。顯示部門編號、部門名稱、部門位置、部門人數。 列:d.deptno, d.dname, d.loc, 部門人數 表:dept d, emp e 條件:e.deptno=d.deptno */ SELECT d.*, z1.cnt FROM dept d, (SELECT deptno, COUNT(*) cnt FROM emp GROUP BY deptno) z1 WHERE d.deptno = z1.deptno /* 2. 列出所有員工的姓名及其直接上級的姓名。 列:員工姓名、上級姓名 表:emp e, emp m 條件:員工的mgr = 上級的empno */ SELECT * FROM emp e, emp m WHERE e.mgr=m.empno SELECT e.ename, IFNULL(m.ename, 'BOSS') 領導 FROM emp e LEFT OUTER JOIN emp m ON e.mgr=m.empno /* 3. 列出受雇日期早於直接上級的所有員工的編號、姓名、部門名稱。 列:e.empno, e.ename, d.dname 表:emp e, emp m, dept d 條件:e.hiredate<m.hiredate 思路: 1. 先不查部門名稱,只查部門編號! 列:e.empno, e.ename, e.deptno 表:emp e, emp m 條件:e.mgr=m.empno, e.hiredate<m.hireadate */ SELECT e.empno, e.ename, e.deptno FROM emp e, emp m WHERE e.mgr=m.empno AND e.hiredate<m.hiredate SELECT e.empno, e.ename, d.dname FROM emp e, emp m, dept d WHERE e.mgr=m.empno AND e.hiredate<m.hiredate AND e.deptno=d.deptno /* 4. 列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門。 列:* 表:emp e, dept d 條件:e.deptno=d.deptno */ SELECT * FROM emp e RIGHT OUTER JOIN dept d/*右外*/ ON e.deptno=d.deptno /* 5. 列出最低薪金大於15000的各種工作及從事此工作的員工人數。 列:job, count(*) 表:emp e 條件:min(sal) > 15000 分組:job */ SELECT job, COUNT(*) FROM emp e GROUP BY job HAVING MIN(sal) > 15000/*分組后*/ /* 6. 列出在銷售部工作的員工的姓名,假定不知道銷售部的部門編號。 列:e.ename 表:emp 條件:e.deptno=(select deptno from dept where dname='銷售部') */ SELECT * FROM emp e WHERE e.deptno=(SELECT deptno FROM dept WHERE dname='銷售部') /*導入工資等級表 答案未正確,帶核實*/ /* 7. 列出薪金高於公司平均薪金的所有員工信息,所在部門名稱,上級領導,工資等級。 列:* 表:emp e 條件:sal>(查詢出公司的平均工資) */ /*第一步*/ SELECT e.*, d.dname, m.ename, s.grade FROM emp e, dept d, emp m, salgrade s WHERE e.sal>(SELECT AVG(sal) FROM emp) AND e.deptno=d.deptno AND e.mgr=m.empno AND e.sal BETWEEN s.losal AND s.hisal /*第二步:表全加左外*/ SELECT e.*, d.dname, m.ename, s.grade FROM emp e LEFT OUTER JOIN dept d ON e.deptno=d.deptno LEFT OUTER JOIN emp m ON e.mgr=m.empno LEFT OUTER JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal WHERE e.sal>(SELECT AVG(sal) FROM emp) SELECT * FROM emp; SELECT * FROM dept; SELECT * FROM salgrade; /* 8.列出與龐統從事相同工作的所有員工及部門名稱。 列:e.*, d.dname 表:emp e, dept d 條件:job=(查詢出龐統的工作) */ SELECT e.*, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno AND job=(SELECT job FROM emp WHERE ename='龐統') /* 9.列出薪金高於在部門30工作的所有員工的薪金 的員工姓名和薪金、部門名稱。 列:e.ename, e.sal, d.dname 表:emp e, dept d 條件;sal>all (30部門薪金) */ SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno AND sal > ALL (SELECT sal FROM emp WHERE deptno=30)
linux或配置相關:
-----------課時3 03.RPM安裝----------- 安裝:https://blog.csdn.net/heian_99/article/details/89326404 linux卸載mysql(完全卸載)https://blog.csdn.net/qq_41829904/article/details/92966943 linux下開啟、關閉、重啟mysql服務:https://www.cnblogs.com/stm32stm32/p/7862503.html 查看是否安裝成功3種方式: cat /etc/passwd|grep mysql cat /etc/group|grep mysql mysqladmin --version mysql啟動於停止 查看:ps -ef|grep mysql 啟動:service mysqld start 為mysql設置密碼 /usr/bin/mysqladmin -u root password 123456 自啟動設置 設置:chkconfig mysqld on 查看:chkconfig --list|grep mysql 原始命令:ntsysv 路徑: 進入:cd /var/lib/mysql/ 查看:ls -l mysql數據庫文件的存放路徑:/var/lib/mysql/ 配置文件目錄:/usr/share/mysql 相關命令目錄:/usr/bin 啟停相關腳本:/etc/init.d/mysql 修改配置文件: 進目錄:cd /usr/share/mysql 查:ls -l mysql的配置文件: 5.5版本:my-huge.cnf 5.6版本:my-default.cnf 拷貝:cp /usr/share/mysql/my-default.cnf /etc/my.cnf 修改字符集和路徑 show variables like 'character%'; 或者 show variables like '%char%'; cd /etc ls -l my.cnf vim my.cnf :set nu default-character-set=utf8 character_set_server=utf8 character_set_client=utf8 collation-server=utf8mb4_general_ci default-character-set=utf8 esc鍵后保存退出 :wq!