数据库的查询方式

一、合并查询 union

1.特别注意:合并查询的字段类型和数量要一致
2.单独使用union会把两张表的数据合并,并且过滤掉相同的数据,不想过滤使用 union all
写法:
select 字段名1,字段名2 from1
union select 字段名1,字段名22

二、连接查询

1.99查询法
select * from 表名1,表名2 where 表名1.共同字段 = 表名2.共同字段;
2.内连接查询
a)使用inner join关键字,条件使用on,inner可以省略不写
select * from 表名1 别名1 join 表名2 别名2
on 别名1.共同字段 = 别名2.共同字段;
3.外连接
a)分为左外连接和右外连接
左外连接:以左边的表为主,主表中的数据都会查询出来--可能会产生无用的数据
右外连接一样 right join
eg:
select s.sid,s.sanme ,c.score 
from
score c left join student s
on s.sid = c.sid;

注:表中没有外键的关系,也可以使用连接查询
因为,外键是约束,约束数据的插入,查询时查询,跟约束无关

三、自然连接查询(自然左连接,右连接)

1)会自动帮你匹配到表中相同的字段,没有外键也就可以自然查询
select * from student natural join scorre;

四、多表查询

多表查询(查询时3张表2个条件,n张表有n-1个条件)
select  s.sid,s.sanme,c.score,cm.cname
 from 
studnet s join  score c on c.sid = s.sid
join course cm  on c.cid = cm.cid;

五、子查询

1)出现多次select关键字的查询语句
eg:查询工资高于30号部门所有人的员工信息
 select * from emp where sal>(select max(sal) from emp where deptno=30);
2)查询单个数据使用等号,多个数据一般使用in

六、自连接查询

1)当你的数据都在一张表中,但是一次不能查出来,可以使用自动连接
 eg:7369员工编号、姓名、经理编号和经理姓名
 select e1.empno,e1.ename,e1.mgr,e2.ename from emp e1,emp e2 
where e1.mgr = e2.empno and e1.empno=7369;
2)查询过程中出现的问题
eg:各个部门薪水最高的员工所有信息,查询过程中出现问题,查询时,没有把部门的条件带进去,只是按最高工资处理的
第一种写法:
SELECT * from emp where (sal,deptno) in (select max(sal),deptno from emp GROUP BY deptno );
第二种写法:
select * from emp e1,
(select deptno,max(sal) msal from emp GROUP BY deptno)e2
where e1.sal = e2.msal and e1.deptno = e2.deptno;

你可能感兴趣的:(数据库)