MySql学习day03:数据表之间的连接、查询详解
主键
关键字primary key
特点不能为null,并且唯一。
主键分类
- 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐)
- 业务主键:例如username,参与实际的业务逻辑。
主键使用方式
方式一:
Create table t1( Id int primary key, Name varchar(100) ); Insert into t1 values(1,'zs'); Insert into t1 values(2,'ls');
主键自动增长
关键字: auto_increment
create table t4( id int primary key auto_increment, name varchar(100) ); Insert into t4(name) values(‘zs'); Insert into t4 values(null,'ls');
域完整性
指数据库表的列(即字段)必须符合某种特定的数据类型或约束
数据类型
长度
非空约束NOT NULL
唯一约束UNIQUE
CREATE TABLE t5( username varchar(100) NOT NULL UNIQUE, gender varchar(100) NOT NULL, phonenum varchar(100) UNIQUE );
数据表之间的连接
1.一对多(1N)客户和订单,一个客户可以有多个订单,每个订单只属于一个客户
创建客户表
CREATE TABLE customers( id int, name varchar(100), address varchar(255), PRIMARY KEY(id) );
创建订单表
CREATE TABLE orders( order_num int primary key, price float(8,2), status int, customer_id int, CONSTRAINT customer_id_fk FOREIGN KEY(customer_id) REFERENCES customers(id) );
插入数据
2.多对多用第三张表的外键连接两张表的主键。
老师和学生是多对多关系, 一个老师对应多个学生,一个学生被多个老师教
创建老师表:
Create table teachers( id int, name varchar(100) salary float(8,2), primary key(id) );
创建学生表:
Create table students( id int, name varchar(100), grade varchar(100), primary key(id) );
第三张表格
Create table teacher_student( t_id int, s_id int, primary key(t_id,s_id) CONSTRAINT teacher_id_fk FOREIGN KEY(t_id) REFERENCES teachers(id), CONSTRAINT student_id_fk FOREIGN KEY(s_id) REFERENCES students(id) );
插入数据
3.一对一一张表的外键连接第二张表的主键,实际开发中不需要这么做,直接设计一张表格就可以了。
多表查询
交叉连接(笛卡尔积)第一个表格的所有行 乘以 第二个表格中的所有行,最终结果不正确,故一般不使用。
内连接
因为交叉连接获得的结果集是错误的。内连接是在交叉连接的基础上
只列出连接表中与连接条件相匹配的数据行,匹配不上的记录不会被列出。
语法
隐式语法:
select from customers,orders where customers.id=orders.customer_id;
显式语法:
select from customers c INNER JOIN orders o ON c.id=o.customer_id;
外连接
外连接是以一张表为基表,其他表信息进行拼接,如果有就拼接上,如果没有显示null; 外连接分为左外连接和右外连接。
左外连接: 以关键字左边的表格为基表进行拼接
语法: select from customers c LEFT JOIN orders o ON c.id=o.customer_id;
右外连接: 以关键字右边的表格为基表
语法: select from orders o RIGHT JOIN customers c ON c.id=o.customer_id;
注意表a左外连接表b与表b右外连接表a结果是一样的。
子查询
某些情况下,当进行查询的时候,需要的条件是一个select语句的结果,这个时候就会用到子查询,为了给主查询(外部查询) 提供数据而执行的查询(内部查询)被叫做子查询; 子查询分为嵌套子查询和相关子查询。
嵌套子查询:
内部查询的执行独立于外部查询,内部查询仅执行一次,执行完毕后将结果作为外部查询的条件使用(嵌套子查询中的子查询语句可以拿出来单独运行。)
语法及练习: 查询出id为1的老师教过的所有学生。
select from students where id in(select s_id from teacher_student where t_id=1);
相关子查询
内部查询的执行依赖于外部查询的数据,外部查询每执行一次,内部查询也会执行一次。每一次都是外部查询先执行,取出外部查询表中的一个元组,将当前元组中的数据传递给内部查询,然后执行内部查询。根据内部查询执行的结果,判断当前元组是否满足外部查询中的where条件,若满足则当前元组是符合要求的记录,否则不符合要求。然后,外部查询继续取出下一个元组数据,执行上述的操作,直到全部元组均被处理完毕。
语法及练习求每一科考试成绩大于平均分的学生的分数。
select from score as a where a.score>(select avg(b.score) from score as b where a.cou_id=b.cou_id);
以上所述是长沙网络推广给大家介绍的MySql数据表之间的连接、查询详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,长沙网络推广会及时回复大家的。在此也非常感谢大家对狼蚁SEO网站的支持!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程