多表查询
数据准备
drop table if exists students;
CREATE table students(
studentNo VARCHAR(10) PRIMARY key, /*学号,主键*/
name VARCHAR(10), /*名字*/
sex VARCHAR(2), /*性别*/
hometown varchar(20), /*家乡*/
age tinyint, /*年龄*/
class VARCHAR(10), /*班级*/
card VARCHAR(20) /*身份证*/
)
insert into students values
('001','林一','女','北京','25','1班','111111111111111111'),
('002','林二','男','北京','30','2班','111111111111111112'),
('003','黄三','女','武汉','15','3班','111111111111111113'),
('004','无名','男','长沙','25','2班','111111111111111114'),
('005','林檎杰','女','北京','35','2班','111111111111111115'),
('006','黄檎','男','长沙','25','1班',null),
('007','张杰','女','武汉','15','3班','');
create table courses (
courseNo int UNSIGNED PRIMARY key auto_increment,/*课程号,主键,自增长*/
coursename varchar(10) /*课程名称*/
)
insert into courses (coursename) values
('数据库'),
('html'),
('linux'),
('系统测试'),
('单元测试'),
('测试过程'),
('python');
create table scores (
id int UNSIGNED primary key auto_increment,/*id,主键自增长*/
courseNo int UNSIGNED ,/*课程号,与courses表中的courseNO相关联*/
studentNo varchar(10),/*学号。与students表中的studentNo相关联*/
score tinyint /*成绩*/
)
insert into scores (courseNo,studentNo,score) values
(1,'001',90),
(1,'002',75),
(2,'002',98),
(3,'001',86),
(3,'003',80),
(4,'004',79),
(5,'005',96),
(6,'006',80);
create table areas (
id int primary key,
name varchar(20),
pid int
);
insert into areas values
('130100','石家庄市',NULL),
('130400','邯郸市','130000'),
('130600','保定市','130000'),
('130700','张家口市','130000'),
('130800','承德市','130000'),
('440000','广东省',NULL),
('440300','深圳市','440000'),
('440100','广州市','440000'),
('440500','汕头市','440000'),
('440600','佛山市','440000'),
('440200','韶关市','440000');
连接概念
当查询结果来源于多张表时,需要将多张表连接成一个大的数据集,在选择合适的结果返回。
连接查询可以通过连接运算符(连接条件)可以实现多个表查询。
内连接:查询的结果只显示两个表中满足连接条件的部分。
左连接:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null填充。
右连接:查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null填充。
内连接
双表内连接
语法一、标准语法
select * from 表1 inner join 表2 on 表1.字段=表2.字段
找两个表中相同的部分
students表和scores表关联查询
select * from students
inner join score