主键:
关键字:primary key
特点:不能为null,并且唯一。
主键分类:
主键使用方式:
方式一:
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.一对多(1*N):客户和订单,一个客户可以有多个订单,每个订单只属于一个客户
创建客户表:
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数据表之间的连接、查询详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍php基础之连接mysql数据库和查询数据,包括了php基础之连接mysql数据库和查询数据的使用技巧和注意事项,需要的朋友参考一下 连接数据库,有三种方法 1. 常规方式: //mysql_fetch_row 提取的结果是没有查询中的字段名了(也就是没有键id,GoodsName,只有值),如下图: //mysql_fetch_assoc 提取的结果有键值,如下图: //mys
本文向大家介绍详解MySql基本查询、连接查询、子查询、正则表达查询,包括了详解MySql基本查询、连接查询、子查询、正则表达查询的使用技巧和注意事项,需要的朋友参考一下 查询数据指从数据库中获取所需要的数据。查询数据是数据库操作中最常用,也是最重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式。通过不同的查询方式,可以获得不同的数据。MySQL中是使用SELECT语句来查询数据的。在这
本文向大家介绍MySQL多表数据记录查询详解,包括了MySQL多表数据记录查询详解的使用技巧和注意事项,需要的朋友参考一下 在实际应用中,经常需要实现在一个查询语句中显示多张表的数据,这就是所谓的多表数据记录连接查询,简称来年将诶查询。 在具体实现连接查询操作时,首先将两个或两个以上的表按照某个条件连接起来,然后再查询到所要求的数据记录。连接查询分为内连接查询和外连接查询。 在具体应用中
本文向大家介绍详解数据库多表连接查询的实现方法,包括了详解数据库多表连接查询的实现方法的使用技巧和注意事项,需要的朋友参考一下 详解数据库多表连接查询的实现方法 通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查
主要内容:查询表中所有字段,查询表中指定的字段在MySQL 中,可以使用 SELECT 语句来查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作。 SELECT 的语法格式如下: 其中,各条子句的含义如下: 包含星号通配符的字段列表,表示所要查询字段的名称。 ,表 1 和表 2 表示查询数据的来源,可以是单个或多个。 是可选项,如果选择该项,将限定查询数据必须满足该查询条件。 ,该子句告
本文向大家介绍thinkphp学习笔记之多表查询,包括了thinkphp学习笔记之多表查询的使用技巧和注意事项,需要的朋友参考一下 在操作过程中,两表查询都没有问题,但是三表查询就开始出现问题 有以下三张表,分表为pl表(uid,content),user表(id,username),lyb表(uid,title) 多表查询操作有以下几种方法: ㈠视图模型(推荐) 定义视图模型,只需要继承Thin