MySQL笔记——多表查询

多表查询不能使用 SELECT * from emp, dept; 会产生笛卡尔积。
笛卡尔积,有A,B两个集合,A中有5条信息,B中有4条信息,那么查询结果就是5*4=20条

一、内连接查询

		-- 隐式内连接SELECT 字段列表 FROM 表1,表2,… WHERE 条件;例:select emp.name,emp.age,dept.dep_name from emp,dept where emp.dep_id = dept.id;可以给表起别名将上面的语句转换成下面这种。select t1.name,t1.age,t2.dep_name from emp t1,dept t2 where t1.dep_id = t2.id;

在这里插入图片描述

		-- 显示内连接SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;如:select emp.name,dept.dep_name from emp inner join dept on emp.dep_id = dept.id;可以给表起别名将上面的语句转换成下面这种。select t1.name,t2.dep_name from emp t1 inner join dept t2 on t1.dep_id = t2.id;

在这里插入图片描述

二、外连接查询

		(1)左外连接:相当于查询A表所有数据和交集部分数据左外连接:SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;select * from emp left join dept on emp.dep_id = dept.id;

在这里插入图片描述

		(2)右外连接:相当于查询B表所有数据和交集部分数据右外连接:SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;select * from emp right join dept on emp.dep_id = dept.id;

在这里插入图片描述

三、子查询

		(1)子查询概念查询中嵌套查询,称嵌套查询为子查询;(2)子查询根据查询结果不同,作用不同:①单行单列:作为条件值,使用 '='  '!='  '>'  '<'等进行条件判断SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);查询年龄大于周八的select * from emp where age>(select age from emp where name = '周八');

在这里插入图片描述

			②多行单列:作为条件值,使用in关键字进行条件判断SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);查询研发和销售的所有员工信息select * from emp where dep_id in (select id from dept where dep_name = '研发部' or dep_name = '销售部' );

在这里插入图片描述

			③多行多列:作为虚拟表SELECT 字段列表 FROM (子查询) WHERE 条件;-- 查询入职日期是‘1998-08-01’之后的员工信息和部门信息把(SELECT * from emp WHERE join_date>'1998-08-01')这个多行多列表作为虚拟表查询放到from后面SELECT * FROM (SELECT * from emp WHERE join_date>'1998-08-01') t1,dept WHERE t1.dep_id = dept.id;

在这里插入图片描述

四、练习

新建员工表,部门表,职务表,工资等级表
1.查询所有员工信息。查询员工编号id,员工姓名ename,工资salary,职务名称jname,职务描述description
2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
3.查询员工姓名,工资,工资等级
4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
5.查询出部门编号、部门名称、部门位置、部门人数具体步骤如下:首先新建四张表:
-- 部门表
CREATE TABLE dept ( id INT PRIMARY KEY auto_increment, -- 部门iddname VARCHAR ( 50 ), -- 部门名称loc VARCHAR ( 50 ) -- 部门所在地
);
-- 职务表,职务名称,职务描述
CREATE TABLE job ( id INT PRIMARY KEY,  -- 职务idjname VARCHAR ( 20 ),  -- 职务名称description VARCHAR ( 50 ) -- 职务描述
);
-- 员工表
CREATE TABLE emp (id INT PRIMARY KEY,-- 员工idename VARCHAR ( 50 ),-- 员工姓名job_id INT,-- 工作编号mgr INT,-- 上级领导joindate DATE,	-- 入职日期salary DECIMAL ( 7, 2 ),	-- 工资bonus DECIMAL ( 7, 2 ),-- 奖金dept_id INT,	-- 所在部门编号CONSTRAINT fk_emp_jobid_job_id FOREIGN KEY ( job_id ) REFERENCES job ( id ),CONSTRAINT fl_emp_deptid_dept_id FOREIGN KEY ( dept_id ) REFERENCES dept ( id ) 
);
-- 工资等级表
CREATE TABLE salarygrade ( grade INT PRIMARY KEY, -- 界别losalary INT, -- 最低工资hisalary INT -- 最高工资
);
添加数据:
-- 添加4个部门
INSERT INTO dept ( id, dname, loc )
VALUES( 10, '教研部', '北京' ),( 20, '学工部', '上海' ),( 30, '销售部', '广州' ),( 40, '财务部', '深圳' );
-- 添加4个职务
INSERT INTO job ( id, jname, description )
VALUES( 1, '董事长', '管理整个公司,接单' ),( 2, '经理', '管理部门员工' ),( 3, '销售员', '向客人推销产品' ),( 4, '文员', '使用办公软件' );
-- 添加员工
INSERT INTO emp ( id, ename, job_id, mgr, joindate, salary, bonus, dept_id )
VALUES( 1001, '孙悟空', 4, 1004, '2000-12-17', '8000.00', NULL, 20 ),( 1002, '卢俊义', 3, 1006, '2001-02-10', '16000.00', 3000.00, 30 ),( 1003, '林冲', 3, 1006, '2001-02-22', '12500.00', 5000.00, 30 ),( 1004, '唐僧', 2, 1009, '2001-04-02', '29750.00', NULL, 20 ),( 1005, '李逵', 4, 1006, '2001-09-17', '12500.00', 14000.00, 30 ),( 1006, '宋江', 2, 1009, '2001-05-17', '28500.00', NULL, 30 ),( 1007, '刘备', 2, 1009, '2001-09-17', '24500.00', NULL, 10 ),( 1008, '猪八戒', 4, 1004, '2007-12-17', '30000.00', NULL, 20 ),( 1009, '罗贯中', 1, NULL, '2000-12-17', '50000.00', NULL, 10 ),( 1010, '吴用', 3, 1006, '2001-09-17', '15000.00', '0.00', 30 ),( 1011, '沙僧', 4, 1004, '2007-05-17', '11000.00', NULL, 20 ),( 1012, '李逵', 4, 1006, '2001-12-03', '9500.00', NULL, 30 ),( 1013, '小白龙', 4, 1004, '2001-12-03', '30000.00', NULL, 20 ),( 1014, '关羽', 4, 1007, '2002-01-12', '13000.00', NULL, 10 );
-- 添加工资等级
INSERT INTO salarygrade ( grade, losalary, hisalary )
VALUES( 1, 7000, 12000 ),( 2, 12010, 14000 ),( 3, 14010, 20000 ),( 4, 20010, 30000 ),( 5, 30010, 99990 );
1.查询所有员工信息。查询员工编号id,员工姓名ename,工资salary,职务名称jname,职务描述description
-- 1.查询所有员工信息。查询员工编号id,员工姓名ename,工资salary,职务名称jname,职务描述description
/*
分析:
1.员工编号id,员工姓名ename,工资salary 在emp表中
2.职务名称jname,职务描述description,在职务表中
3.职务表和员工表是一对多的关系 e.job_id = j.id
通过内连接可完成
*/
-- 隐式内连接
SELECTemp.id,emp.ename,emp.salary,job.jname,job.description 
FROMemp,job 
WHEREemp.job_id = job.id;
-- 显示内连接
SELECTemp.id,emp.ename,emp.salary,job.jname,job.description 
FROMempINNER JOIN job ON emp.job_id = job.id;
2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
/*
分析:
1.员工编号,员工姓名,工资,在emp表中
2.职务名称,职务描述,在job表中
3.部门名称,部门位置,在dept表中
4.职务表和员工表是一对多的关系 e.job_id = j.id
5.部门表和员工表是一对多的关系 e.dept_id = d.id
*/
-- 隐式内连接
SELECTemp.id,emp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc 
FROMemp,job,dept 
WHEREemp.job_id = job.id AND emp.dept_id = dept.id;-- 显示内连接
SELECTemp.id,emp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc 
FROMempINNER JOIN job ON emp.job_id = job.idINNER JOIN dept ON emp.dept_id = dept.id;
3.查询员工姓名,工资,工资等级
-- 3.查询员工姓名,工资,工资等级
/*1.员工姓名,工资,emp2.工资等级,salarygrade3. salarygrade.losalary < emp.salary AND salarygrade.hisalary >  emp.salary
*/SELECTemp.ename,emp.salary,s.grade 
FROMemp,salarygrade s 
WHEREemp.salary >= s.losalary AND emp.salary <= s.hisalary;
4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
/*1.员工姓名,工资,emp2.职务名称,职务描述,job3.部门名称,部门位置,dept4.工资等级,salarygrade5.职务表和员工表是一对多的关系 e.job_id = j.id6.部门表和员工表是一对多的关系 e.dept_id = d.id7.salarygrade.losalary < emp.salary AND salarygrade.hisalary >  emp.salary
*/
-- 隐式内连接
SELECTemp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc,s.grade 
FROMemp,job,dept,salarygrade s 
WHEREemp.job_id = job.id AND emp.dept_id = dept.id AND emp.salary >= s.losalary AND emp.salary <= s.hisalary;-- 显式内连接	
SELECTemp.id,emp.ename,emp.salary,job.jname,job.description,dept.dname,dept.loc 
FROM
empINNER JOIN job ON emp.job_id = job.idINNER JOIN dept ON emp.dept_id = dept.idINNER JOIN salarygrade s ON emp.salary >= s.losalary AND emp.salary <= s.hisalary;
5.查询出部门编号、部门名称、部门位置、部门人数
-- 5.查询出部门编号、部门名称、部门位置、部门人数
/*1.部门编号、部门名称、部门位置,dept2.部门人数,按照dept_id,进行GROUP BY分组,count(*) 统计人数*/
-- 1.先在emp表中分组并统计人数,2.然后将1中产生的表作为子查询使用
SELECTdept.*,t1.total 
FROMdept,(SELECT dept_id, count( * ) total FROM emp GROUP BY dept_id ) t1 
WHEREt1.dept_id = dept.id;-- 第二种方法,先把员工和部门关联起来,然后按照部门id分组,并统计人数
SELECTcount( * ),t.* 
FROM( SELECT dept.* FROM emp, dept WHERE emp.dept_id = dept.id ) t 
GROUP BYt.id;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遇见王沥川的人生感悟_23岁酱油泡饭默默无闻,31岁逆袭人生,王彦霖有何魅力?...

文/小白说娱S姐 原创精品&#xff0c;请勿转载如果兜里只剩下1块钱&#xff0c;生活所迫你会怎样过&#xff1f;王彦霖23岁刚毕业熬过了1元危机&#xff0c;他永远都不会想到当年咬牙坚持熬成就了如今的综艺诸葛。《元气满满的哥哥》连播六期多次排名第一&#xff0c;成为芒果台…

antd vue form 手动校验_参与《开课吧》vue训练营笔记(Day1)

大神说的目标&#xff1a;Vue 挑战20k组件间通信component 官网 详解组件间的传递方式&#xff1a;父传子 直接属性传递子传父 this.$emit 时间传递兄弟组件 利用父组件搭桥组件和子孙 provide / inject子孙 -> 祖先 this.$dispatch 或provide 获取组件元素实例$listeners $…

MySQL笔记——打开日志

在my.ini文件中输入如下命令&#xff1a;log_outputFILE general_logon general_log_file"D:\\SoftwareTools\\Mysql\\mysqllog\\mysql.log" slow_query_logon long_query_time 2 slow_query_log_file"D:\\SoftwareTools\\Mysql\\mysqllog\\mysql_slow.log"…

链表怎么输出最后一个元素无空格_剑指offer系列----从尾到头打印链表

从尾到头打印链表信息卡片时间&#xff1a;2020-03-23题目&#xff1a;从尾到头打印链表tag&#xff1a;list题目描述输入一个链表&#xff0c;按链表从尾到头的顺序返回一个 ArrayList。01调用 reverse 函数解题思路这是一种简单粗暴的解法。先遍历一遍链表&#xff0c;在遍历…

EntiyFramework :Update model from database引起的两个问题

EntiyFramework一大特点就是Code first&#xff0c;但难免有时候因特殊原因需要Update model from database。此次使用该功能时遇到两个问题&#xff0c;且记之。 [问题一] Error 3027: No mapping specified for the following EntitySet/AssociationSet - XXXXXXX. [起因] 在…

MySQL笔记——JDBC入门

&#xff08;一&#xff09;JDBC简介 JDBC概念&#xff1a;&#xff08;1&#xff09;JDBC就是使用Java语言操作关系型数据库的一套API&#xff08;2&#xff09;全称&#xff1a;&#xff08;Java DataBase Connectivity&#xff09;Java数据库连接&#xff08;二&#xff09;…

Maven笔记——maven下载与配置

&#xff08;一&#xff09;Maven简介 Apache Maven是一个项目管理和构建的工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;的概念。通过一小段描述信息来管理项目的构建&#xff0c;报告和文档。○ 项目对象模型○ 依赖管理模型○ 插件• 仓库分类&#xff1a…

Telerik Reporting之生成报表

本文为原创文&#xff0c;难免会有一些小得瑕疵&#xff0c;敬请谅解。所有示例均是博主测试过的&#xff0c;如有转载请标明出处&#xff0c;谢谢。第一步&#xff1a;建立一个普通类库。 第二步&#xff1a;在此类库中&#xff0c;新建项——Telerik Report报表。 第三步&…

Maven笔记——依赖管理

使用坐标导入jar包1) 在pom.xml中编写<dependencies>标签2) 在<dependencies>标签中使用<dependency>引入坐标3) 定义坐标的groupId、artifactId、version<dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->…

android 4.2以上版本永不休眠

android4.2以上版本比android4.2以前的版本framework层框架部分有了很大的改变&#xff0c;androd4.2以前版本framework层给上的接口函数与android4.2以上版本的接口函数也有了些变化&#xff0c;以前让机器永不休眠的方法用在android4.2以上版本已经不起作用了。现将android4.…

Mybatis笔记——Mybatis入门

&#xff08;一&#xff09;MyBatis快速入门 通过一个案例快速入门Mybatis框架案例&#xff1a;查询user表中所有数据1) 创建user表&#xff0c;添加数据2) 创建模块&#xff0c;导入坐标3) 编写MyBatis核心配置文件-->替换连接信息&#xff0c;解决硬编码问题4) 编写SQL映…

POJ-3693 Maximum repetition substring 后缀数组

题目链接&#xff1a;http://poj.org/problem?id3693 求字符串的重复次数最多的且字典序最小的字串。 很不错的题目。罗穗骞大牛论文的模板题&#xff0c;摘了Neo / Add ~0U>>1大牛的详细题解&#xff0c;如下&#xff1a; 首先求第一问最大重复数。从N的范围来看O(N^2)…

python nlp_Python NLP入门教程

本文简要介绍Python自然语言处理(NLP)&#xff0c;使用Python的NLTK库。NLTK是Python的自然语言处理工具包&#xff0c;在NLP领域中&#xff0c;最常使用的一个Python库。 什么是NLP&#xff1f; 简单来说&#xff0c;自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服…

python安装后cmd找不到_关于Python3.6环境中,virtualenv找不到命令的解决方法

今天收到一个网友的提问,说是,已经安装好了,Python3.6,系统环境变量也检查过,没有问题,在系统CMD命令行窗口,输入python可以返回当前安装的python环境的版本号,如下图python3.6 也测试了pip安装程序,也是正常的,然后用pip install virtualenv 安装虚拟环境,整个过程也没有报错,…

Mybatis占位符问题—ReflectionException: There is no getter for property named xxx

使用${}占位符时&#xff08;PS&#xff1a;一般都使用#{}&#xff0c;不建议使用${}&#xff09;&#xff0c;发现xml文件中的SQL语句使用了$后会报错&#xff1a;具体情况如下&#xff1a;解决方案如下&#xff1a;在参数前加上Param("id")注解

kamailio,asteisk,realtime 实现负载均衡(集群)完整配置笔记

环境 负载均衡数据库服务器 Centos-5.4 kamailio-3.1.4 mysql-5.0.77-4.el5_6.6 IP:192.168.1.30 asterisk服务器1 Centos-5.4 asterisk-1.8 IP:192.168.1.31 asterisk服务器2 Centos-5.4 asterisk-1.8 IP:192.168.1.32 目的 1&#xff1a;假设一个简易的asterisk 集…

maven依赖 spark sql_window环境运行spark-xgboost 8.1踩到的坑

在window 环境下使用spark - xgboost会出现一些问题&#xff0c;这里记录一下。环境&#xff1a;window 7 spark 2.31 xgboost 8.1 idea maven一.依赖以及代码数据集下载地址UCI Machine Learning Repository: Iris Data Set​archive.ics.uci.edupom依赖<!-- https://m…

python书籍排行榜前十名_学习Python,这些书你看过几本?

Python是一门简单&#xff0c;强大的计算机编程语言。Python书也是种类繁多&#xff0c;对于初学者选择合适的学习书籍是很有必要的。 1、Python编程&#xff1a;从入门到实践 全书分两部分&#xff1a;第一部分介绍用Python编程所必须了解的基本概念&#xff1b;第二部分将理论…

MyBatis笔记——配置文件完成增删改查

l 完成品牌数据的增删改查操作 要完成的功能列表清单&#xff1a;□ 查询 查询所有数据 查看详情 条件查询□ 添加□ 修改 修改全部字段 修改动态字段□ 删除 删除一个 批量删除准备环境&#xff1a; 数据库表tb_branddrop table if exists tb_brand;CREATE TABLE tb_brand(--…

web——Tomcat Maven插件及Servlet入门

• IDEA中使用Tomcat-Tomcat Maven插件 ○ Pom.xml添加Tomcat插件<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!--&…