# 连接查询

在数据库中 join 操作被称为连接,作用是能连接多个表的数据(通过连接条件),从多个表中获取数据合并在一起作为结果集返回给客户端。

# 交叉连接

交叉连接:将两张表的数据与另外一张表彼此交叉

select * from1 cross join2
eg:
select class.cname, student.sname from student cross join class on class.cid =
student.classid;
-- 其中的 on 代表两个表的连接条件

# 内连接

inner-join

方式一:
select * from1,2 where1.=2.
方式二:
select * from1
inner join2 on1.=2.

# 外连接

# 左连接

左连接基础语法是 a left outer join b ,其中的 outer 可以省略,与内连接相比就是在与内连接相
同条件下,在内连接的结果集中添加 a 表在 b 表中找不到匹配的记录,换句话说就是,结果集中会包含 a 表中的所有记录,如果 b 表中有匹配的记录就出现在结果集,否则使用 NULL 代替,也就是把 a 表看成根本,不可缺失记录。
left-join

select * from1
left join2 on1.=2.

# 右连接

右外连接基础语法是 a right outer join b ,其中的 outer 可以省略,与内连接相比就是在与内连
接相同条件下,在内连接的结果集中添加 b 表在 a 表中找不到匹配的记录,换句话说就是,结果集中会包含 b 表中的所有记录,如果 a 表中有匹配的记录就出现在结果集,否则使用 NULL 代替,也就是把 b 表看成根本,不可缺失记录,作用与左外连接恰好相反。
right-join

select * from1
right join2 on1.=2.

# 自连接

自连接就是表与它自身相关联,进行自连接时通过给表起不同的别名来区分一个表的两个实例。

select.字段1,.字段2,.字段3 
from1 as 别名,2 as 别名 
where 别名.字段2=别名2.字段3

# 子查询

子查询指嵌套在查询内部,且必须始终出现在圆括号。子查询可以包含多个关键字或条件,如
DISTINCTGROUP BYORDER BYLIMIT函数 等。
子查询的外层查询可以是: SELECTINSERTUPDATESET或DO
子查询可以返回标量,一行,一列或子查询。

# 将子查询作为派生表

select * from1 where 字段1 =select 字段2 from2;

# 把子查询用在 where 子句中

eg:
select ename,sal from emp where sal>(select avg(sal) form emp);

# 在 from 语句中使用子查询

eg:
select t.deptno,t.avgsal,s.grade
from (select deptno,avg(sal) as avgsal from emp group by deptno) t
join salgrade s
on t.avgsal between s.losal and s.hisal;

# 集合操作 (UNION)

union 作用:合并查询结果集

Eg:
select ename,job from emp where job='manager'
union
select ename,job from emp where job='salesman';

limit

limit 起始下标,长度
如果起始下标没有指定,默认从0开始,0表示表中第一条记录。
Eg:
-- 按照工资降序排列取前 5 个
select ename,sal from emp order by sal desc limit 5;

通用的分页 SQL (只适用于 mysql 数据库管理系统)

select t.* from t
order by t.x desc/asc
limit (pageNo-1)*pageSize,pageSize;
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

寻梦启事 微信支付

微信支付

寻梦启事 支付宝

支付宝

寻梦启事 云闪付

云闪付