目录
1、表连接查询
1.1 多表查询的概念
1.2 内连接:
1.3 外连接:
2、子查询
3、事务
1、表连接查询
1.1 多表查询的概念
所需要的查询结果在多张不同的表中,因此需要用到多表查询。
多表查询分为:内连接和外连接。
内连接包含:隐式内连接和显式内连接。
外连接包含:左外连接和右外连接。
笛卡尔积:
--
需求
:
查询所有的员⼯和所有的部门
select
*
from
emp,dept;
--
设置过滤条件
Column 'id' in where clause is ambiguous
select
*
from
emp, dept
where
id
=
5
;
1.2 内连接:
-- 隐式内连接:看不到 JOIN 关键字,条件用 WHERE 指定
SELECT
字段名
FROM
左表
,
右表
WHERE
条件
;
select
*
from
emp, dept
where
emp.
`dept_id`
=
dept.
`id`
;
-- 显式内连接:使用 INNER JOIN ... ON 语句,可以省略 INNER
SELECT
字段名
FROM
左表
[
INNER
]
JOIN
右表
ON
条件
;
select
*
from
emp e
inner join
dept d
on
e.
`dept_id`
=
d.
`id`
;
1.3 外连接:
-- 左外连接:使用 LEFT OUTER JOIN ... ON, OUTER 可以省略
SELECT
字段名
FROM
左表
LEFT
[
OUTER
]
JOIN
右表
ON
条件
select
*
from
dept d
left join
emp e
on
d.
`id`
=
e.
`dept_id`
;
-- 右外连接:使用 RIGHT OUTER JOIN ... ON, OUTER 可以省略
SELECT
字段名
FROM
左表
RIGHT
[
OUTER
]
JOIN
右表
ON
条件
select
*
from
dept
right join
emp
on
dept.
`id`
=
emp.
`dept_id`
;
2、子查询
子查询的概念:
1. 一个查询的结果作为另一个查询的条件
2. 有查询的嵌套,内部的查询称为子查询
3. 子查询要使用括号
-- 子查询结果为单行单列
SELECT 查询字段 FROM表 WHERE 字段 = (子查询);
-- 子查询结果为多行单列
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
-- 子查询结果为多行多列
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
3、事务
MySQL中可以有两种方式对事务进行操作:
1. 手动提交事务
2. 自动提交事务
回滚点:
事务的四大特性ACID:
事务的隔离级别:
MySQL数据库的四种隔离级别:
-- 查询全局事务隔离级别
select @@transaction_isolation;
# MySQL 5.x
版本 隔离级别变量名为
tx_isolation
set global transaction isolation level
级别字符串
;