请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
  • 便民服务
  • 关注我们
  • 社区新手
备份表
注意:插入的表是必须存在,插入的是新表
create table chen like zh; ==》创建chen表,表结构跟zh一致
    1.jpg
insert into chen select * from zh;==》往chen表中插入zh表中所有的数据
    2.jpg
insert into chen1(id3,phone,name) select name,id3,phone from zh; ==》备份指定字段数据
备份库;(Linux界面进行操作)
注意点:这个库要新库先存在,不然找不到对应的库。备份到已有的数据库中会覆盖原有的库
mysqldump -uroot -p123456 fangao>/fangao/chen.sql==》把fangao这个数据备份到根目录下的fangao里面chen.sql文件
mysql -uroot -p123456 faogao1
数据库用户权限
use user==》进入存放数据库的用户
select host,user,password from user;查看user表中有哪些用户
    3.jpg
localhost和127.0.0.1:代表的是本地用户==》可以通过centos跟xshell对数据库
%:代表的具有远程访问权限的用户==》可以用数据库客户端工具进行连接操作

insert into user(host,user,password)values("localhost","chen",password("123456"));往user表中插入
show grants for ‘wang’@“localhost”==》查看是否有权限
flush privileges;==》刷新加载权限
    4.jpg
grant select,update,delete on *.* to'chen'@"localhost" identified by'123456';==》赋于本地用户chen查询,删除,修改的权限
grant all privieges on *.* to'chen1'%"localhost" identified by'123456';建立了一个chen1的用户
*.*所有数据库中所有表
grant all privileges on *.* to "chen1"@"%" identified by "123456";新增用户的同时进行赋权


MySQL数据多表
Navicat的使用:
ctrl+q 新建一个窗口
ctrl+w 关闭一个窗口
service iptables stop 关闭防火墙
单行注释:用#号 被注释的语句和内容是不会被运行
多行注释:/*注释内容*/

多表连接:2个及2个以上的表进行连接
1,基本连接:2张表当中有字段的值相同则可以进行拼接
select * from aa,cc where aa.id=cc.s_id;
2,内连接:
select * from aa inner join cc on aa.id=cc.s_id
3,左连接:以左边的表为基准,右边的表没有的数据会自动补null
select * from aa left join cc on aa.id=cc.s_id;
4,右连接:以右边的表为主,左边的表没有数据会自动补null
select * from aa right join cc on aa.id=cc.s_id;
5,硬连接 机械的追加(2张表的字段相同)用的较少
select * from cc right join aa on aa.id=cc.s_id;

求张三的成绩
6,临时表的方法
第一步:select * from aa inner join cc on aa.id=cc.s_id;==》临时表
第二步:select score from (select * from aa inner join cc on aa.id=cc.s_id) as t where t.name="zhangsan";
基本连接方法:select score from aa inner join cc on aa.id=cc.s_id and name="zhangsan"
7,嵌套的方法“=”

第一步:select id from aa where name="zhangsan";求出张三的id
第二步:select score from cc where s_id=(select id from aa where name="zhangsan");
嵌套的方法“in”,not in 取反值
select score from cc where s_id in (select id from aa where name="zhangsan");

求谁没考试
第一种方法左连接:
select name from aa LEFT JOIN cc on aa.id=cc.s_id where score is null;

第二种方法右连接:
select name from cc RIGHT JOIN aa on aa.id=cc.s_id where score is null;

第三种方法基本连接+嵌套方法:
select id from aa,cc where aa.id=cc.s_id; ==》求出已经参加考试的学号
select name from aa where id not in(select id from aa,cc where aa.id=cc.s_id);

第四种方法嵌套:
select s_id from cc;  ==》求出已经考试的学号
select name from aa where id not in(select s_id from cc );

处理MySQL数据库中文乱码问题
1,vim /etc/my.cnf==>编辑数据库的配置文件
2,加入character_set_server=utf8
3,重启数据库
4,把数据库的属性改成utf-8编码格式


select * from dept;
select * from emp;
insert into emp(dept2,age) values(103,27)


-- 1.找出销售部门中年纪最大的员工的姓名
select name from emp where age in (select max(age) from dept LEFT JOIN emp on dept.dept1=emp.dept2 WHERE dept_name="销售");
-- 2.求财务部门最低工资的员工姓名
select name from emp where incoming in (select min(incoming) from dept LEFT JOIN emp on dept.dept1=emp.dept2 WHERE dept_name="财务");
-- 3.列出每个部门收入总和高于9000的部门名称
select * from dept,emp where dept.dept1=emp.dept2 ;
SELECT A.dept_name,SUM(incoming) FROM (select * from dept,emp where dept.dept1=emp.dept2) as A GROUP BY A.dept2;
SELECT dept_name FROM (SELECT A.dept_name,SUM(incoming)as E FROM (select * from dept,emp where dept.dept1=emp.dept2) as A GROUP BY A.dept2)
as B WHERE B.E>9000;
-- 4.求工资在7500到8500元之间,年龄最大的人的姓名及部门
SELECT dept_name,name FROM emp LEFT JOIN dept on emp.dept2=dept.dept1 where age=(SELECT MAX(AGE) FROM emp LEFT JOIN dept on emp.dept2=dept.dept1) AND (incoming>=7500 and incoming<=8500);
-- 5.找出销售部门收入最低的员工入职时间
SELECT A.worktime_start FROM (SELECT dept_name,min(incoming),worktime_start FROM emp LEFT JOIN dept ON emp.dept2=dept.dept1 GROUP BY dept1 HAVING dept_name="销售") AS A;
-- 6.财务部门收入超过2000元的员工姓名
SELECT name FROM emp LEFT JOIN dept on emp.dept2=dept.dept1 WHERE  dept_name="财务" and incoming>2000;
-- 7.列出每个部门的平均收入及部门名称
SELECT dept_name,avg(incoming) FROM emp RIGHT  JOIN dept on emp.dept2=dept.dept1 GROUP BY dept1;
-- 8.IT技术部入职员工的员工号
SELECT sid FROM emp RIGHT  JOIN dept on emp.dept2=dept.dept1 WHERE dept_name="IT技术";
-- 9.财务部门的收入总和;
SELECT SUM(incoming) FROM emp RIGHT  JOIN dept on emp.dept2=dept.dept1 WHERE dept_name="财务";
-- 10.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表
SELECT * FROM emp RIGHT JOIN dept ON emp.dept2=dept.dept1 order by dept1 DESC,worktime_start asc;
-- 11.找出哪个部门还没有员工入职;
SELECT dept1,dept_name FROM emp RIGHT JOIN dept on emp.dept2=dept.dept1 WHERE NAME IS NULL;
-- 12.列出部门员工收入大于7000的部门编号,部门名称;
SELECT dept_name,dept2 FROM emp,dept WHERE emp.dept2=dept.dept1 and incoming>7000;
-- 13.列出每一个部门的员工总收入及部门名称;
SELECT dept_name,sum(incoming) FROM emp RIGHT JOIN dept on  emp.dept2=dept.dept1 GROUP BY dept1;
-- 14.列出每一个部门中年纪最大的员工姓名,部门名称;
SELECT name,dept_name FROM emp,dept WHERE (dept_name,age) in (SELECT dept_name,max(age) FROM emp,dept where emp.dept2=dept.dept1 GROUP BY dept_name);
-- 15.求李四的收入及部门名称
SELECT incoming,dept_name FROM emp,dept WHERE emp.dept2=dept1 AND name="李四";
-- 16.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序
SELECT name,dept_name,incoming FROM emp,dept where (dept_name,incoming) in (SELECT dept_name,max(incoming) FROM emp,dept WHERE emp.dept2=dept.dept1 GROUP BY dept_name) ORDER BY incoming deSC;
-- 17.列出部门员工数大于1个的部门名称
sELECT dept_name FROM emp RIGHT JOIN dept ON emp.dept2=dept.dept1 GROUP BY dept_name HAVING COUNT(dept_name)>1
-- 18.求入职于20世纪70年代的员工所属部门名称
seLECT dept_name from emp,dept where emp.dept2=dept.dept1 AND worktime_start>="1970-01-01" AND worktime_start<"1980-01-01"
-- 19.查找张三所在的部门名称
SELECT dept_name FROM emp,dept WHERE emp.dept2=dept1 AND name="张三";


分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册