数据库之连接查询

 学生表

CREATE TABLE student (
stuid VARCHAR (10) PRIMARY KEY,
stuname VARCHAR (50)
);

 分数表

CREATE TABLE score (
stuid VARCHAR (10),
score INT,
courseid INT
);

 科目表

CREATE TABLE course (
courseid VARCHAR (10) PRIMARY KEY,
cname VARCHAR (50)
);

合并查询 把两张表的记录合并在一起打印 
union取两张表交集 必须是字段名和 数据类型相同

SELECT
*
FROM
a
UNION
SELECT
*
FROM
b;

SELECT * from a,b;出现了大量重复数据
笛卡尔积

SELECT
*
FROM
a,
b;

测试一下分数表和学生表一起查询

SELECT
*
FROM
student,
score;

去除重复数据(99查询法 通过两张表关联字段相等 来去除)

SELECT
*
FROM
student,
score
WHERE
student.stuid = score.stuid;

查询学生编号和学生的分数

SELECT
student.stuid,
score.score
FROM
student,
score
WHERE
student.stuid = score.stuid;

给表起别名

SELECT
s.stuname,
sc.score
FROM
student s,
score sc
WHERE
s.stuid = sc.stuid;

多表查询时不一定非要有外键
学生表和分数表和科目表一起查

SELECT
s1.stuid,
s1.stuname,
s2.score,
s2.courseid,
c.cname
FROM
student s1,
score s2,
course c
WHERE
s1.stuid = s2.stuid
AND s2.courseid = c.courseid;

查询学生的名字和对应分数和科目

SELECT
s1.stuname,
s2.score,
c.cname
FROM
student s1,
score s2,
course c
WHERE
s1.stuid = s2.stuid
AND s2.courseid = c.courseid;

查询表中80分以上学生的 姓名 分数 科目信息

SELECT
s1.stuname,
s2.score,
c.cname
FROM
student s1,
score s2,
course c
WHERE
s1.stuid = s2.stuid
AND s2.courseid = c.courseid
AND s2.score > 80;

连接查询
内连接 外链接 自然连接
内连接 表一 inner(可以省略) join 表二 on 去除重复条件

SELECT
*
FROM
student s
JOIN score sc ON s.stuid = sc.stuid;

SELECT
*
FROM
student s
JOIN score sc ON s.stuid = sc.stuid
JOIN course c ON sc.courseid = c.courseid
WHERE
sc.score > 80;

外链接
左外链接LEFT OUTER(可以省略) JOIN 左边那张表为主 会输出这个表的全部数据
右外链接RIGHT JOIN

SELECT
*
FROM
student s
LEFT JOIN score sc ON s.stuid = sc.stuid;

SELECT
*
FROM
student s
RIGHT JOIN score sc ON s.stuid = sc.stuid;

自然连接 
自动匹配表中关联匹配

SELECT
*
FROM
student
NATURAL JOIN score;

猜你喜欢

转载自blog.csdn.net/qq_37113621/article/details/82889268