IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql数据库的常用操作>>三--->划重点 -> 正文阅读

[大数据]Mysql数据库的常用操作>>三--->划重点

目录

一、多表联查

1、准备数据(此数据借用我的老师霞霞的数据)

2、多表联查三种方式

1)笛卡尔积:语法select * from 表名1,表名2,表名3

2)连接查询

3)子查询

3、测试

总结


一、多表联查

1、准备数据(此数据借用我的老师霞霞的数据)

SHOW DATABASES;
USE lab;
SHOW TABLES;
CREATE TABLE dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(13)
);

CREATE TABLE emp(
empno INT,
ename VARCHAR(10),
job VARCHAR(10),
mgr INT,
hiredate DATETIME,
sal DOUBLE,
 comm NUMERIC(8,2),
deptno INT
);


SET NAMES gbk; #防止中文乱码
INSERT INTO dept VALUES(1,'java开发部','一区');
INSERT INTO dept VALUES(2,'research','二区');
INSERT INTO dept VALUES(1,'operations','二区');
INSERT INTO emp VALUES(100,'jack','副总',NULL,'2002-05-1',90000,NULL,1);
INSERT INTO emp VALUES(200,'tony','总监',100,'2015-02-02',10000,2000,2);
INSERT INTO emp VALUES(300,'hana','经理',200,'2017-02-02',8000,1000,2);
INSERT INTO emp VALUES(400,'leo','员工',300,'2019-02-22',3000,200.12,2);
INSERT INTO emp VALUES(500,'liu','员工',300,'2019-03-19',3500,200.58,2);


CREATE TABLE courses
(
cno VARCHAR(5) NOT NULL,
cname VARCHAR(10) NOT NULL,
tno VARCHAR(3) NOT NULL,
PRIMARY KEY (cno)
);

CREATE TABLE scores(
sno VARCHAR(3) NOT NULL,
cno VARCHAR(5) NOT NULL,
degree NUMERIC(10,1) NOT NULL,
PRIMARY KEY (sno, cno)
);
CREATE TABLE students(
sno VARCHAR(3) NOT NULL, 
sname VARCHAR(4) NOT NULL,
ssex VARCHAR(2) NOT NULL,
sbirthday DATETIME, 
class VARCHAR(5), 
PRIMARY KEY (sno)
);
CREATE TABLE teachers(
tno VARCHAR(3) NOT NULL,
tname VARCHAR(4),
tsex VARCHAR(2),
tbirthday DATETIME,
prof VARCHAR(6),
depart VARCHAR(10),
PRIMARY KEY (tno)
);

INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,'曾华' ,'男' ,'1977-09-01',95033);
 
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,'匡明' ,'男' ,'1975-10-02',95031);
 
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,'王丽' ,'女' ,'1976-01-23',95033);
 
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,'李军' ,'男' ,'1976-02-20',95033);
 
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,'王芳' ,'女' ,'1975-02-10',95031);
 
INSERT INTO STUDENTS (SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,'陆君' ,'男' ,'1974-06-03',95031);
 
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (804,'易天','男','1958-12-02','副教授','计算机系');
 
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (856,'王旭','男','1969-03-12','讲师','电子工程系');
 
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (825,'李萍','女','1972-05-05','助教','计算机系');
 
INSERT INTO TEACHERS(TNO,TNAME,TSEX,TBIRTHDAY,PROF,DEPART) VALUES (831,'陈冰','女','1977-08-14','助教','电子工程系');
 
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-105' ,'计算机',825);
 
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('3-245' ,'操作系统' ,804);
 
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('6-166' ,'模拟电路' ,856);
 
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('6-106' ,'概率论' ,831);
 
INSERT INTO COURSES(CNO,CNAME,TNO)VALUES ('9-888' ,'高等数学' ,831);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-245',86);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-245',75);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-245',68);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (103,'3-105',92);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (105,'3-105',88);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (109,'3-105',76);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'3-105',64);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'3-105',91);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'3-105',78);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (101,'6-166',85);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (107,'6-106',79);
 
INSERT INTO SCORES(SNO,CNO,DEGREE)VALUES (108,'6-166',81);

2、多表联查三种方式

1)笛卡尔积:语法select * from 表名1,表名2,表名3

2)连接查询

3)子查询

3、测试

注意:如果表数据不对,想想数据库是否设置编码格式,或者删除重新输入数据,输入时规定编码格式

ALTER TABLE 表名 CONVERT TO CHARACTER SET utf #将表和字段的编码格式都改成utf8的编码格式

###方式一:笛卡尔积,通过逗号连接表名
#dept部门表deptno部门编号,dname部门名,loc部门所在区域
#emp员工信息表deptno部门编号,comm奖金,sal工资,hiredate入职时间,job职位,ename员工姓名
#查询部门编号是1的部门信息和员工信息
#思路两张表共同字段部门编号,所以利用这点查询表
SELECT * FROM dept,emp WHERE dept.deptno=emp.deptno AND dept.deptno=2;
#查询员工姓名叫jack的部门信息
SELECT dept.* FROM dept,emp WHERE dept.deptno=emp.deptno AND  emp.ename='jack';
#查询岗位是总监所在的部门信息 
SELECT dept.* FROM dept,emp WHERE dept.deptno=emp.deptno AND job='总监';
####方式二:连接查询,分为三种
#内连接inner join:取两张表的交集
#左连接:left join:取左表的所有和右表满足条件的
#右连接:right join:取右表的所有和左表满足条件的
#查询岗位是总监所在的部门信息
SELECT dept.* FROM dept JOIN emp ON dept.deptno=emp.deptno WHERE emp.job='总监';
#查询员工姓名叫jack的部门信息  
SELECT dept.* FROM dept JOIN emp ON dept.deptno=emp.deptno WHERE emp.ename='jack';
#三种连接查询:inner join/left join/right join
#inner join   inner 可以省略取两张都满足条件后的交集
SELECT * FROM dept INNER JOIN emp ON emp.deptno=dept.deptno;




#综合练习1:查询陈冰老师能讲解的课程的名称(teachers/courses)
#笛卡尔积方式
SELECT courses.cname FROM courses,teachers WHERE teachers.tno=courses.tno AND teachers.tname='陈冰';
#连接查询方式
SELECT courses.cname FROM courses INNER JOIN teachers ON courses.tno=teachers.tno  WHERE teachers.tname='陈冰';

查询学员李军的总得分(students/scores)
#笛卡尔积方式
SELECT SUM(degree) FROM scores,students WHERE scores.sno=students.sno AND students.sname='李军';
#连接查询
SELECT SUM(degree) FROM scores JOIN students ON scores.sno=students.sno WHERE students.sname='李军';
###方式三:子查询/嵌套查询:把上次查询结果作为这次的查询条件
#练习1:查询学员李军的总得分(students/scores)
SELECT SUM(degree) FROM scores WHERE sno=(SELECT sno FROM students WHERE students.sname='李军');
#练习2:查询陈冰老师能讲解的课程的名称(teachers/courses)
SELECT cname FROM courses WHERE tno=(SELECT tno FROM teachers WHERE tname='陈冰');

总结

????????此节主要介绍了多表联查,多表联查是项目中常用到的所以必须精通,主要有三种查询方式、笛卡尔积,连接查询以及子查询,连接查询是最常用的,inner join 中的inner可以省略

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:32:57  更:2021-12-24 18:33:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:38:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码