MySQL常用命令,34道练习题(持续更新中)。

  • 1、使用SHOW语句找出在服务器上当前存在什么数据库:
    mysql> SHOW DATABASES;
  • 2、创建一个数据库MYSQLDATA
    mysql> CREATE DATABASE MYSQLDATA;
  • 3、选择你所创建的数据库
    mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)
  • 4、查看现在的数据库中存在什么表
    mysql> SHOW TABLES;
  • 5、创建一个数据库表
    mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
  • 6、显示表的结构:
    mysql> DESCRIBE MYTABLE;
  • 7、往表中加入记录
    mysql> insert into MYTABLE values (”hyq”,”M”);
  • 8、用文本方式将数据装入数据库表中(例如D:/mysql.txt)
    mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;
  • 9、导入.sql文件命令(例如D:/mysql.sql)
    mysql>use database; mysql>source d:/mysql.sql;
  • 10、删除表
    mysql>drop TABLE MYTABLE;
  • 11、清空表
    mysql>delete from MYTABLE;
  • 12、更新表中数据
    mysql>update MYTABLE set sex=”f” where name=’hyq’;

匿名帐户删除、 root帐户设置密码:

use mysql; delete from User where User=”"; update User set Password=PASSWORD(’newpassword’) where User=’root’; 

GRANT的常用用法如下:

grant all on mydb.* to NewUserName@HostName identified by “password” ; grant usage on *.* to NewUserName@HostName identified by “password”; grant select,insert,update on mydb.* to NewUserName@HostName identified by “password”; grant update,delete on mydb.TestTable to NewUserName@HostName identified by “password”; 

全局管理权限:

  • FILE: 在MySQL服务器上读写文件。
  • PROCESS: 显示或杀死属于其它用户的服务线程。
  • RELOAD: 重载访问控制表,刷新日志等。
  • SHUTDOWN: 关闭MySQL服务。

数据库/数据表/数据列权限:

  • ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
  • CREATE: 建立新的数据库或数据表。
  • DELETE: 删除表的记录。
  • DROP: 删除数据表或数据库。
  • INDEX: 建立或删除索引。
  • INSERT: 增加表的记录。
  • SELECT: 显示/搜索表的记录。
  • UPDATE: 修改表中已存在的记录。

特别的权限:

  • ALL: 允许做任何事(和root一样)。
  • USAGE: 只允许登录–其它什么也不允许做。

MySQL-Practice-Questions

1、取得每个部门最高薪水的人员名称

  • 第一步:取得每个部门最高薪水『按照部门分组求最大值』
    mysql> select deptno,max(sal) as maxsal from emp group by deptno;
deptnomaxsal
105000.00
203000.00
302850.00
  • 第二步:将上面的查询结果当作临时表t,t表和emp e表进行连接
    条件:e.deptno=t.deptno and e.sal=t.sal
mysql> select -> e.ename t.* -> from -> emp e -> join -> (select deptno,max(sal) as maxsal from emp group by deptno) t -> on -> e.deptno=t.deptno and e.sal = t.maxsal; 
enamedeptnomaxsal
BLAKE302850.00
SCOTT203000.00
KING105000.00
FORD203000.00

2、那些人的薪水在部门的平均薪水之上

第一步:找出部门的平均薪水『按部门编号分组求平均薪水』
select deptno,avg(sal) as avgsal from emp group by deptno;

deptnoavgsal
102916.666667
202175.000000
301566.666667

第二步:将上面的查询结果当作临时表t,与emp e表进行连接 条件:t.deptno=t.deptno and e.sal > t.avgsal

select e.ename,e.sal,t.* from emp e join (select deptno,avg(sal) as avgsal from emp group by deptno) t on e.deptno=t.deptno and e.sal > t.avgsal; 
enamesaldeptnoavgsal
ALLEN1600.00301566.666667
JONES2975.00202175.000000
BLAKE2850.00301566.666667
SCOTT3000.00202175.000000
KING5000.00102916.666667
FORD3000.00202175.000000

3、1取得部门中(所有人)平均薪水的等级

第一步:取得部门中的平均薪水
select deptno,avg(sal) as avgsal from emp group by deptno;

deptnoavgsal
102916.666667
202175.000000
301566.666667

第二部:将上面的查询结果当作临时表t,t表和salgrade s表进行关联 条件:e.sal between s.losal and s.hisal

select t.*,s.grade from salgrade s join (select deptno,avg(sal) as avgsal from emp group by deptno) t on t.avgsal between s.losal and s.hisal; 
deptnoavgsalgrade
102916.6666674
202175.0000004
301566.6666673

3、2取得部门中(所有人)薪水的平均等级

第一步:每个员工的薪水等级(oder by 以部门编号排序,为了好理解)

select e.ename,e.sal,e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal ; 
enamesaldeptnograde
MILLER1300.00102
KING5000.00105
CLARK2450.00104
ADAMS1100.00201
SCOTT3000.00204
FORD3000.00204
JONES2975.00204
SMITH800.00201
MARTIN1250.00302
ALLEN1600.00303
JAMES950.00301
BLAKE2850.00304
WARD1250.00302
TURNER1500.00303

第二步:在以上基础上继续以部门编号分组,求平均薪水等级

select e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal group by e.deptno; 
deptnograde
104
201
303

4、不用组函数(MAX),取得最高薪水(给出两种解决方案)

方案一:按照薪水降序排,取得第一个

mysql> select sal from emp order by sal desc limit 1;

方案二:自连接

mysql>mysql> select sal from emp where sal not in(select a.sal from emp a join emp b on a.sal < b.sal);

sal
5000.00

5、取得平均薪水最高的部门的编号(至少给出两种解决方案)

第一种方案:平均薪水降序排取第一个 第一步:取得每个部门的平均薪水

mysql> select deptno,avg(sal) avgsal from emp group by deptno;

deptnoavgsal
102916.666667
202175.000000
301566.666667

第二步:取得平均薪水的最大值

mysql> select avg(sal) avgsal from emp group by deptno order by avgsal desc limit 1;

avgsal
2916.666667

第三步:将第一步和第二步结合

select deptno,avg(sal) as avgsal from emp group by deptno having avg(sal)=( select avg(sal) avgsal from emp group by deptno order by avgsal desc limit 1); 
deptnoavgsal
102916.666667

第二种方案:MAX函数

select deptno,avg(sal) as avgsal from emp group by deptno having avg(sal)=( select max(t.avgsal) from (select avg(sal) avgsal from emp group by deptno) t); 
deptnoavgsal
102916.666667

6、取得平均薪水最高的部门的部门名称

select d.dname,avg(e.sal) as avgsal from emp e join dept d on e.deptno=d.deptno group by d.dname having avg(e.sal)=( select max(t.avgsal) from (select avg(sal) avgsal from emp group by deptno) t); 
dnameavgsal
ACCOUNTING2916.666667
    原文作者:SQL
    原文地址: https://juejin.im/entry/59b762e6f265da066563b54f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞