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

山东做网站的公司有哪些发布消息做任务的网站

山东做网站的公司有哪些,发布消息做任务的网站,营销型网站的分类,北京最大的互联网公司目录 1、笛卡尔积 2、联合查询 2.1、内连接 2.2、外连接 1、笛卡尔积 笛卡尔积: 笛卡尔积是让两个表通过排列组合的方式,得到的一个更大的表。笛卡尔积的列数,是这两个表的列数相加,笛卡尔积的行数,是这两个表的行…

目录

1、笛卡尔积

2、联合查询

2.1、内连接

2.2、外连接


1、笛卡尔积

笛卡尔积:

笛卡尔积是让两个表通过排列组合的方式,得到的一个更大的表。笛卡尔积的列数,是这两个表的列数相加,笛卡尔积的行数,是这两个表的行数相乘

观察发现,其中有一些数据,是无意义的数据,上图中,当表1的id和表2的student_ID相等时,才是有意义的数据

笛卡尔积,是简单无脑的排列组合,把所有可能的情况都穷举了一遍,包含一些合法的数据也包含非法的无意义的数据。进行多表查询的时候,就需要把有意义的数据筛选出来,无意义的数据过滤掉

2、联合查询

设计数据时把表进行拆分,为了消除表中的字段的依赖关系,比如部分函数依赖,传递依赖。这时会导致一条SQL查出来的数据,对于业务来说是不完整的,我们就可以使用联合查询把关系中的数据全部查出来,在一个数据行中显示详细信息

create table class(class_id bigint primary key auto_increment, name varchar(50)
);
create table student (id bigint primary key auto_increment,name varchar(50) not null,class_id bigint
);
insert into class (name) values ('1班'), ('2班'), ('3班');
insert into student (name, class_id) values('张三',1), ('李四',1), ('王五',2), ('赵六',3);

 

联合查询时MYSQL是如何执行的?

1. 取多张表的笛卡尔积

语法:

select * from 表名,表名;

两张表取笛卡尔积之后,有些数据是无效数据

2. 通过连接条件过滤掉无效数据
两个表之间是有主外键关系的,只需要判断两个表中主外键字段是否相等即可

select * from student, class where student.class_id = class.class_id;

3. 能过指定列查询,来精减结果集
查询列表中通过 表名.列名 的方式指定要查询字段

select student.id, student.name, class.name from student, class
where student.class_id = class.class_id;

通过给表名起别名的方式来简化SQL语句(建议使用这种方式)

总结:

联合查询也叫表连接查询
1. 首先确定哪几张表要参与查询
2. 根据表与表之间的主外键关系,确定过滤条件
3. 精减查询字段,得到想要的结果

2.1、内连接

上述联合查询的过程就是内连接

语法:

第一个是标准的内连接的写法,其中 inner 可以省略

第二个就是上述联合查询的案例

上述的几种写法,选一个合适的就行,一般 where 这种用得更多

案例: 

DROP TABLE IF EXISTS `score`;
DROP TABLE IF EXISTS `student`;
DROP TABLE IF EXISTS `class`;
DROP TABLE IF EXISTS `course`;-- ----------------------------
-- Table structure for class
-- ----------------------------CREATE TABLE `class`  (`class_id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`class_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES (1, '计算机系2019级1班');
INSERT INTO `class` VALUES (2, '中文系2019级3班');
INSERT INTO `class` VALUES (3, '自动化2019级5班');-- ----------------------------
-- Table structure for course
-- ----------------------------CREATE TABLE `course`  (`course_id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`course_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, 'Java');
INSERT INTO `course` VALUES (2, '中国传统文化');
INSERT INTO `course` VALUES (3, '计算机原理');
INSERT INTO `course` VALUES (4, '语文');
INSERT INTO `course` VALUES (5, '高阶数学');
INSERT INTO `course` VALUES (6, '英文');-- ----------------------------
-- Table structure for student
-- ----------------------------CREATE TABLE `student`  (`student_id` bigint NOT NULL AUTO_INCREMENT,`sn` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`mail` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,`class_id` bigint NULL DEFAULT NULL,PRIMARY KEY (`student_id`) USING BTREE,UNIQUE INDEX `sn`(`sn` ASC) USING BTREE,INDEX `class_id`(`class_id` ASC) USING BTREE,CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`class_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '09982', '黑旋风李逵', 'xuanfeng@qq.com', 1);
INSERT INTO `student` VALUES (2, '00835', '菩提老祖', NULL, 1);
INSERT INTO `student` VALUES (3, '00391', '白素贞', NULL, 1);
INSERT INTO `student` VALUES (4, '00031', '许仙', 'xuxian@qq.com', 1);
INSERT INTO `student` VALUES (5, '00054', '不想毕业', NULL, 1);
INSERT INTO `student` VALUES (6, '51234', '好好说话', 'say@qq.com', 2);
INSERT INTO `student` VALUES (7, '83223', 'tellme', NULL, 2);
INSERT INTO `student` VALUES (8, '09527', '老外学中文', 'foreigner@qq.com', 2);-- ----------------------------
-- Table structure for score
-- ----------------------------CREATE TABLE `score`  (`score_id` bigint NOT NULL AUTO_INCREMENT,`student_id` bigint NULL DEFAULT NULL,`course_id` bigint NULL DEFAULT NULL,`score` decimal(5, 2) NULL DEFAULT NULL,PRIMARY KEY (`score_id`) USING BTREE,INDEX `student_id`(`student_id` ASC) USING BTREE,INDEX `course_id`(`course_id` ASC) USING BTREE,CONSTRAINT `score_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,CONSTRAINT `score_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `course` (`course_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (1, 1, 1, 70.50);
INSERT INTO `score` VALUES (2, 1, 3, 98.50);
INSERT INTO `score` VALUES (3, 1, 5, 33.00);
INSERT INTO `score` VALUES (4, 1, 6, 98.00);
INSERT INTO `score` VALUES (5, 2, 1, 60.00);
INSERT INTO `score` VALUES (6, 2, 5, 59.50);
INSERT INTO `score` VALUES (7, 3, 1, 33.00);
INSERT INTO `score` VALUES (8, 3, 3, 68.00);
INSERT INTO `score` VALUES (9, 3, 5, 99.00);
INSERT INTO `score` VALUES (10, 4, 1, 67.00);
INSERT INTO `score` VALUES (11, 4, 3, 23.00);
INSERT INTO `score` VALUES (12, 4, 5, 56.00);
INSERT INTO `score` VALUES (13, 4, 6, 72.00);
INSERT INTO `score` VALUES (14, 5, 1, 81.00);
INSERT INTO `score` VALUES (15, 5, 5, 37.00);
INSERT INTO `score` VALUES (16, 6, 2, 56.00);
INSERT INTO `score` VALUES (17, 6, 4, 43.00);
INSERT INTO `score` VALUES (18, 6, 6, 79.00);
INSERT INTO `score` VALUES (19, 7, 2, 80.00);
INSERT INTO `score` VALUES (20, 7, 6, 92.00);

 

(1)查询 “许仙” 同学的 成绩

select student.name, score.score from student, score where
student.student_id = score.student_id and student.name = '许仙';

五个步骤:

1. 确定查询中涉及到哪些表
2. 对目标表取笛卡尔积
3. 确定连接条件
4. 确定对整个结果集的过滤条件
5. 精减查询字段

(2)查询所有同学的总成绩,及同学的个人信息

1. 确定要参与查询的表是 学生表成绩表

总成绩要用分组查询 group by,搭配聚合函数 sum()

3. 确定两张表之间关联关系
student.student_id = score.student_id

4. 按学生的ld进行分组,并在查询列表中,使用聚合函数sum(分数),计算总分

5. 在查询列表中精减和确定要查询的列

selectst.student_id,stu.name,sum(sc.score) as 总分
fromstudent st, score sc where st.student_id = sc.student_id
group bysc.student_id

(3)查询所有同学的每门课的成绩,及同学的个人信息

1. 确定要参与查询的表
学生表、成绩表、课程表

2.3. 取笛卡尔积、确定表与表之间的连接条件(可以通过表结果查看连接条件)

student.student_id = score.student_id

course.course_id = score.course_id

4. 确定查询的过滤条件where

不需要

5. 精减查询字段

使用 join on 的方式进行查询:

2.2、外连接

外连接分为左外连接、右外连接和全外连接三种类型,MySQL不⽀持全外连接。
• 左外连接:返回左表的所有记录和右表中匹配的记录。如果右表中没有匹配的记录,则结果集中对应字段会显示为NULL。
• 右外连接:与左外连接相反,返回右表的所有记录和左表中匹配的记录。如果左表中没有匹配的记录,则结果集中对应字段会显示为NULL。
• 全外连接:结合了左外连接和右外连接的特点,返回左右表中的所有记录。如果某⼀边表中没有匹配的记录,则结果集中对应字段会显示为NULL。

以下图两张表为例:

使用内连接时没有4班的数据

使用右外连接,会以 join 右边的表为基准,这个表中的数据会全部显示出来。左边的表没有与之匹配的记录全部用NULL去填充

在student表中插入一个class表中没有的数据,使用左外连接


再用回之前的案例:

“ 老外学中文” 在学生表中存在,在成绩表中不存在


查询哪位同学没有考试成绩
1. 在同学表中有记录
2. 在分数表中没有该同学对应的记录

select * from student st left join score sc on st.student_id = sc.student_id;

进一步筛选:

select * from student st left join score sc on st.student_id = sc.student_id where sc.score_id is null;

http://www.dtcms.com/wzjs/785631.html

相关文章:

  • 网站建设报告家教总结眼科医院网站设计怎么做6
  • 南阳做网站多少费用wordpress 添加登录界面
  • seo优化网站多少钱排名优化网站建设
  • 做承诺的网站网上商城系统模板
  • 网站开发流程需要用到的语言网站推广服务公司
  • wordpress文章标题总有网站名教务管理系统可行性研究报告
  • 网站安全检测软件装修公司展厅效果图设计图片
  • 网站要怎么备案html写手机网站吗
  • 宝塔面板wordpress多站点wordpress上传图片错误媒体库错误
  • 规划院网站建设书公司单页设计
  • 南昌网站建设制作与维护wordpress 主题 积分
  • app源码网站注册网站流程及资料
  • 俄罗斯女孩制作论文网站兰州网络推广服务合同
  • 美食网站开发的难点做兼职比较好的网站有哪些
  • 做影视网站能赚到钱吗代理小程序项目
  • 开网站的宣传图片怎么做外包加工活
  • 做网站 多页面网址怎么弄做网站的分页查询
  • 网站建设刂搜金手指下拉贰肆浙江省邮电工程建设有限公司网站
  • 网站扫码怎么做的传奇游戏排行榜
  • 门户网站建设安全管理制度做品牌网站的
  • 网站建设全包哪家便宜电商首页模板网站
  • 镇江网站建设制作wordpress自适应博客主题
  • 为网站 做字幕网页升级中每天自动更新什么意思
  • 网站建设的步骤教程下载互联网广告代理加盟
  • 资海网络一年做多少网站深圳保障房申请条件2022
  • 中德合作项目seo网络推广技巧
  • 网站备案弊端阿里云部署wordpress
  • 鸿基建设工程有限公司网站免费商城
  • tomcat 建网站怎么样做网站优化
  • 推广赚钱的软件排行苏州优化亚当