首页 > 数据库 >【MySQL练习】多表查询练习(二)

【MySQL练习】多表查询练习(二)

时间:2022-10-18 09:11:54浏览次数:42  
标签:deptId INSERT 多表 练习 dept VALUES emp MySQL id

查看代码:数据库和表数据创建
CREATE DATABASE `wudang`;
USE `wudang`;

CREATE TABLE `t_dept` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`deptName` VARCHAR(30) DEFAULT NULL,
`address` VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


CREATE TABLE `t_emp` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`age` INT(3) DEFAULT NULL,
`deptId` INT(11) DEFAULT NULL,
empno int not null,
PRIMARY KEY (`id`),
KEY `idx_dept_id` (`deptId`)
#没有设置外键
#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO t_dept(deptName,address) VALUES('华山','华山');
INSERT INTO t_dept(deptName,address) VALUES('丐帮','洛阳');
INSERT INTO t_dept(deptName,address) VALUES('峨眉','峨眉山');
INSERT INTO t_dept(deptName,address) VALUES('武当','武当山');
INSERT INTO t_dept(deptName,address) VALUES('明教','光明顶');
INSERT INTO t_dept(deptName,address) VALUES('少林','少林寺');
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('风清扬',90,1,100001);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('岳不群',50,1,100002);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('令狐冲',24,1,100003);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('洪七公',70,2,100004);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('乔峰',35,2,100005);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('灭绝师太',70,3,100006);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('周芷若',20,3,100007);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('张三丰',100,4,100008);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('张无忌',25,5,100009);
INSERT INTO t_emp(NAME,age,deptId,empno) VALUES('韦小宝',18,null,100010);

1.所有有门派的人员信息

inner join的效果和join是一样的

SELECT a.*
FROM t_emp a
INNER JOIN t_dept b ON a.deptId = b.id;

2.列出所有用户,并显示其门派信息

所有用户,包括没有门派的用户

SELECT *
FROM t_emp a
LEFT JOIN t_dept b ON a.deptId = b.id;

3.列出所有门派

SELECT * FROM t_dept;

4.所有不入门派的人员

SELECT a.*
FROM t_emp a
left JOIN t_dept b ON a.deptId = b.id
WHERE b.id IS NULL;

5.所有没人入的门派

SELECT
FROM t_dept a
LEFT JOIN t_emp b ON a.id = b.deptId
WHERE b.deptId IS NULL;

6.列出所有人员和机构的对照关系

使用full join 得到两张表的并集。
MySQL不支持full join,使用left join + union(可去除重复数据)+ right join达到该效果。

SELECT a.*,b.*
FROM t_emp a
LEFT JOIN t_dept b ON a.deptId = b.id
UNION
SELECT a.*,b.* 
FROM t_emp a
RIGHT JOIN t_dept b ON a.deptId = b.id;

image

7.列出所有没入派的人员和没人入的门派

SELECT a.*,b.*
FROM t_emp a
LEFT JOIN t_dept b ON a.deptId = b.id
WHERE b.id IS NULL
UNION
SELECT a.*,b.* 
FROM t_emp a
RIGHT JOIN t_dept b ON a.deptId = b.id
WHERE a.id IS NULL;

标签:deptId,INSERT,多表,练习,dept,VALUES,emp,MySQL,id
From: https://www.cnblogs.com/zhishu/p/16801447.html

相关文章

  • mysql事务隔离级别及MVCC 原理
    一、事务的隔离级别为了保证事务与事务之间的修改操作不会互相影响,innodb希望不同的事务是隔离的执行的,互不干扰。两个并发的事务在执行过程中有读读、读写(一个事务在读......
  • MYsql中BufferPool缓存机制
    1.当修改一条数据时,会将数据从磁盘文件中读入到缓存中,2.然后将此版本记录到undolog日志文件中生成版本链,便于回滚3.更新bufferpool中的数据4.将缓存的数据记录到redolog......
  • docker部署nacos配置mysql
    version:"3"services:mysql:restart:alwaysimage:mysql:latestcontainer_name:cloud_mysql......
  • springboot连接mysql报错errorCode 0, state 08S01
    前言许久未维护的项目需要检查一些数据,重新运行项目发现有createconnectionSQLException,具体报错信息是errorCode0,state08S01。SpringBoot版本2.5,MySQL8.0报......
  • mysql数据同步
    介绍如果在多个服务器上部署了系统,这时候可能就会用到数据库的同步。主服务器修改mysql的配置文件(my.conf或者my.ini):server-id=1log-bin=/var/log/mysql/logbin/mysql-binb......
  • MySQL的基本命令
    1.查看所有的数据库showdatabases();2.打开指定库use+库名;3.查看当前库的所有表showtables;4.查看其它库的所有表showtablesform+库名;5.创建一个......
  • linux安装mysql
    清理环境centos7会自带一个mariadb查看是否已安装rpm-qa|grep-imysqlrpm-qa|grep-imariadb(centos7默认系统自带的)mysql会和mariadb冲突删除mariadbrpm-em......
  • MySQL Cluster 介绍
    ​MySQLCluster介绍MySQLCluster是一个基于NDBCluster存储引擎的完整的分布式数据库系统。不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能。和OracleReal......
  • 数据挖掘专项练习
    联机事务处理(On-LineTransactionProcessing,OLTP):面向的是业务和运维人员,以应用为核心,是应用驱动的联机分析处理(On-LineAnalyticalProcessing,OLAP):面向决策人员和高层......
  • MySQL安装教程
    一、准备MySQL官网下载解压安装包二、配置环境变量依次打开此电脑->属性->高级系统设置->环境变量在系统变量path中添加自己的mysql\bin路径我的路径:D:\Mysql\mys......