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