mysql学习

分页查询
SELECT * FROM student LIMIT 0,3; // 前面的0代表起始页,后面的3代表着一页有多少数据 这是第一页
SELECT * FROM student LIMIT 3,3; // 方程 *起始页=(第几页-1)每页的数据个数

表的一对多关系

在多得一方建立外键指向少的一方的主键
ALTER TABLE department DROP FOREIGN KEY emp_dept_fk

ALTER TABLE department ADD CONSTRAINT emp_dept_fk FOREIGN KEY( dep_id) REFERENCES department1(id) ON UPDATE CASCADE ON DELETE CASCADE

表的多对多关系

在这里插入图片描述
多对多的关系需要借助中间表,两个sid和cid 字段为第三张表的外键, 分别指向学生表和课程表的id主键。

表的一对一关系
对外键添加unique,让外键唯一,防止出现问题。

数据库设计的范式

1、第一范式(1NF):
所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是***原子性***的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

在这里插入图片描述
2 第二范式在这里插入图片描述
也就是说需要把对主码部分依赖(对主码属性组部份依赖,即 只需要依赖属性组中的某一个值就可以)的非主属性(去除主码属性组的属性)分到另外一张表。

3、第三范式(3NF)
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

在这里插入图片描述

多表查询

内连接查询:

  • 隐式内连接:
SELECT 
	t1.`name`, 
	t1.`age`,
	t2.`dep_location` 
FROM 
	department t1,	
	department1 t2
WHERE 
	t1.`dep_id`=t2.`id`

  • 显示内连接


```sql
SELECT
 
        t1.name,
        t1.age,
        t2.dep_location
FROM 
	department t1
**INNER** JOIN  //inner可以省略
	department1 t2
ON
	t1.dep_id=t2.id`

3 内连接查询
1.从哪些表中查询数据
2.条件是什么
3查询是哪些字段

4 外连接查询
1 左外连接:

SELECT
 
        t1.name,
        t1.age,
        t2.dep_location
FROM 
	department t1
**LEFT  OUTER JOIN**  // outer可以省略,查询的是左表的所有数据和右表的交集
	department1 t2
ON
	t1.dep_id=t2.id

2 右外连接:

SELECT
 
        t1.name,
        t1.age,
        t2.dep_location
FROM 
	department t1
RIGHT  OUTER JOIN 
	department1 t2
ON
	t1.dep_id=t2.id

子查询

SELECT
	*
FROM
	department
WHERE 
	department.`age`=(SELECT MAX(age) FROM department)
	

1子查询的结果单行单列
*子查询可以作为条件,使用运算符去判断。运算符:> = <

2子查询的结果多行单列

SELECT
       *
FROM
	department
WHERE
	department.`dep_id`=(SELECT 
	id
FROM 
	department1
WHERE 
	department1.`dep_name`='销售部')

通过IN字符来获取或的两个不同的数据

SELECT
       *
FROM
	department
WHERE
	department.`dep_id`IN (SELECT  
	id
FROM 
	department1
WHERE 
	department1.`dep_name` IN('销售部','研发部'))
	//和department1.`dep_name='销售部' OR department1.`dep_name='研发部'相同

3子查询结果多行多列
子查询可以作为一张虚拟表


```sql
SELECT
	*
FROM
	department1 t1,
	(SELECT
	*
FROM
        department
WHERE department.`age`>=28) t2 
WHERE
	t1.id=t2.dep_id

**也可以不使用虚拟表**

```sql
SELECT
*
FROM
	department
 JOIN 
	department1
ON 
	department.`dep_id`=department1.`id`
AND 
	department.`age`>=28

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值