数据库的查询方式

一、合并查询 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;
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值