老杜MySQL入门基础 第二天
导入演示数据
1、连接MySQL
2、创建"bjpowernode"数据库
create database bjpowernode;
3、选择数据库
use bjpowernode
4、导入数据
source D:\bjpowernode.sql(文件的路径)
1 去除重复记录(把查询结果去除重复记录)(原表数据不会改变)
使用关键字distinct
1 select job from emp;
2 select distinct job from emp;
注意:distinct只能出现在所有字段的最前方
distinct出现在job和deptno两个字段之前,表示两个字段联合起来去重
select distinct job,deptno from emp;
select job,deptno from emp;
统计工作岗位的数量:
select count(distinct job) from emp;
2 连接查询(多张表联合起来查询数据)
笛卡尔积现象
当两张表进行连接查询 没有任何条件限制的时候 最终查询结果的条数 是两张表条数的乘积
如何避免笛卡尔积现象
连接时 加条件 满足这个条件的 记录被筛选出来
select ename,dname
from emp,dept
where emp.deptno = dept.deptno;
表起别名
select e.ename,d.dname
from emp e,dept d
where e.deptno = d.deptno;
表的连接次数越多 效率越低
3 内连接之等值连接
select e.ename,d.dname
from emp e,dept d
where e.deptno = d.deptno;
或者
select e.ename,d.dname
from emp e
join dept d
on e.deptno = d.deptno;
或者
select e.ename,d.dname
from emp e
inner join dept d //inner可以省略
on e.deptno = d.deptno;
select …
from a
join b
on a和b的连接条件
where 筛选条件;
4 内连接之非等值连接
条件不是一个等量关系,称为非等值连接
select e.ename,e.sal,s.grade
from emp e
(inner) join salgrade s
on e.sal between s.losal and s.hisal;
5 内连接之自连接
一张表看成是两张表
select a.ename as ’员工名‘,b.ename as '领导名'
from emp a
join emp b
on a.mgr = b.empno;
6 外连接
1、右外连接(right)
select e.ename,d.dname
from emp e right join dept d
on e.deptno = d.deptno;
right代表着:表示将join关键字右边的这张表看成主表,
主要是为了将这张表的数据全部查询出来,
捎带着关联查询左边的表
在外连接中,两张表连接产生了主次关系
在内连接中,两张表是平等的
2、左外连接(left)
select e.ename,d.dname
from dept d left join emp e
on e.deptno = d.deptno;
3、在join前面右outer可以省略
select e.ename,d.dname
from emp e
right outer join dept d
on e.deptno = d.deptno;
或者
select e.ename,d.dname
from dept d
left outer join emp e
on e.deptno = d.deptno;
外连接的查询结果条数是不是一定是大于等于内连接的查询结果条数?
正确
7 多张表的连接(三张或者四张表的连接)
select ...
from a
join b
on a和b的连接条件
join c
on a和c的连接条件
join d
on a和d的连接条件
8 子查询
select语句中嵌套select语句,被嵌套的select语句称为子查询
select
...(select)
from
...(select)
where
...(select)