文档章节

mysql多表

meshwon
 meshwon
发布于 2016/06/10 19:56
字数 522
阅读 5
收藏 0

1,创建员工表

create table emp(
    e_id int primary key,
    e_name varchar(20) not null,
    e_sal double(10,2)
);

2.创建部门表

create table dept(
   d_id int primary key,
   d_name varchar(20) not null
);

3.创建了两表以后,需要了解两个表之间的关系,显然,员工与部门表之间的关系是多对一的。另外一个问题就是:在应用中经常查的表是哪一个,经常需要在查哪一个表的时候将另一个表中的内容查出来。知道了这些以后就知道了外键所在的表。当然,外键一般放在多的一方。

在emp表中插入新的字段,并修改该字段为外键字段。

alter table emp add column d_id int;

ALTER TABLE emp  ADD FOREIGN KEY empFK (d_id)
   REFERENCES DEPT (d_id); 

4.分别在两个表中插入数据。

--必须先插入该表,emp表会引用该表的d_id
INSERT INTO dept(d_id,d_name) VALUES(1,"开发部");
INSERT INTO dept(d_id,d_name) VALUES(2,"管理部");
INSERT INTO dept(d_id,d_name) VALUES(3,"HR");

INSERT INTO emp(e_id,e_name,e_sal,d_id) VALUES(1,'张三',10000,1);
INSERT INTO emp(e_id,e_name,e_sal,d_id) VALUES(2,'李四',10000,2);

5.内连接查询

SELECT e.*,d.*
FROM emp e,dept d
WHERE e.d_id = d.d_id;

6.外连接查询

1.左外连接

   两个表的数据不一致的时候,比如在此例中dept表中有一个d_id为3的数据,但是在员工表中没有该数据,现在要根据部门号统计部门的员工数就需要左外连接。

SELECT COUNT(e.e_id) '员工数',d.d_name
FROM dept d LEFT JOIN emp e ON
e.e_id = d.d_id GROUP BY d.d_id;

左外连接将数据较多的放到left的左边,用左边的数据强行将右边较少的数据查出来。

2.右外连接与左外连接相反。

7.查询本部门中工资大于平均工资的人与人数

SELECT e.sal,dd.did,COUNT(e.id)
FROM emp e,(SELECT AVG(e.sal) asal,d.DEPTID did FROM emp e,dept d WHERE d.d_id=e.d_id GROUP BY d.DEPTID) dd
WHERE e.sal>=dd.asal AND e.d_id=dd.did GROUP BY dd.did

 

© 著作权归作者所有

共有 人打赏支持
meshwon
粉丝 1
博文 29
码字总数 19085
作品 0
哈尔滨
程序员
技术贴--企业系统不能用mysql -- 两个凡是

1: Mysql 没有完整实现MVVC, 在交易系统中, 是灾难. 任何交易系统都不应该用mysql. 2: Mysql 无法快速对多表关联(3张以上)进行查询策略分析, 无法支撑复杂的业务数据分析. 结论: Mysql 既不能...

宏哥
2016/10/24
432
4
【分布式架构之旅-理论篇】数据库分库分表

前言 储备知识ing,很久之前写的。 MySQL集群 MySQL官方提供的是mysql-proxy方案,主要解决了高并发的问题,但是没有解决高可用的问题。一般项目都是读多写少。读的操作让mysql-slave去处理,...

cmazxiaoma
2017/12/18
0
0
MySQL数据迁移工具的设计与实现

一、背景 MySQL作为最流行的关系型数据库产品之一,当数据规模增大遭遇性能瓶颈时,最容易想到的解决方案就是分库分表。无论是进行水平拆分还是垂直拆分,第一步必然需要数据迁移与同步。由此...

stuxuhai
2017/12/08
0
0
MySQL主从复制延迟原因分析

导读 线上有个MySQL实例,存在严重的复制延迟问题,原因出乎意料。 线上有个MySQL 5.7版本的实例,从服务器延迟了3万多秒,而且延迟看起来好像还在加剧。 MySQL版本 Server version: 5.7.18...

898009427
2017/12/29
0
0
MySQL大数据的优化以及分解存储

MySQL大数据的优化以及分解存储 前言:在上一章介绍了MySQL的优化以及优化的思路,那么如果有一种情况如果数据库已经建立好了索引,在使用sql语句索引查询时;但是在慢查询日志当中任然找到了...

tty之星
2017/06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Coding and Paper Letter(三十九)

资源整理。 1 Coding: 1.Python库benchmark rio s3,用于在访问S3上的文件时对Rasterio / GDAL的多线程性能进行基准测试的工具。 benchmark rio s3 2.Pangeo-Binder Cookiecutter模板。 cook...

胖胖雕
47分钟前
2
0
Promise 对象

Promise(承诺) 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供...

简心
50分钟前
1
0
让UI设计师崩溃的瞬间,你经历过哪些?

隔行如隔山,这句话人人耳熟能详,但其实隔行并不可怕,大家各谋其事,各尽其职,倒也互不打扰,真正可怕的是,是内行还要受外行指点江山,而最难的部分,便是那沟通。流畅的沟通,和声细语,...

mo311
51分钟前
3
0
python进制转换

#进制转换print(bin(10)) #十进制转换成二进制print(oct(10)) #十进制转换成八进制print(hex(10)) #十进制转换成十六进制print(int('1010',2)) #二进制转十进制print(int(...

fadsaa
今天
13
0
syntax error near unexpected token

最近不断重复在虚拟机CentOS测试安装gitlab,因为gitlab有一个脚本需要饭强才能下载,于是我先在windows下载好再上传到虚拟机,可是执行脚本的时候提示“syntax error near unexpected toke...

W_Lu
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部