黑马程序员技术交流社区

标题: MySQL多表关系 [打印本页]

作者: 梅西的小跟班    时间: 2018-4-3 01:48
标题: MySQL多表关系
[size=0.833]多表设计的三种关系:
[size=0.833] [size=0.833]   一对多

[size=0.833]            在多的一方创建一个字段,这个字段作为作为外键执向一的一方的主键。

[size=0.833]  [size=0.833]  多对多

[size=0.833]            创建一个第三种表,中间表至少需要两个字段分别作为主键指向多对多的双方主键

[size=0.833]   [size=0.833] 一对一

[size=0.833]            唯一外键对应:假设一对一的双方式一对多的关系。在多的一方创建外键指向一的一方主键,需要在外键上添加一个unique约束。

[size=0.833]            主键对应:将一对一的双方的主键建立映射


[size=0.833]多表查询的方式:
[size=1.333]    交叉查询:

[size=1.333]        select*from A,B;   --获得的是两个表的笛卡尔积。

[size=1.333]    内连接:inner join -- inner (可以省略)

[size=0.833]       [size=0.833]         *显示内连接:select*from A inner join B on 条件;
[size=0.833]    *select*from customer c inner join orders o on c.cid = o.cid;

[size=0.833]            *隐式内连接:select*from A inner join B on 条件;
[size=1.333]    *select*from customer c ,orders o where c.cid;

[size=1.333]    外连接:outer join -- outer(可以省略)

[size=1.333]            *左外连接:left outer join -- select*from A left outer join B on 条件;

[size=1.333]    *select*from customer c left outer join orders o on c.id = o.id;

[size=1.333]            *右外连接:right  outer join -- select*from A right outer join B on 条件;

[size=1.333]    *select*from customer c right outer join orders o on c.id = o.id;

[size=1.333]

[size=1.333]多表查询的子查询:
[size=0.833]        一个SQL语句查询的过程中需要依赖另一个查询语句。[size=1.333]

[size=0.833]        [size=1.167]* select*from customer c,orders o where c.cid = o.cid and c.cid in(select cid from orders where addr like '%海定%')

[size=1.167]

[size=1.167]案例:

[mw_shl_code=sql,true]//创建个表单,对两个表单实行操作
CREATE DATABASE `taiyuan`;

USE `taiyuan`;

DROP TABLE IF EXISTS `department`;

CREATE TABLE `department` (
  `dept_id` INT(11) NOT NULL AUTO_INCREMENT,
  `dept_name` VARCHAR(16) NOT NULL,
  PRIMARY KEY (`dept_id`)
) ENGINE=MYISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


INSERT  INTO `department`(`dept_id`,`dept_name`) VALUES (1,'行政部'),(2,'财务部'),(3,'研发部'),(4,'项目部');

DROP TABLE IF EXISTS `employee`;

CREATE TABLE `employee` (
  `emp_id` INT(11) NOT NULL AUTO_INCREMENT,
  `emp_name` VARCHAR(16) NOT NULL,
  `dept_id` INT(11) NOT NULL,
  `emp_wage` DOUBLE NOT NULL,
  PRIMARY KEY (`emp_id`)
) ENGINE=MYISAM AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

INSERT  INTO `employee`(`emp_id`,`emp_name`,`dept_id`,`emp_wage`) VALUES (1,'name1',1,6300),(4,'name2',2,4500),(5,'name3',2,5000),(6,'name4',2,4500),(7,'name5',3,9000),(8,'name6',3,9000),(9,'name7',3,10000),(10,'name8',3,10000),(11,'name9',3,20000),(12,'name10',3,18000),(13,'name11',4,60000),(14,'name12',4,10000),(15,'name13',4,50000),(16,'name14',4,60000),(17,'name15',4,20000),(18,'name16',0,2500);

-- 1.查看工资大于5000的员工,并显示所有信息
SELECT

作者: tom19970323    时间: 2018-4-3 08:54
可以可以,,,,

作者: 小皖妹妹    时间: 2018-5-24 12:03
看不懂
作者: 项老师    时间: 2018-5-24 12:17
介绍关联不错,就是案例不是很清楚
作者: 奥斯托洛夫斯基    时间: 2018-5-24 16:14

作者: 美美就是美    时间: 2018-5-24 16:19

作者: O-limin    时间: 2018-5-24 16:26

作者: 黑马啸西风    时间: 2018-5-24 16:33

作者: 鸟语花香    时间: 2018-5-24 16:47

作者: hguilin    时间: 2018-5-24 17:23
6666
作者: 骑着小猪看雪    时间: 2018-5-24 17:26

作者: Rainy-    时间: 2018-5-25 08:38

作者: yangss    时间: 2018-5-25 10:39
6666666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2