SQL多表操作
1.多表之间的建表原则
一对多:商品和分类
建表原则:在多的一方添加一个外键,指向一的一方的主键
多对多:老师和学生,学生和课程
建表原则:建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少要有两个外键,分别指向原来的两张表
一对一:班级和班长,公民和身份证,国家和国旗
建表原则:
将一对一的情况,当做是一对多的情况处理,在任意一张表添加一个外键,并且这个外键要唯一指向另外一张表
直接将两张表合并成一张表
将两张表的主键建立起连接,让两张表里面的主键相等
多表之间的关系如何维护:外键约束:foreign key
添加一个外键:alter table 表名 add foreign key(列名) references 表名(列名);
创建时添加:foreign key(列名) reference 表名(列名)
删除的时候,先删除外键关联的所有数据,再才能删除分类的数据
主键约束:默认就是不能为空,唯一
外键都是指向另外一张表的主键
主键一张表只能有一个
唯一约束:列里面的内容,必须是唯一,不能出现重复的情况,可以为空
唯一约束不可以作为其他表的外键
可以有多个唯一约束
2.多表查询内链接
内连接查询:
隐式内链接:
select * from 表名 p,表名 c where p.cno=c.cid;
显示内链接:
select * from 表名 p inner join 表名 c on p.cno=c.cid;
区别:
隐式内链接:在查询出结果的基础上去做的where条件过滤
显示内链接:带着条件去查询结果,执行效率要高
3.多表外连接查询;
左外连接;
会将左表中的所有元素都查询出来,如果右表中没有对应的数据,用NULL代替
select * from 表名 p left outer join 表名 c on p.列名(外键约束)=c.列名;
右外连接:
会将右表所有的数据都查询出来,如果左表中没有对应的数据的话,用NULL代替
select * from 表名 p right outer join 表名 c on p.列名(外键约束)=c.列名;
4.分页查询
每页数据3
起始索引从0
第1页:0
第2页:3
起始索引;index代表显示第几页
每页显示3条数据
starindex=(index-1)*3
第一个参数是索引
第二个参数每页是显示的个数
eg:select * from 表名 limit 0.3;
select * from 表名 limit 3,3;
5.子查询
select * from product where
SQL多表操作的更多相关文章
- My Sql多表操作(转载)
DELETE 在Mysql4.0之后,mysql开始支持跨表delete. Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录. 假定我们有两张表:Pr ...
- SQL复制表操作
select * into tb1 from tb2 insert into tb1 (fld1, fld2) select fld1, 0 from tb2 where fld0='x' 以上两句 ...
- SQL server 表操作语句(原创)
CREATE TABLE [dbo].[test] ([id11] int NOT NULL ,[as] varchar(1) COLLATE Chinese_PRC_CI_AS NULL ,[asd ...
- sql 单表操作
前戏 --创建表 create table xxx( id int unsigned not null auto_increment primary key, name varchar(20) not ...
- 数据库_7_SQL基本操作——表操作
SQL基本操作——表操作 建表的过程就是声明列的过程. 表与字段是密不可分的. 一.新增数据表 create table [if not exists] 表名( 字段名字 数据类型, 字段名字 数据类 ...
- (转)Hibernate中的多表操作
http://blog.csdn.net/yerenyuan_pku/article/details/70556208 Hibernate中的多表操作 在实际开发中,我们不可能只是简简单单地去操作单表 ...
- Django ORM 多表操作
目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加外键) 一对多(外键 ForeignKey) 一对一 (OneToOneFeild) 多对 ...
- Sql Server系列:数据表操作
表是用来存储数据和操作数据的逻辑结构,用来组织和存储数据,关系数据库中的所有数据都表现为表的形式,数据表由行和列组成.SQL Server中的数据表分为临时表和永久表,临时表存储在tempdb系统数据 ...
- SQL server基础知识(表操作、数据约束、多表链接查询)
SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...
随机推荐
- centos安装mycat
1.参考前文安装jdk 2.官网 http://www.mycat.io/ 或 http://dl.mycat.io/ 下载mycat 3.解压安装 cd /usr/local cp /home/ta ...
- JDK新特性之可变个数的形参的方法
可变个数的形参的方法:1.格式:对于方法的形参来说:数据类型...形参名2.可变个数的形参的方法与同名的方法之间可以构成重载3.可变个数的形参在调用时,个数从0开始,到无穷都可以(在调用这个方法时,s ...
- vue.js学习第一天,了解vue.js
vue.js是一个前端框架,他与jquery不同,jquery是一个js库,而vue.js是js的前端框架. vue.js对我们前端页面入侵比较大,而jquery则不然.那我们还为什么要使用vue.j ...
- JavaScript自定义事件 - createEvent()、initEvent()和dispachEvent()
在学习目标事件的方法的时候,接触到了dispatchEvent()方法.度娘查一查,这是一个事件触发器,事件触发器其实就是触发事件的东西. 通常情况下,我们触发事件都是在交互中触发的事件,例如点击按钮 ...
- C++——list中erase和remove的区别
1.之前在做相关的操作的时候,涉及到清除list相关的元素,因此会用到erase和remove,那么二者有什么区别呢? 从官方文档中,我们可以获取以下信息 erase : 说明:Removes fro ...
- DevExpress GridControl控件行内新增、编辑、删除添加选择框
以下为内容以图片居多1234表示点击顺序 先新增一行 操作和新增数据行一样 打开ColumnEdit 选择new ButtenEdit new上方会出现一个系统命名的button 命名可以更改必须 ...
- Java小代码
1. public class test1 {public static void main(String[] args) { Person P = new Person("gdsgds&q ...
- 用寄快递模拟数据在网络中的传送过程,发送一个ip数据报到接受这个ip数据报经历的过程
发送一个ip数据报到接受这个ip数据报经历的过程 好比寄一个快递的过程 这个包裹一共有三层, 这个包裹的最里面是数据,数据 第二层写着目的ip地址和源ip地址,即收件人和发件人的姓名 第三层也就是最外 ...
- DevExpress gridview获取单元格坐标(转)
private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventA ...
- js中this最简单清晰的解释
引自 https://www.cnblogs.com/huangwentian/p/6854472.html#commentform ① this指向的,永远只可能是对象! ② this ...