MySQL学习笔记.查询数据4

数据准备

create table student
(
	sno varchar(10) primary key,
	sname varchar(20),
	sex varchar(10),
	sage smallint,
	sdept varchar(20)
);
insert into student values('2018001001','令狐冲','male',18,'cs');
insert into student values('2018001002','任盈盈','female',19,'MA');
insert into student values('2018001003','岳不群','male',20,'CS');
create table course
(
	cno varchar(4) primary key,
	cname varchar(40) not null,
	cpno varchar(4),
	credit smallint
);
insert into course values('c001','C语言程序设计',' ',4);
insert into course values('c002','计算机应用基础','c002',2);
create table sc
(
	sno varchar(10),
	cno varchar(4),
	grade smallint,
	primary key(sno,cno),
	foreign key(sno) references student(sno),
	foreign key(cno) references course(cno)
);
insert into sc values('2018001001','c001',88);
insert into sc values('2018001001','c002',78);
insert into sc values('2018001002','c001',88);
insert into sc values('2018001002','c002',78);

OK准备好数据,查看一下,共三张表。

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| course         |
| sc             |
| student        |
+----------------+
3 rows in set (0.00 sec)

交叉连接

交叉连接 不适用任何匹配条件,生成笛卡尔积

mysql> SELECT * FROM student,course,sc;
+------------+--------+--------+------+-------+------+----------------+------+--------+------------+------+-------+
| sno        | sname  | sex    | sage | sdept | cno  | cname          | cpno | credit | sno        | cno  | grade |
+------------+--------+--------+------+-------+------+----------------+------+--------+------------+------+-------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | c001 | C语言程序设计  |      |      4 | 2018001001 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c002 | 计算机应用基础 | c002 |      2 | 2018001001 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c001 | C语言程序设计  |      |      4 | 2018001001 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c002 | 计算机应用基础 | c002 |      2 | 2018001001 | c001 |    88 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c001 | C语言程序设计  |      |      4 | 2018001001 | c001 |    88 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c002 | 计算机应用基础 | c002 |      2 | 2018001001 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c001 | C语言程序设计  |      |      4 | 2018001001 | c002 |    78 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c002 | 计算机应用基础 | c002 |      2 | 2018001001 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c001 | C语言程序设计  |      |      4 | 2018001001 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c002 | 计算机应用基础 | c002 |      2 | 2018001001 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c001 | C语言程序设计  |      |      4 | 2018001001 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c002 | 计算机应用基础 | c002 |      2 | 2018001001 | c002 |    78 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c001 | C语言程序设计  |      |      4 | 2018001002 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c002 | 计算机应用基础 | c002 |      2 | 2018001002 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c001 | C语言程序设计  |      |      4 | 2018001002 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c002 | 计算机应用基础 | c002 |      2 | 2018001002 | c001 |    88 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c001 | C语言程序设计  |      |      4 | 2018001002 | c001 |    88 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c002 | 计算机应用基础 | c002 |      2 | 2018001002 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c001 | C语言程序设计  |      |      4 | 2018001002 | c002 |    78 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c002 | 计算机应用基础 | c002 |      2 | 2018001002 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c001 | C语言程序设计  |      |      4 | 2018001002 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c002 | 计算机应用基础 | c002 |      2 | 2018001002 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c001 | C语言程序设计  |      |      4 | 2018001002 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | c002 | 计算机应用基础 | c002 |      2 | 2018001002 | c002 |    78 |
+------------+--------+--------+------+-------+------+----------------+------+--------+------------+------+-------+
24 rows in set (0.00 sec)
mysql> select count(*) from student cross join sc cross join course;
+----------+
| count(*) |
+----------+
|       24 |
+----------+
1 row in set (2.10 sec)

CROSS JOIN实际上是笛卡尔积
A表有M行,N列
B表有M1行,N1列
则A表与B表的笛卡尔积有M*M1行,N+N1列。

θ连接

θ符号有多种>,>=,<,<=,=,<>,!=

mysql> SELECT *
    -> FROM STUDENT,SC
    -> WHERE STUDENT.SNO>SC.SNO;
+------------+--------+--------+------+-------+------------+------+-------+
| sno        | sname  | sex    | sage | sdept | sno        | cno  | grade |
+------------+--------+--------+------+-------+------------+------+-------+
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001001 | c001 |    88 |
| 2018001003 | 岳不群 | male   |   20 | CS    | 2018001001 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001001 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | 2018001001 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | 2018001002 | c001 |    88 |
| 2018001003 | 岳不群 | male   |   20 | CS    | 2018001002 | c002 |    78 |
+------------+--------+--------+------+-------+------------+------+-------+
6 rows in set (2.06 sec)
mysql> SELECT *
    -> FROM STUDENT,SC
    -> WHERE STUDENT.SNO<SC.SNO;
+------------+--------+------+------+-------+------------+------+-------+
| sno        | sname  | sex  | sage | sdept | sno        | cno  | grade |
+------------+--------+------+------+-------+------------+------+-------+
| 2018001001 | 令狐冲 | male |   18 | cs    | 2018001002 | c001 |    88 |
| 2018001001 | 令狐冲 | male |   18 | cs    | 2018001002 | c002 |    78 |
+------------+--------+------+------+-------+------------+------+-------+
2 rows in set (0.00 sec)

等值连接

mysql> SELECT *
    -> FROM STUDENT,SC
    -> WHERE STUDENT.SNO=SC.SNO;
+------------+--------+--------+------+-------+------------+------+-------+
| sno        | sname  | sex    | sage | sdept | sno        | cno  | grade |
+------------+--------+--------+------+-------+------------+------+-------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c002 |    78 |
+------------+--------+--------+------+-------+------------+------+-------+
4 rows in set (0.00 sec)

等值连接的结果去掉重复的列====自然连接

mysql> SELECT STUDENT.*,CNO,GRADE
    -> FROM STUDENT,SC
    -> WHERE STUDENT.SNO=SC.SNO;
+------------+--------+--------+------+-------+------+-------+
| sno        | sname  | sex    | sage | sdept | CNO  | GRADE |
+------------+--------+--------+------+-------+------+-------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c002 |    78 |
+------------+--------+--------+------+-------+------+-------+
4 rows in set (0.00 sec)

外连接

mysql> SELECT *
    -> FROM student right join sc
    -> on student.sno=sc.sno;
+------------+--------+--------+------+-------+------------+------+-------+
| sno        | sname  | sex    | sage | sdept | sno        | cno  | grade |
+------------+--------+--------+------+-------+------------+------+-------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c002 |    78 |
+------------+--------+--------+------+-------+------------+------+-------+
4 rows in set (0.00 sec)

mysql> SELECT *
    -> FROM student left join sc
    -> on student.sno=sc.sno;
+------------+--------+--------+------+-------+------------+------+-------+
| sno        | sname  | sex    | sage | sdept | sno        | cno  | grade |
+------------+--------+--------+------+-------+------------+------+-------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | NULL       | NULL |  NULL |
+------------+--------+--------+------+-------+------------+------+-------+
5 rows in set (0.00 sec)

mysql> SELECT *
    -> FROM student left outer join sc
    -> on student.sno=sc.sno;
+------------+--------+--------+------+-------+------------+------+-------+
| sno        | sname  | sex    | sage | sdept | sno        | cno  | grade |
+------------+--------+--------+------+-------+------------+------+-------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c002 |    78 |
| 2018001003 | 岳不群 | male   |   20 | CS    | NULL       | NULL |  NULL |
+------------+--------+--------+------+-------+------------+------+-------+
5 rows in set (0.00 sec)

mysql> SELECT *
    -> FROM student right outer join sc
    -> on student.sno=sc.sno;
+------------+--------+--------+------+-------+------------+------+-------+
| sno        | sname  | sex    | sage | sdept | sno        | cno  | grade |
+------------+--------+--------+------+-------+------------+------+-------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c001 |    88 |
| 2018001001 | 令狐冲 | male   |   18 | cs    | 2018001001 | c002 |    78 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c001 |    88 |
| 2018001002 | 任盈盈 | female |   19 | MA    | 2018001002 | c002 |    78 |
+------------+--------+--------+------+-------+------------+------+-------+
4 rows in set (0.00 sec)

复合条件连接查询

mysql> SELECT STUDENT.*,SC.CNO,GRADE,course.*
    -> FROM STUDENT,SC,course
    -> WHERE STUDENT.SNO=SC.SNO AND
    -> COURSE.CNO=SC.CNO AND
    -> SC.CNO='c002';
+------------+--------+--------+------+-------+------+-------+------+----------------+------+--------+
| sno        | sname  | sex    | sage | sdept | CNO  | GRADE | cno  | cname          | cpno | credit |
+------------+--------+--------+------+-------+------+-------+------+----------------+------+--------+
| 2018001001 | 令狐冲 | male   |   18 | cs    | c002 |    78 | c002 | 计算机应用基础 | c002 |      2 |
| 2018001002 | 任盈盈 | female |   19 | MA    | c002 |    78 | c002 | 计算机应用基础 | c002 |      2 |
+------------+--------+--------+------+-------+------+-------+------+----------------+------+--------+
2 rows in set (0.00 sec)

猜你喜欢

转载自blog.csdn.net/qq_44862120/article/details/109164272
今日推荐