数据库基础知识整理

本文介绍了数据库的基础知识,包括左外连接的概念,内连接的使用,以及统计分析的方法。重点讲解了如何进行嵌套查询,通过中间表的概念简化复杂查询。此外,还对比了MySQL和Oracle在分页查询上的不同实现方式。
摘要由CSDN通过智能技术生成

左外连接(LEFT JOIN...ON | LEFT OUTER JOIN)

会显示左表的所有行的信息,不管右表中是否有匹配的项,由表中没有匹配的话则显示null。假如连接条件是:left.name = right.name,且左表中有7个name='Tom',右表中有3个name='Tom',则查询结果会有21条记录。

 

假设有一个user表,字段分别为:user_name, salary, sex, age。(纯属举例,不讨论表的设计)

内连接

我们平时使用的连接就是内连接(隐式) ,如:select a.name from a,b where a.name = b.name;

如果是显式的内连接,使用inner join...on, 如:select a.name inner join b on a.name = b.name;

 

 需要统计的基本上都需要分组

 例如:统计男、女的个数分别是多少,就根据性别分组:select count(*),sex from user group by sex;

 

有分组的情况下才有having子句,having中可以写聚合函数(where中不行)

例如:统计小于24岁的男或者女个数是多少: select count(*),sex from user group by sex having avg(age) < 24;

 

 嵌套查询的核心是寻找中间表

中间表,即最先被查询出来的数据,然后把这些数据当做一个表来处理。

例1:查询所以比女性平均工资高的男性的名字。

select user_name from user where salary > (select avg(salary) from user where sex = 'female') and sex = 'male'

中间表只有一条数据,就是女性的平均工资。

例2:查询工资比所有人的平均工资低且比Lili高的人的姓名和性别。

一般是这样写:

select * from user where salary < (select avg(salary) from user) and salary > (select salary from user where user_name='Lili')

如果有中间表的概念,你会想到:工资比所有人的平均工资低的,是一个集合,可以先查出来作为中间表,如下:

select u.* from user u,(select id from user where salary < (select avg(salary) from user)) lower_avg 
where u.id = lower_avg.id and u.salary>(select salary from user where user_name='Lili')

 

MySQL和Oracle的分页查询 

 MySQL用的是limit,Oracle用的是ROWNUM。

Oracle:

SELECT * FROM (SELECT query_table_alias.*, ROWNUM RN FROM (SELECT * FROM targer_table) query_table_alias WHERE ROWNUM < 40) WHERE RN > 20

MySQL:

select * from table_name where id > (pageNo - 1)*pageSize limit pageSize;

或者 select * from table_name limit pageNo - 1)*pageSize, pageSize;(数据量小的时候用)

 

以上只是个人的笔记,仅供参考! 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值