找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手

11.25 多表链接,数据库权限 笔记

[复制链接]
本帖最后由 dcs68欧一萌 于 2021-11-25 20:34 编辑

多表查询的方法、(重点)
a 姓名表                                c 成绩表  
id name                                   s_id scroe
1    张三                                         1      100
2    b                                         2      20
3    c                                         3      30   
查找张三的成绩:select * from aa,cc where id=s_id; 先拼两个表一起
select * from aa,cc where id=s_id and name='zhangsan'  查到的是人
select score from aa,cc where id=s_id and name='zhangsan';   和单表的区别就是多一个链接文件的步骤
1:、多表的条件:必须要关联的表中有相同的字段
2、把表和表进行关联的方法
表结构模板:
create table aa(id int(1) PRIMARY key,name char(20));
create table cc(s_id int(1) PRIMARY key,score char(20));
insert into aa(id,name)values(1001,'zhangsan'),(1002,'lisi');
insert into cc(s_id,score)values(1001,'99'); select * from aa; select * from cc;
方法一,基本链接:
查询出来的结果只会显示两个表中都有的值,两两为真就为真,一假一真一假一真两个假都是假(只取两个表中都有的值,若是a表中有id 3,c表里没有s_id 3,那么这个数据就会自动不显示出来  (只有基本链接才要用到where)
                         select * from aa,cc where aa.id(调用我aa里id的字段的意思)  =cc.s_id;
                         select * from aa,cc where id=s_id;   简洁写法   
                         select * from aa,cc where id=s_id;   谁的id条件在前面,出现的表格谁就在前面
                         select * from aa,cc where id=s_id and id=c_id;如果三个表,就在后面加and。
方法二:内链接:所查询的内容和基本链接一样,都是两两为真,只能查询到两个表都有的值
inner join on
select * from aa inner join cc on aa.id=cc.s_id;
select * from aa inner join cc on id=s_id;

方法三,左链接方法:from后面是主表,on前面是子表
左边的表为主表,右边表为子表
left join on   语法   (left 前面接主表,join 后接子表,on后面接相同字段)
如:select * from aa left join cc on aa.id=cc.s_id;  主表为aa,子表为cc
       select * from aa left join cc on id=s_id;  简洁写法
三个表左链接的话,第三个表接在后面,如:select * from dd left join aa on cid=id left join cc on cid=s_id;
如果主表内容大于子表,那么子表缺省的值会自动补齐null  ,相反,如果主表内容少于子表,那么主表会全部显示,子表只会取和主表相同的值,不相同不显示

方法四:右链接  右表为主表,左边为子表
如果主表内容大于子表,那么子表缺省的值会自动补齐null  ,相反,如果主表内容少于子表,那么主表会全部显示,子表只会取和主表相同的值,不相同不显示
语法:right join on   和左链接相反   
select * from aa right join cc on aa.id=cc.s_id;    放在右边的是主表  左边是aa,右边是cc,所有主表为cc
select * from aa right join cc on id=s_id;
面试题常问:左右链接的区别
方法五:union  链接  前提是,表和表的字段数目要相同,两个表合并起来了,字段只按照一个显示
select * from aa union select * from cc;
临时表的写法:取别名
select * from aa,cc where id=s_id;  如把链接表取别名 select * from (select * from aa,cc where id=s_id)a;  取别名
select * from a; 因为取了别名,打开全部a就是打开链接表
select * from (select * from aa,cc where id=s_id)a where a.name='zhangsan';
如果语法出错,有两个同样的语法如group by 平等的值,就给其中一个取别名
如:select * from(select * from aa order by score desc)a group by class
聚合函数用的临时表取别名比较多,因为*号位置容易被聚合函数占用

嵌套:
查找张三的成绩
select * from aa where name='zhangsan';
select * from cc where s_id in(select di from aa where name='zhangsan');
select score from cc where s_id in(select id from aa where name='zhangsan');  用=号也行,都是同等
的意思

求出谁没参加考试
select * from aa left join cc on id=s_id
没参加考试,score is null   
显示出姓名,
取别名的方法:
左链接:select name from(select * from aa left join cc on id=s_id)as yy where score is null;
右链接:select name from(select * from cc right join aa on s_id=id)as y where score is null;
如何给普通 的数据库赋予权限
链接工具navicat 需要满足的条件:
账号
密码
端口
域名、IP地址。
数据库需要重启
防火墙要关闭
且对应的账号要拥有远程访问的权限(%)百分号权限:进入数据库中的mysql查询

查询是否有权限:select host,user from user;
show databases;  ------use mysql 里面查询权限,没有%权限就赋予权限
如果没有%号的权限的话就输入:grant all privileges on *.* to 'root'@'%' identified by '123456';  意思是:我新建一个账号叫root,密码123456,并且赋予了一个%权限
1:创建用户不授权:要use进入mysql里去创建insert into user (host,user,password)values('localhost','oym',password('123456')); 创建用户不赋予权限,这句话意思是,新增加一个用户user叫做oym 在他的host,user,password   主机,用户名,密码 分别的数据是('localhost','oym',password('123456')    成功后就能在Linux直进到这个数据库里,mysql -uoym -p123456 有密码输入密码,没密码就不用输入,但是没有权限,就不能在里面增加库和表
2:给用户授权:因为没有权限,要授权,grant create,select,update,delete,drop on *.* to 'oym'@'localhost' identified by '123456' ;    我可以根据我对应用户的需求进行分别授权 create,select,update,drop这几个权限,权限可以需要什么就赋予什么,localhost域名,grant授予
授权好后刷新:flush privileges  创建和授权后都要刷新
3:查看指定用户拥有哪些权限 也是use仅mysql里show grants for  'oym'@'localhost';   查看oym这个用户在localhost里有哪些权限
4:取消指定用户的权限:revoke all on *.* from 'oym'@'localhost';   取消oym这个用户的所有权限,取消后再查询可以看一下是否还存在
5:删除用户:delete from user where user=‘oym’ and host=‘localhost’; 删掉oym用户的同时,也删掉对应它的localhost.(貌似是进入use mysql后操作)
6:改用户密码:update user set password=password(‘123456’) where user=‘root’;把用户root密码改成123456



分享至 : QQ空间
收藏

0 个回复

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