【数据库视频】——操作查询

前言

 基础不牢固,重复重复再重复,再分享一些干货给大家~
 数据库中设计两个表之间的数据查询通常使用连接的方式实现。

分享

  • 连接
    • 内连接(inner join)
    • 外链接
      • 左连接(left join)
      • 右连接(right join)
    • 交叉连接(cross join)
  • 基本连接
     用户在进行基本连接操作时,需要遵循以下基本原则:SELECT子句列表中,每个目标列前都要加上基表名称‘;FROM子句应包括所有使用的基表;WHERE子句应定义一个同等连接。
SELECT A.姓名,A.性别,A.出生日期,A.民族,B.班级名,A.家庭住址
FROM 学生信息 A,班级信息 B
WHERE A.所属班级=B.班级编号

这里写图片描述
这里写图片描述
* 内连接
 利用内连接可获取两表的公共部分的记录

select * from book as a,stu as b where a.sutid = b.stuid
或
select * from book as a inner join stu as b on a.sutid = b.stuid

这里写图片描述

语法:
select fieldlist from table1 [inner] join table2 on table1.column=table2.column
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A inner join 辅导员信息 B
ON A.辅导员=B.辅导员编号
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A inner join 辅导员信息 B
ON A.辅导员=B.辅导员编号 AND B.性别='女'
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A inner join 辅导员信息 B
ON A.辅导员=B.辅导员编号
where B.性别='女'
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A join 辅导员信息 B
ON A.辅导员=B.辅导员编号
where B.性别='女'
  • 外连接
     内连接消除与另一个表的任何行不匹配的行,而外连接会返回FROM子句中提到的至少一个表或试图中的所有行,只要这些行符合任何搜索条件。
     因为,在外连接中参与连接的表有主从之分,以主表的每行数据去匹配从表中的数据行。如果符合连接条件,则直接返回到查询结果中;如果主表中的行在从表中没有找到匹配的行,主表的行仍然保留,并返回到查询结果中,相应的从表中的行中被填上空值后也返回到查询结果中。
  • 左连接
     显示左边表中的所有项目,以左表为基准,然后将右表与左表没有的对应项列为NULL
select * from book as a left join stu as b on a.sutid = b.stuid

这里写图片描述

SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A LEFT OUTER join 辅导员信息 B
ON A.辅导员=B.辅导员编号
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A LEFT join 辅导员信息 B
ON A.辅导员=B.辅导员编号
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A LEFT join 辅导员信息 B
ON A.辅导员=B.辅导员编号 and A.班级人数>20
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A LEFT join 辅导员信息 B
ON A.辅导员=B.辅导员编号 
where A.班级人数>20
  • 右连接
     显示右边表中的所有项目,以右表为基准,然后将左表与右表没有的对应项列为NULL
select * from book as a right join stu as b on a.sutid = b.stuid

这里写图片描述

SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A RIGHT OUTER join 辅导员信息 B
ON A.辅导员=B.辅导员编号
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 辅导员信息 B RIGHT OUTER join 班级信息 A
ON A.辅导员=B.辅导员编号
  • 全连接
     完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
select * from book as a full outer join stu as b on a.sutid = b.stuid

这里写图片描述

SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 辅导员信息 B FULL OUTER join 班级信息 A
ON A.辅导员=B.辅导员编号
SELECT A.班级名,A.班级人数,B.姓名,B.联系方式
FROM 班级信息 A FULL OUTER join 辅导员信息B
ON A.辅导员=B.辅导员编号
  • 交叉连接
     交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
     交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
select * from book as a cross join stu as b order by a.id

这里写图片描述

SELECT A.班级名,A.班级人数,B.姓名
FROM 班级信息 A CROSS JOIN 辅导员信息 B
SELECT A.班级名,A.班级人数,B.姓名
FROM 班级信息 A CROSS JOIN 辅导员信息 B
WHERE A.辅导员=B.辅导员编号
  • 自连接
SELECT A.班级名,A.班级人数,B.班级名
FROM 班级信息 A, 班级信息 B
WHERE A.班级人数=B.班级人数
SELECT A.班级名,A.班级人数,B.班级名
FROM 班级信息 A, 班级信息 B
WHERE A.班级人数=B.班级人数 AND A.班级编号<>B.班级编号
SELECT A.班级名,A.班级人数,B.班级名
FROM 班级信息 A, 班级信息 B
WHERE A.班级人数=B.班级人数 AND A.班级编号<>B.班级编号 AND A.班级名='艺术系2班'
  • 联合查询
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2'
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
SELECT '',SUM(分数),'合计'
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
UNION
SELECT '',SUM(分数),'合计'
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
UNION
SELECT '',SUM(分数),'合计'
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
ORDER BY 分数
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
UNION
SELECT '',SUM(分数),'合计'
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
SELECT '',avg(分数),'合计'
FROM 成绩信息 A 学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
ORDER BY 分数
  • 使用子查询
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
AND A.分数<(
SELECT avg(分数) FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
)
SELECT 学号 FROM 班级信息 A,学生信息 B
WHERE A.班级编号=B.所属班级 AND A.班级编号='20050101'
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
AND B.学号 IN(
SELECT 学号 FROM 班级信息 A,学生信息 B
WHERE A.班级编号=B.所属班级 AND A.班级编号='20050101'
)
  • 嵌套子查询
SELECT 辅导员编号 FROM 辅导员信息 WHERE 姓名='王艳'
SELECT 学号 FROM 班级信息 A,学生信息 B
WHERE A.班级编号=B.所属班级 AND A.辅导员=(
SELECT 辅导员编号 FROM 辅导员信息 WHERE 姓名='王艳'
)
SELECT A.成绩编号,A.分数,B.姓名
FROM 成绩信息 A,学生信息 B
WHERE A.学生编号=B.学号 AND A.课程编号='2' and A.考试编号='0801'
AND B.学号 IN(
SELECT 学号 FROM 班级信息 A,学生信息 B
WHERE A.班级编号=B.所属班级 AND A.辅导员=(
SELECT 辅导员编号 FROM 辅导员信息 WHERE 姓名='王艳'
)
)
  • xml查询
  • FOR XML查询
  • EXISTS关键字查询
  • 交查询INTERSECT
  • 差查询EXCEPT

小结

 不知小编总结的这些大家都看的怎么样呢?反正我自己是看的有点晕乎乎,希望以后有时间多回来看看以前总结的东西,真的挺有用的,不管是以后做项目还是面试哈~

猜你喜欢

转载自blog.csdn.net/Ellen5203/article/details/81872729