开启/退出:
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!