多表查询
概念:当在查询时,所需要的数据不在一张表中,可能在两张表或多张表中。此时需要同时操作这些表。即关联查询。
内连接:在做多张表查询时,这些表中应该存在着有关联的两个字段,组合成一条记录。只连接匹配到的行
步骤:先创俩个表 要有一个字段相同的 作为链接值
内连接方法一:
内连接查询:只显示表中有匹配的数据只找出有相同部门的员工
mysql> select tx.emp_id,tx.emp_name,tx.age,gz.dept_name from tx,gz where tx.dept_id =gz.dept_id;
内连接方法二:不写表名法
mysql> select emp_id,emp_name,age,dept_name from tx,gz where tx.dept_id =gz.dept_id;
内连接方法三:abcd形
mysql> select a.emp_id,a.emp_name,a.age,b.dept_name from tx a,gz b on a.dept_id = b.dept_id;
外连接 三种
外连接:在做多张表查询时,所需要的数据,除了满足关联条件的数据外,还有不满足关联条件的数据。此时需要使用外连接.外连接分为三种
左外连接:表A left [outer] join 表B on 关联条件,表A是主表,表B是从表
右外连接:表A right [outer] join 表B on 关联条件,表B是主表,表A是从表
全外连接:表A full [outer] join 表B on 关联条件,两张表的数据不管满不满足条件,都做显示。
左连接 left join on
mysql> select a.emp_id,a.emp_name,a.age,b.dept_name from tx a left join gz b on a.dept_id = b.dept_id;
右链接 right join on
mysql> select emp_id,emp_name,age,dept_name from tx right join gz on tx.dept_id =gz.dept_id;
全链接 一般不常用union
先做一个左连接在做一个右链接 中间价格 union
mysql> select emp_id,emp_name,age,dept_name from tx right join gz on tx.dept_id =gz.dept_id union select emp_id,emp_name,age,dept_name from tx left join gz on tx.dept_id =gz.dept_id;
破解mysql root密码
步骤1:[root@tian ~]# vim /etc/my.cnf 编辑这个MySQL的配置文件 然后重启MySQL
#编辑配置文件将skip-grant-tables参数 添加到最后一行
步骤2:无密码直接登录MySQL , 进入mysql配置ku
mysql> use mysql 先进入这个库
查看这个表 内容
mysql> select * from mysql.user\G
步骤3:进行更改
mysql> UPDATE mysql.user SET authentication_string=password(‘QianFeng@123’) WHERE user=‘root’ AND host=‘localhsot’;
后面条件一定要加 要不然更改的就是所有root用户的密码
mysql> mysql> FLUSH PRIVILEGES; 重点刷新 刷新 刷新 刷新
步骤4: 5.6/5.7版本: 重新加载一下的意思
# mysqld --skip-grant-tables --user=mysql &
步骤5: vim /etc/my.cnf 把刚才添加最后一行 注释掉就可以拉
#编辑配置文件将skip-grant-tables参数注释