多表设计,关联查询
-- 多表设计,关联查询
-- 笛卡尔积现象(几乎不用)
SELECT* FROM t_student,grade -- 查询的结果不是我们先要的
-- 内连接
-- 1.等值连接 2.非等值连接 3.自连接
-- ---------------------------------------------------------------------------------------
-- 等值连接
-- 方式1 采用inner join方式 语法:select 结果 form 表名1 inner join 表名2 on 连接条件
SELECT * FROM t_student INNER JOIN grade ON grade_id = id
-- select num,name,name from t_student inner join grade on grade_id = id -- 查询的结果中有重名现象,所以需要起别名。报错Column 'name' in field list is ambiguous
SELECT
s.num,
s.NAME,
g.NAME
FROM
t_student s
INNER JOIN grade g
ON s.grade_id = g.id
-- 方式二 采用where方式 语法:select 结果 form 表名1,表名2 where 连接条件
SELECT
s.num,
s.NAME,
g.NAME
FROM
t_student s,
grade g
WHERE s.grade_id = g.id
-- ---------------------------------------------------------------------------------------------
ALTER TABLE t_student ADD score INT
CREATE TABLE score_lever( NAME VARCHAR(2),lower_score INT ,upper_score INT)
-- 非等值连接
SELECT*
FROM
t_student s
INNER JOIN score_lever sl
ON s.score BETWEEN sl.lower_score
AND upper_score
-- ---------------------------------------------------------------------------------------------
-- 自连接
CREATE TABLE t_area(
id INT,NAME VARCHAR(20),pid INT)
SELECT*
FROM
t_area t1
INNER JOIN t_area t2
ON t1.pid = t2.pid
-- -------------------------------------------------------------------------------------------------
-- 外连接
-- 左外链接 以左边的表为主进行查询。以左边的表为主进行查询无论条件是否满足都会将左边数据查询出来
SELECT
s.num,
s.NAME,
g.NAME
FROM
t_student s
LEFT JOIN grade g
ON s.grade_id = g.id
-- -------------------------------------------------------------------------------------------------------
-- 右外连接 以右边的表为主进行查询
SELECT
s.num,
s.NAME,
g.NAME
FROM
t_student s
RIGHT JOIN grade g
ON s.grade_id = g.id
--左外连接和右外连接的区别如分析
左外连接和右外连接区别:
新建学生表如下图所示:
新建年级表如下图所示:
左查询后的结果:
右查询后的结果:
数据库的备份与恢复
使用sqlyog客户端工具进行数据库的备份操作
在修改删除数据之前最好对数据库进行备份