当前位置: 首页 > wzjs >正文

外国做爰网站双流网站建设

外国做爰网站,双流网站建设,广州网站建设推广易尚,wordpress wp_enqueue_scripts文章目录 📕摘要📕1. 多表联合查询时MySQL内部原理✏️1.1 实例:一个完整的联合查询过程 📕2. 内连接📕3. 外连接📕4. 自连接📕5. 子查询✏️5.1 单行子查询✏️5.2 多行子查询✏️5.3 多列子查…

文章目录

    • 📕摘要
    • 📕1. 多表联合查询时MySQL内部原理
        • ✏️1.1 实例:一个完整的联合查询过程
    • 📕2. 内连接
    • 📕3. 外连接
    • 📕4. 自连接
    • 📕5. 子查询
        • ✏️5.1 单行子查询
        • ✏️5.2 多行子查询
        • ✏️5.3 多列子查询
        • ✏️5.4 在from子句中使用子查询
    • 📕6. 合并查询
        • ✏️6.1 union
        • ✏️6.2 union all
    • 📕7. 插入查询结果

📕摘要

前面我们学习了数据库设计时要满足三大范式,也就意味着数据会被拆分到许多张表中,当我们想查询一个学生的基本信息与成绩时,此时就会涉及到学生表,班级表,成绩表等多张数据表,但我们给用户展示信息时并不会把冗余的数据也展示给用户,所以我们就需要用到联合查询从多张表中查询出有用的数据。此时的‘联合’,就是指多张数据表的组合。

📕1. 多表联合查询时MySQL内部原理

当我们进行多表联合查询时,MySQL内部会进行以下操作:

  1. 参与查询的所有表取笛卡尔积,结果集在临时表中
    在这里插入图片描述
  2. 观察哪些记录是有效数据,根据两个表的关联关系过滤掉无效数据
    在这里插入图片描述
    =======================================================================
    首先我们要构造一个练习数据
create database if not exists test; -- 创建库use test;-- 课程表
create table if not exists course(id bigint primary key auto_increment,`name` varchar(20) not null
);insert into course (name) values ('Java'), ('C++'), ('MySQL'), ('操作系统'), ('计
算机网络'), ('数据结构');-- 学生表
create table if not exists student(id bigint primary key auto_increment,`name` varchar(20),sno varchar(20),age bigint,gender bigint,enroll_date varchar(20),class_id bigint
);insert into student (name, sno, age, gender, enroll_date, class_id) values
('唐三藏', '100001', 18, 1, '1986-09-01', 1),
('孙悟空', '100002', 18, 1, '1986-09-01', 1),
('猪悟能', '100003', 18, 1, '1986-09-01', 1),
('沙悟净', '100004', 18, 1, '1986-09-01', 1),
('宋江', '200001', 18, 1, '2000-09-01', 2),
('武松', '200002', 18, 1, '2000-09-01', 2),
('李逹', '200003', 18, 1, '2000-09-01', 2),
('不想毕业', '200004', 18, 1, '2000-09-01', 2);-- 班级表
create table if not exists class(id bigint primary key auto_increment,`name` varchar(20)
);insert into class(name) values ('Java001班'), ('C++001班'), ('前端001班');-- 分数表
create table if not exists score(id bigint primary key auto_increment,score bigint,student_id bigint,course_id bigint
);insert into score (score, student_id, course_id) values
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
(60, 2, 1),(59.5, 2, 5),
(33, 3, 1),(68, 3, 3),(99, 3, 5),
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
(81, 5, 1),(37, 5, 5),
(56, 6, 2),(43, 6, 4),(79, 6, 6),
(80, 7, 2),(92, 7, 6);

Navicat可视化图:

  1. 班级表
    在这里插入图片描述
  2. 课程表
    在这里插入图片描述
  3. 分数表
    在这里插入图片描述
  4. 学生表
    在这里插入图片描述
✏️1.1 实例:一个完整的联合查询过程

查询学生姓名为孙悟空的详细信息,包括学生个人信息和班级信息

  1. 首先确定参与查询的表,分别是student表与class表
select * from student,class;

在这里插入图片描述

  1. 确定连接条件,条件为student表中的class_id要与class表中的id相等
select * from student,class where student.class_id = class.id;

在这里插入图片描述

  1. 加入查询条件
select * from student,class where student.class_id = class.id and student.`name` = '孙悟空';

在这里插入图片描述

  1. 精减查询结果字段
selectstudent.id,student.name,class.name
from student,class 
wherestudent.class_id = class.id 
and student.`name` = '孙悟空';

在这里插入图片描述

  1. 可以为表名指定别名
selectstu.id,stu.name,c.name
from student as stu,class as c
wherestu.class_id =c.id 
and stu.`name` = '孙悟空';

📕2. 内连接

select * from 表名1 as 别名1 , 表名2 as 别名2 where 连接条件 and 其他条件;
  1. 查询"唐三藏"同学的成绩
-- 查询唐三藏同学的成绩
selectstudent.`name`,score.score,course.`name` fromstudent,score,course wherestudent.id = score.student_id andscore.course_id = course.id andstudent.`name` = '唐三藏';

在这里插入图片描述

  1. 查询所有同学的总成绩,及同学的个人信息
  select student.`name`,sum(score.score) as '总分'from student,scorewherestudent.id = score.student_idgroup by `name`;

在这里插入图片描述

  1. 查询所有同学每门课的成绩,及同学的个人信息
selectstudent.`name`,score.score,course.`name`fromstudent,score,course where student.id = score.student_id and score.course_id = course.id;

在这里插入图片描述

📕3. 外连接

外连接分为左外连接、右外连接和全外连接三种类型,因为MySQL不支持全外连接,所以本文不再介绍外连接部分。
• 左外连接:返回左表的所有记录和右表中匹配的记录。如果右表中没有匹配的记录,则结果集中对
应字段会显示为NULL。
• 右外连接:与左外连接相反,返回右表的所有记录和左表中匹配的记录。如果左表中没有匹配的记
录,则结果集中对应字段会显示为NULL。

-- 左外连接,表1完全显⽰
select 字段名 from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显⽰
select 字段 from 表名1 right join 表名2 on 连接条件;
  1. 查询没有参加考试的同学信息
select * from student left join score on student.id = score.student_id where score.score is null;

在这里插入图片描述

  1. 查询没有学生的班级
select * from student right join class on class.id = student.class_id where student.id is null;

在这里插入图片描述

📕4. 自连接

自连接是自己与自己取笛卡尔积,可以把行转化成列,在查询的时候可以使用where条件对结果进行过滤,以至于实现行与行之间的比较,在做自连接时要为表起别名(否则报错)。

--不为表指定别名
mysql> select * from score, score;
ERROR 1066 (42000): Not unique table/alias: 'score'--指定别名
mysql> select * from score s1, score s2;
  1. 显示所有"MySQL"成绩比"JAVA"成绩高的成绩信息
select s1.student_id as '学生',s1.score as 'MySQL',s2.score as 'JAVA' from (select * from score where  course_id = 3) as s1 ,(select * from score where course_id = 1 ) as s2 where s1.student_id = s2.student_id and s1.score > s2.score;

思路:先查出JAVA的成绩,在查出MYSQL的成绩,两张表分别各自包含JAVA和MYSQL成绩,然后进行连接,连接条件为表一与表二学生id相同,限制条件为MYSQL成绩大于JAVA成绩
在这里插入图片描述

📕5. 子查询

子查询是把⼀个SELECT语句的结果当做别一个SELECT语句的条件,也叫嵌套查询。

select * from table1 where condition [= |in]select * from where (......)
✏️5.1 单行子查询

示例: 查询与"不想毕业"同学的同班同学

select student.`name`,student.class_id from student  where class_id   = (select class_id from student where `name` = '不想毕业' ) and `name` != '不想毕业';

在这里插入图片描述

✏️5.2 多行子查询

示例:查询"MySQL"或"Java"课程的成绩信息

    select * from score where course_id in (select course.id from course where `name` = 'Java' or `name` = 'MySQL');

在这里插入图片描述
使用 not in 可以查询除了"MySQL"或"Java"课程的成绩

✏️5.3 多列子查询

单行子查询和多行子查询都只返回一列数据,多列子查询中可以返回多个列的数据,外层查询与嵌套的内层查询的列要匹配

示例:查询重复录入的分数

select *  from score where (score,student_id,course_id) in (select score,student_id,course_id from score group by score,student_id,course_id having count(*)>1);

在这里插入图片描述

✏️5.4 在from子句中使用子查询

当⼀个查询产生结果时,MySQL自动创建一个临时表,然后把结果集放在这个临时表中,最终返回
给用户,在from子句中也可以使用临时表进行子查询或表连接操作

示例:查询所有比"Java001班"平均分高的成绩信息

select * from score as s ,(select avg(score) as avg_score from score where student_id in ( select student_id from student where class_id = 1))  as tmp where s.score > tmp.avg_score;

在这里插入图片描述

📕6. 合并查询

为了合并多个select操作返回的结果,可以使⽤集合操作符 union,union all

-- 创建⼀个新表并初始化数据create table student1 like student;insert into student1 (name, sno, age, gender, enroll_date, class_id) values
('唐三藏', '100001', 18, 1, '1986-09-01', 1),
('刘备', '300001', 18, 1, '1993-09-01', 3),
('张⻜', '300002', 18, 1, '1993-09-01', 3),
('关⽻', '300003', 18, 1, '1993-09-01', 3);
✏️6.1 union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

示例:查询student表中 id < 3 的同学和student1表中的所有同学

select * from student where id<3 union select * from student1;

在这里插入图片描述

✏️6.2 union all

该操作符⽤于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

示例:查询student表中 id < 3 的同学和student1表中的所有同学

select * from student where id<3 union all select * from student1;

在这里插入图片描述

📕7. 插入查询结果

insert into 表名(列名1,列名2) select .....

示例:将student表中C++001班的学生复制到student1表中

insert into student1 (name, sno, age, gender, enroll_date, class_id)
select s.name, s.sno, s.age, s.gender, s.enroll_date, s.class_id
from student s, class c where s.class_id = c.id and c.name = 'C++001班';

在这里插入图片描述


文章转载自:

http://yM2WKzKw.tbhtr.cn
http://sctxkG3N.tbhtr.cn
http://9KLjg3KW.tbhtr.cn
http://cmQYhShr.tbhtr.cn
http://ZV4rCEfz.tbhtr.cn
http://w6Vx0Ykq.tbhtr.cn
http://d50snRbY.tbhtr.cn
http://fIndAiuB.tbhtr.cn
http://aARoxare.tbhtr.cn
http://WkWQGdr4.tbhtr.cn
http://Bitjfc2E.tbhtr.cn
http://GOLNRJb7.tbhtr.cn
http://YOYtriU4.tbhtr.cn
http://GmU7rVL1.tbhtr.cn
http://0Xon68ni.tbhtr.cn
http://Tp117U3C.tbhtr.cn
http://rqHGBa2H.tbhtr.cn
http://SmzSDtMf.tbhtr.cn
http://UtSnVVm3.tbhtr.cn
http://88mpVnt7.tbhtr.cn
http://gTFG25S6.tbhtr.cn
http://ZsbXFkXr.tbhtr.cn
http://9no8XF9D.tbhtr.cn
http://Yl9GBXK5.tbhtr.cn
http://2MTLWPoT.tbhtr.cn
http://MqVIN6Sl.tbhtr.cn
http://b0g5H6GI.tbhtr.cn
http://zjVFNFk6.tbhtr.cn
http://Gj7FbnaQ.tbhtr.cn
http://uFJYGL4W.tbhtr.cn
http://www.dtcms.com/wzjs/688107.html

相关文章:

  • 西安网站开发培训价格APP网站建设什么用处
  • 做网站主图多少钱简易网站建设
  • 重庆专业网站建设首页排名网站被攻击 是vps问题还是dz程序
  • 如何跳过网站会员门头沟富阳网站建设
  • 网站后台模板修改用什么软件用服务器如何做网站
  • 网站开发项目教程答案网站被域名重定向
  • 福田网站制作设计html静态网站怎么放在网站上
  • 企业网站托管一年多少钱做网站编辑有前途
  • 浙江省住房城乡建设厅网站怎么制作网站小游戏
  • 学校网站建设运行情况wordpress 攻击
  • 最新网站开发软件开发公司已经卖出生地
  • 学做网站能赚多少钱官方网站营销
  • 河北省住房和建设厅网站公司网站设计注意什么
  • 网站的分类有哪些晋中市住房保障和城乡建设局网站
  • 情人节网站源码下载宁波建设网 提取业务
  • 网站服务器建设方案莱芜区宣传部网站
  • 摄影作品网站有哪些滕州做网站的多少
  • 商务网站开发流程有三个阶段深圳安鸿源建设网站
  • 上海可以做网站的公司重庆做腋臭骑士网站
  • 国家拨款农村建设查询的网站安阳包装设计
  • 有什么网站可以做微信支付宝支付电子商务网站建设教学实施建设
  • 青岛 网站开发百度指数关键词
  • 网络科技加我qq是干嘛seo排名优化教学
  • 网站怎么上传数据库烟台市住房和城乡建设局网站
  • 在什么地方可以接到做网站的活wordpress共享插件
  • 网站建设什么科目廊坊做网站教程
  • 东莞网站推广的公司做网站开发很赚钱吗
  • 炫酷网站推荐网优 是什么网站
  • 商城类网站建设+数据库做英文网站 赚美元
  • 做响应式网站是不是都用rem如何使用万网主机建设网站