龙空技术网

sql多表查询语句之多表联查

战神七小姐姐 608

前言:

如今咱们对“mysql联动查询”大致比较看重,朋友们都需要知道一些“mysql联动查询”的相关知识。那么小编同时在网摘上收集了一些有关“mysql联动查询””的相关内容,希望姐妹们能喜欢,姐妹们一起来了解一下吧!

sql语句:增删改查,其中 增、删、改只用于单表

多表级联删除,级联更新有时候会出现(例如:删除父类别,子类别也会被删除)

多表查询:多表联查、子查询

建表语句: 一般不需要语句建表,语句了解认识即可,手动在mysql软件中 右键,点击设计表即可。

CREATE TABLE oper_user(  id INT PRIMARY KEY,  name VARCHAR(255) NOT NULL,);CREATE TABLE 表名(  字段1 字段类型 字段条件,  name VARCHAR(255) NOT NULL,);PRIMARY KEY // 关键字VARCHAR(255) // 字段精度NOT NULL // 不能为空

举例 教室表和学生表 进行查询:

// 教室表:CREATE TABLE classroom(  id INT PRIMARY KEY, // 教室id  name VARCHAR(255) NOT NULL // 教室名字)// 学生表CREATE TABLE student(  id INT PRIMARY KEY, // 学生id  name VARCHAR(255) NOT NULL, // 学生名字  score DOUBLE(10,2), // 学生成绩  classid INT //教室id)// DOUBLE(10,2)表示 数字最大共10位,小数位最多有两位// 大写的单词代表关键字

教室表:

id

name

1

教室一

2

教室二

学生表:

id

name

score

classid

1

张三

43

1

2

李四

54

1

3

王五

21

2

4

小二

12

2

多表联查:1。同时查询多张表:

笛卡尔积:(a表有m条记录,b表有n条记录,会返回m*n条记录);select * from `classroom`,`student` // 查两个表的所有字段 会返回全排列组合(没有意义)如果查询n张表,必须指定n-1个公共列的条件,否则就会产生笛卡尔积,上面教室表和学生表中教室id即为公共列select * from `classroom`,`student` where classroom.id=student.classid// 查询教室表中的id等于学生表中的classid的数据select classroom.id from `classroom`,`student` where classroom.id=student.classid// 查询教室表中的id等于学生表中的classid的教室idselect score from `classroom`,`student` where classroom.id=student.classid// 查询教室表中的id等于学生表中的classid的成绩,最好是用student.score

查询教室一的学生信息:

select student.* from `classroom`,`student` where classroom.id=student.classid and classroom.name='教室一'// 查询教室表和学生表中教室名叫 教室一 的,学生信息// student.* 即为只返回符合条件的学生表里的信息即// * 返回符合条件的学生表和教室表的信息// classroom.* 同理为返回符合条件的教室表里的信息

查询张三的教室信息:

select classroom.* from `classroom`,`student` where classroom.id=student.classid and student.name='张三'

假如现在教室表又增加一个教室三:

id

name

1

教室一

2

教室二

3

教室三

但是学生表里没有在教室三的学生:

id

name

score

classid

1

张三

43

1

2

李四

54

1

3

王五

12

2

4

小二

21

2

//这个时候使用学生id和教室id对应是差不到教室三的select * from `classroom`,`student` where classroom.id=student.classid

多表联查:2。左连接:以左表为基准(左表是主表)、左表中满足条件的记录会查询出来,不满足条件的也会被查询出来;

select * from `classroom` left join `student` on classroom.id=student.classid// 满足学生id和教室id相等的数据,教室没有学生的也会显示出来

返回结果:

id

name

id1

name1

score

classid

1

教室一

1

张三

43

1

1

教室一

2

李四

54

1

2

教室二

3

王五

21

2

2

教室二

4

小二

12

2

3

教室三

null

null

null

null

多表联查:2。右连接:以右表为基准(右表是主表)、右表中满足条件的记录会查询出来,不满足条件的也会被查询出来;

select * from `student` right join `classroom` on classroom.id=student.classid// 满足学生id和教室id相等的数据,教室没有学生的也会显示出来

结果同上

多表联查:3。内连接:查询满足条件的数据

select * from `student` inner join `classroom` on classroom.id=student.classid

标签: #mysql联动查询