我们知道MySQL的查询大致分为单表查询,多表查询以及联合查询。多表查询,顾名思义,就是查询的结果可能不止来源一个表哟!数据库中的设计范式要求其尽可能降低冗余的,那么如果说一个数据我们来回的存储N此的话,就建议把它拆分成多张表(比如,插成两张表进行存储),并且可以在两两之间都具体的字段建立关联关系。
一.创建查询环境
以下是关于“辉煌小学”的人员信息表,这是一张电子表格,但是我们在数据库存储的时候,我们可以把它存储成多张表格。
student_id | student_name | age | student_id | teacher | teacher_id | class | Class_id | course | scores |
1 | 小明 | 25 | 1 | 张三 | 2 | 辉煌七班 | 7 | 易经 | 98 |
2 | 小红 | 23 | 2 | 李四 | 1 | 辉煌七班 | 7 | 大学 | 98 |
3 | 小绿 | 21 | 3 | 王五 | 3 | 辉煌七班 | 7 | 论语 | 95 |
4 | 小黑 | 26 | 4 | 赵六 | 4 | 辉煌十班 | 10 | 罗织经 | 97 |
5 | 小白 | 23 | 5 | 钱七 | 5 | 辉煌八班 | 8 | 中庸 | 96 |
6 | 小蓝 | 24 | 6 | 钱七 | 5 | 辉煌八班 | 8 | 鬼谷子 | 94 |
7 | 小黄 | 23 | 7 | 钱七 | 5 | 辉煌八班 | 8 | 孙子兵法 | 93 |
8 | 小心 | 23 | 8 | 赵六 | 4 | 辉煌十班 | 10 | 道德经 | 92 |
9 | 小严 | 22 | 9 | 赵六 | 4 | 辉煌十班 | 10 | 素书 | 89 |
10 | 小陈 | 26 | 10 | 刘八 | 6 | 辉煌三班 | 3 | 荀子 | 96 |
11 | 小辉 | 25 | 11 | 刘八 | 6 | 辉煌三班 | 3 | 韩非子 | 94 |
12 | 小婷 | 26 | 12 | 刘八 | 6 | 辉煌三班 | 3 | 黄帝内经 | 91 |
创建表格的方式有很多种,大家可以按照自己的方式进行存储,我创建表格的流程如下:
#!/bin/bash
#@author :yanhuihuang
#EMAIL:981654601@qq.com
#创建数据库
create database chensiting;
#使用数据库
use chensiting;
#创建students表
create table students( StudentID mediumint not null auto_increment,Name varchar(50) not null,Age tinyint not null,Gender ENUM('boy','girl'),ClassID tinyint,TeacherID tinyint,primary key (StudentID,Name))engine=innodb default charset=utf8;
#向创建的students的表中插入数据
insert into students values(1,'小明',25,'boy',7,2);
insert into students values(2,'小红',23,'boy',7,1);
insert into students values(3,'小绿',21,'girl',7,3);
insert into students values(4,'小黑',26,'boy',10,4);
insert into students values(5,'小白',23,'girl',8,5);
insert into students values(6,'小蓝',24,'boy',8,5);
insert into students values(7,'小黄',23,'boy',8,5);
insert into students values(8,'小心',23,'boy',10,4);
insert into students values(9,'小严',22,'boy',10,4);
insert into students values(10,'小陈',26,'boy',3,6);
insert into students values(11,'小辉',25,'boy',3,6);
insert into students values(12,'小婷',26,'boy',3,6);
#创建classes表
create table Classes(ClassID tinyint not null, Class varchar(50) not null,ClassMember tinyint not null)engine=innodb default charset=utf8;
#向创建的Class的表中插入数据
insert into Classes values(7,'辉煌第七班',4);
insert into Classes values(10,'辉煌第十班',3);
insert into Classes values(8,'辉煌第八班',3);
insert into Classes values(3,'辉煌第三班',3);
#创建teachers表
create table tearchers( ClassID tinyint not null,Name varchar(50) not null,TeacherID tinyint not null,course varchar(50) not null)engine=innodb default charset=utf8;
#向创建的Class的表中插入数据
insert into tearchers values(7,'张三',2,'易经');
insert into tearchers values(7,'李四',1,'大学');
insert into tearchers values(7,'王五',3,'论语');
insert into tearchers values(10,'赵六',4,'罗织经');
insert into tearchers values(8,'钱七',5,'中庸');
insert into tearchers values(8,'钱七',5,'鬼谷子');
insert into tearchers values(8,'钱七',5,'孙子兵法');
insert into tearchers values(10,'赵六',4,'道德经');
insert into tearchers values(10,'赵六',4,'素书');
insert into tearchers values(3,'刘八',6,'荀子');
insert into tearchers values(3,'刘八',6,'韩非子');
insert into tearchers values(3,'刘八',6,'黄帝内经');
#创建score表
create table score( StudentID mediumint not null,Name varchar(50) not null,ExaminationResults tinyint not null)engine=innodb default charset=utf8;
#向创建的score表中插入数据
insert into score values(1,'小明',98);
insert into score values(2,'小红',98);
insert into score values(3,'小绿',95);
insert into score values(4,'小黑',97);
insert into score values(5,'小白',96);
insert into score values(6,'小蓝',94);
insert into score values(7,'小黄',93);
insert into score values(8,'小心',92);
insert into score values(9,'小严',89);
insert into score values(10,'小陈',96);
insert into score values(11,'小辉',94);
insert into score values(12,'小婷',91);
[root@iso-all ~]# mysql -p123456 < huihuang.sql
Warning: Using a password on the command line interface can be insecure.
二.联结查询
顾名思义,联结查询就是事先将两张或者多张表join,根据join的结果进行查询。联结查询分为交叉联结,
1.交叉联结
交叉联结就是用第一个表的每一行去匹配第二张表的所有行,这样的查询方式低效率,且查询的数据都会在内存中打开,占用空间较大,大多数信息都是无用的,因此这种查询方式很少有人使用。我们可以用公式表示:"(a+b)(c+d)",我们可以理解a和b是第一张表的行和列,而c和d表示第二张表中的行和列。
mysql> select * from students; +-----------+--------+-----+--------+---------+-----------+ | StudentID | Name | Age | Gender | ClassID | TeacherID | +-----------+--------+-----+--------+---------+-----------+ | 1 | 小明 | 25 | boy | 7 | 2 | | 2 | 小红 | 23 | boy | 7 | 1 | | 3 | 小绿 | 21 | girl | 7 | 3 | | 4 | 小黑 | 26 | boy | 10 | 4 | | 5 | 小白 | 23 | girl | 8 | 5 | | 6 | 小蓝 | 24 | boy | 8 | 5 | | 7 | 小黄 | 23 | boy | 8 | 5 | | 8 | 小心 | 23 | boy | 10 | 4 | | 9 | 小严 | 22 | boy | 10 | 4 | | 10 | 小陈 | 26 | boy | 3 | 6 | | 11 | 小辉 | 25 | boy | 3 | 6 | | 12 | 小婷 | 26 | boy | 3 | 6 | +-----------+--------+-----+--------+---------+-----------+ 12 rows in set (0.00 sec) mysql> select * from tearchers; +---------+--------+-----------+-----------------+ | ClassID | Name | TeacherID | Ninjutsu_course | +---------+--------+-----------+-----------------+ | 7 | 张三 | 2 | 易经 | | 7 | 李四 | 1 | 大学 | | 7 | 王五 | 3 | 论语 | | 10 | 赵六 | 4 | 罗织经 | | 8 | 钱七 | 5 | 中庸 | | 8 | 钱七 | 5 | 鬼谷子 | | 8 | 钱七 | 5 | 孙子兵法 | | 10 | 赵六 | 4 | 道德经 | | 10 | 赵六 | 4 | 素书 | | 3 | 刘八 | 6 | 荀子 | | 3 | 刘八 | 6 | 韩非子 | | 3 | 刘八 | 6 | 黄帝内经 | +---------+--------+-----------+-----------------+ 12 rows in set (0.00 sec) mysql> select * from students,tearchers; +-----------+--------+-----+--------+---------+-----------+---------+--------+-----------+-----------------+ | StudentID | Name | Age | Gender | ClassID | TeacherID | ClassID | Name | TeacherID | Ninjutsu_course | +-----------+--------+-----+--------+---------+-----------+---------+--------+-----------+-----------------+ | 1 | 小明 | 25 | boy | 7 | 2 | 7 | 张三 | 2 | 易经 | | 2 | 小红 | 23 | boy | 7 | 1 | 7 | 张三 | 2 | 易经 | | 3 | 小绿 | 21 | girl | 7 | 3 | 7 | 张三 | 2 | 易经 | | 4 | 小黑 | 26 | boy | 10 | 4 | 7 | 张三 | 2 | 易经 | | 5 | 小白 | 23 | girl | 8 | 5 | 7 | 张三 | 2 | 易经 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 7 | 张三 | 2 | 易经 | | 7 | 小黄 | 23 | boy | 8 | 5 | 7 | 张三 | 2 | 易经 | | 8 | 小心 | 23 | boy | 10 | 4 | 7 | 张三 | 2 | 易经 | | 9 | 小严 | 22 | boy | 10 | 4 | 7 | 张三 | 2 | 易经 | | 10 | 小陈 | 26 | boy | 3 | 6 | 7 | 张三 | 2 | 易经 | | 11 | 小辉 | 25 | boy | 3 | 6 | 7 | 张三 | 2 | 易经 | | 12 | 小婷 | 26 | boy | 3 | 6 | 7 | 张三 | 2 | 易经 | | 1 | 小明 | 25 | boy | 7 | 2 | 7 | 李四 | 1 | 大学 | | 2 | 小红 | 23 | boy | 7 | 1 | 7 | 李四 | 1 | 大学 | | 3 | 小绿 | 21 | girl | 7 | 3 | 7 | 李四 | 1 | 大学 | | 4 | 小黑 | 26 | boy | 10 | 4 | 7 | 李四 | 1 | 大学 | | 5 | 小白 | 23 | girl | 8 | 5 | 7 | 李四 | 1 | 大学 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 7 | 李四 | 1 | 大学 | | 7 | 小黄 | 23 | boy | 8 | 5 | 7 | 李四 | 1 | 大学 | | 8 | 小心 | 23 | boy | 10 | 4 | 7 | 李四 | 1 | 大学 | | 9 | 小严 | 22 | boy | 10 | 4 | 7 | 李四 | 1 | 大学 | | 10 | 小陈 | 26 | boy | 3 | 6 | 7 | 李四 | 1 | 大学 | | 11 | 小辉 | 25 | boy | 3 | 6 | 7 | 李四 | 1 | 大学 | | 12 | 小婷 | 26 | boy | 3 | 6 | 7 | 李四 | 1 | 大学 | | 1 | 小明 | 25 | boy | 7 | 2 | 7 | 王五 | 3 | 论语 | | 2 | 小红 | 23 | boy | 7 | 1 | 7 | 王五 | 3 | 论语 | | 3 | 小绿 | 21 | girl | 7 | 3 | 7 | 王五 | 3 | 论语 | | 4 | 小黑 | 26 | boy | 10 | 4 | 7 | 王五 | 3 | 论语 | | 5 | 小白 | 23 | girl | 8 | 5 | 7 | 王五 | 3 | 论语 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 7 | 王五 | 3 | 论语 | | 7 | 小黄 | 23 | boy | 8 | 5 | 7 | 王五 | 3 | 论语 | | 8 | 小心 | 23 | boy | 10 | 4 | 7 | 王五 | 3 | 论语 | | 9 | 小严 | 22 | boy | 10 | 4 | 7 | 王五 | 3 | 论语 | | 10 | 小陈 | 26 | boy | 3 | 6 | 7 | 王五 | 3 | 论语 | | 11 | 小辉 | 25 | boy | 3 | 6 | 7 | 王五 | 3 | 论语 | | 12 | 小婷 | 26 | boy | 3 | 6 | 7 | 王五 | 3 | 论语 | | 1 | 小明 | 25 | boy | 7 | 2 | 10 | 赵六 | 4 | 罗织经 | | 2 | 小红 | 23 | boy | 7 | 1 | 10 | 赵六 | 4 | 罗织经 | | 3 | 小绿 | 21 | girl | 7 | 3 | 10 | 赵六 | 4 | 罗织经 | | 4 | 小黑 | 26 | boy | 10 | 4 | 10 | 赵六 | 4 | 罗织经 | | 5 | 小白 | 23 | girl | 8 | 5 | 10 | 赵六 | 4 | 罗织经 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 10 | 赵六 | 4 | 罗织经 | | 7 | 小黄 | 23 | boy | 8 | 5 | 10 | 赵六 | 4 | 罗织经 | | 8 | 小心 | 23 | boy | 10 | 4 | 10 | 赵六 | 4 | 罗织经 | | 9 | 小严 | 22 | boy | 10 | 4 | 10 | 赵六 | 4 | 罗织经 | | 10 | 小陈 | 26 | boy | 3 | 6 | 10 | 赵六 | 4 | 罗织经 | | 11 | 小辉 | 25 | boy | 3 | 6 | 10 | 赵六 | 4 | 罗织经 | | 12 | 小婷 | 26 | boy | 3 | 6 | 10 | 赵六 | 4 | 罗织经 | | 1 | 小明 | 25 | boy | 7 | 2 | 8 | 钱七 | 5 | 中庸 | | 2 | 小红 | 23 | boy | 7 | 1 | 8 | 钱七 | 5 | 中庸 | | 3 | 小绿 | 21 | girl | 7 | 3 | 8 | 钱七 | 5 | 中庸 | | 4 | 小黑 | 26 | boy | 10 | 4 | 8 | 钱七 | 5 | 中庸 | | 5 | 小白 | 23 | girl | 8 | 5 | 8 | 钱七 | 5 | 中庸 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 8 | 钱七 | 5 | 中庸 | | 7 | 小黄 | 23 | boy | 8 | 5 | 8 | 钱七 | 5 | 中庸 | | 8 | 小心 | 23 | boy | 10 | 4 | 8 | 钱七 | 5 | 中庸 | | 9 | 小严 | 22 | boy | 10 | 4 | 8 | 钱七 | 5 | 中庸 | | 10 | 小陈 | 26 | boy | 3 | 6 | 8 | 钱七 | 5 | 中庸 | | 11 | 小辉 | 25 | boy | 3 | 6 | 8 | 钱七 | 5 | 中庸 | | 12 | 小婷 | 26 | boy | 3 | 6 | 8 | 钱七 | 5 | 中庸 | | 1 | 小明 | 25 | boy | 7 | 2 | 8 | 钱七 | 5 | 鬼谷子 | | 2 | 小红 | 23 | boy | 7 | 1 | 8 | 钱七 | 5 | 鬼谷子 | | 3 | 小绿 | 21 | girl | 7 | 3 | 8 | 钱七 | 5 | 鬼谷子 | | 4 | 小黑 | 26 | boy | 10 | 4 | 8 | 钱七 | 5 | 鬼谷子 | | 5 | 小白 | 23 | girl | 8 | 5 | 8 | 钱七 | 5 | 鬼谷子 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 8 | 钱七 | 5 | 鬼谷子 | | 7 | 小黄 | 23 | boy | 8 | 5 | 8 | 钱七 | 5 | 鬼谷子 | | 8 | 小心 | 23 | boy | 10 | 4 | 8 | 钱七 | 5 | 鬼谷子 | | 9 | 小严 | 22 | boy | 10 | 4 | 8 | 钱七 | 5 | 鬼谷子 | | 10 | 小陈 | 26 | boy | 3 | 6 | 8 | 钱七 | 5 | 鬼谷子 | | 11 | 小辉 | 25 | boy | 3 | 6 | 8 | 钱七 | 5 | 鬼谷子 | | 12 | 小婷 | 26 | boy | 3 | 6 | 8 | 钱七 | 5 | 鬼谷子 | | 1 | 小明 | 25 | boy | 7 | 2 | 8 | 钱七 | 5 | 孙子兵法 | | 2 | 小红 | 23 | boy | 7 | 1 | 8 | 钱七 | 5 | 孙子兵法 | | 3 | 小绿 | 21 | girl | 7 | 3 | 8 | 钱七 | 5 | 孙子兵法 | | 4 | 小黑 | 26 | boy | 10 | 4 | 8 | 钱七 | 5 | 孙子兵法 | | 5 | 小白 | 23 | girl | 8 | 5 | 8 | 钱七 | 5 | 孙子兵法 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 8 | 钱七 | 5 | 孙子兵法 | | 7 | 小黄 | 23 | boy | 8 | 5 | 8 | 钱七 | 5 | 孙子兵法 | | 8 | 小心 | 23 | boy | 10 | 4 | 8 | 钱七 | 5 | 孙子兵法 | | 9 | 小严 | 22 | boy | 10 | 4 | 8 | 钱七 | 5 | 孙子兵法 | | 10 | 小陈 | 26 | boy | 3 | 6 | 8 | 钱七 | 5 | 孙子兵法 | | 11 | 小辉 | 25 | boy | 3 | 6 | 8 | 钱七 | 5 | 孙子兵法 | | 12 | 小婷 | 26 | boy | 3 | 6 | 8 | 钱七 | 5 | 孙子兵法 | | 1 | 小明 | 25 | boy | 7 | 2 | 10 | 赵六 | 4 | 道德经 | | 2 | 小红 | 23 | boy | 7 | 1 | 10 | 赵六 | 4 | 道德经 | | 3 | 小绿 | 21 | girl | 7 | 3 | 10 | 赵六 | 4 | 道德经 | | 4 | 小黑 | 26 | boy | 10 | 4 | 10 | 赵六 | 4 | 道德经 | | 5 | 小白 | 23 | girl | 8 | 5 | 10 | 赵六 | 4 | 道德经 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 10 | 赵六 | 4 | 道德经 | | 7 | 小黄 | 23 | boy | 8 | 5 | 10 | 赵六 | 4 | 道德经 | | 8 | 小心 | 23 | boy | 10 | 4 | 10 | 赵六 | 4 | 道德经 | | 9 | 小严 | 22 | boy | 10 | 4 | 10 | 赵六 | 4 | 道德经 | | 10 | 小陈 | 26 | boy | 3 | 6 | 10 | 赵六 | 4 | 道德经 | | 11 | 小辉 | 25 | boy | 3 | 6 | 10 | 赵六 | 4 | 道德经 | | 12 | 小婷 | 26 | boy | 3 | 6 | 10 | 赵六 | 4 | 道德经 | | 1 | 小明 | 25 | boy | 7 | 2 | 10 | 赵六 | 4 | 素书 | | 2 | 小红 | 23 | boy | 7 | 1 | 10 | 赵六 | 4 | 素书 | | 3 | 小绿 | 21 | girl | 7 | 3 | 10 | 赵六 | 4 | 素书 | | 4 | 小黑 | 26 | boy | 10 | 4 | 10 | 赵六 | 4 | 素书 | | 5 | 小白 | 23 | girl | 8 | 5 | 10 | 赵六 | 4 | 素书 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 10 | 赵六 | 4 | 素书 | | 7 | 小黄 | 23 | boy | 8 | 5 | 10 | 赵六 | 4 | 素书 | | 8 | 小心 | 23 | boy | 10 | 4 | 10 | 赵六 | 4 | 素书 | | 9 | 小严 | 22 | boy | 10 | 4 | 10 | 赵六 | 4 | 素书 | | 10 | 小陈 | 26 | boy | 3 | 6 | 10 | 赵六 | 4 | 素书 | | 11 | 小辉 | 25 | boy | 3 | 6 | 10 | 赵六 | 4 | 素书 | | 12 | 小婷 | 26 | boy | 3 | 6 | 10 | 赵六 | 4 | 素书 | | 1 | 小明 | 25 | boy | 7 | 2 | 3 | 刘八 | 6 | 荀子 | | 2 | 小红 | 23 | boy | 7 | 1 | 3 | 刘八 | 6 | 荀子 | | 3 | 小绿 | 21 | girl | 7 | 3 | 3 | 刘八 | 6 | 荀子 | | 4 | 小黑 | 26 | boy | 10 | 4 | 3 | 刘八 | 6 | 荀子 | | 5 | 小白 | 23 | girl | 8 | 5 | 3 | 刘八 | 6 | 荀子 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 3 | 刘八 | 6 | 荀子 | | 7 | 小黄 | 23 | boy | 8 | 5 | 3 | 刘八 | 6 | 荀子 | | 8 | 小心 | 23 | boy | 10 | 4 | 3 | 刘八 | 6 | 荀子 | | 9 | 小严 | 22 | boy | 10 | 4 | 3 | 刘八 | 6 | 荀子 | | 10 | 小陈 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 荀子 | | 11 | 小辉 | 25 | boy | 3 | 6 | 3 | 刘八 | 6 | 荀子 | | 12 | 小婷 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 荀子 | | 1 | 小明 | 25 | boy | 7 | 2 | 3 | 刘八 | 6 | 韩非子 | | 2 | 小红 | 23 | boy | 7 | 1 | 3 | 刘八 | 6 | 韩非子 | | 3 | 小绿 | 21 | girl | 7 | 3 | 3 | 刘八 | 6 | 韩非子 | | 4 | 小黑 | 26 | boy | 10 | 4 | 3 | 刘八 | 6 | 韩非子 | | 5 | 小白 | 23 | girl | 8 | 5 | 3 | 刘八 | 6 | 韩非子 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 3 | 刘八 | 6 | 韩非子 | | 7 | 小黄 | 23 | boy | 8 | 5 | 3 | 刘八 | 6 | 韩非子 | | 8 | 小心 | 23 | boy | 10 | 4 | 3 | 刘八 | 6 | 韩非子 | | 9 | 小严 | 22 | boy | 10 | 4 | 3 | 刘八 | 6 | 韩非子 | | 10 | 小陈 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 韩非子 | | 11 | 小辉 | 25 | boy | 3 | 6 | 3 | 刘八 | 6 | 韩非子 | | 12 | 小婷 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 韩非子 | | 1 | 小明 | 25 | boy | 7 | 2 | 3 | 刘八 | 6 | 黄帝内经 | | 2 | 小红 | 23 | boy | 7 | 1 | 3 | 刘八 | 6 | 黄帝内经 | | 3 | 小绿 | 21 | girl | 7 | 3 | 3 | 刘八 | 6 | 黄帝内经 | | 4 | 小黑 | 26 | boy | 10 | 4 | 3 | 刘八 | 6 | 黄帝内经 | | 5 | 小白 | 23 | girl | 8 | 5 | 3 | 刘八 | 6 | 黄帝内经 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 3 | 刘八 | 6 | 黄帝内经 | | 7 | 小黄 | 23 | boy | 8 | 5 | 3 | 刘八 | 6 | 黄帝内经 | | 8 | 小心 | 23 | boy | 10 | 4 | 3 | 刘八 | 6 | 黄帝内经 | | 9 | 小严 | 22 | boy | 10 | 4 | 3 | 刘八 | 6 | 黄帝内经 | | 10 | 小陈 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 黄帝内经 | | 11 | 小辉 | 25 | boy | 3 | 6 | 3 | 刘八 | 6 | 黄帝内经 | | 12 | 小婷 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 黄帝内经 | +-----------+--------+-----+--------+---------+-----------+---------+--------+-----------+-----------------+ 144 rows in set (0.01 sec)
2.自然联结
自然联结又叫等值联结(内联结),把两张表中的对应字段(把相同的字段进行等值连接)做等值关联我们就把它称为等值连接。注意,条件联结是另外一种内联结哟,我们常用的还是等值联结。
mysql> select * from students; +-----------+--------+-----+--------+---------+-----------+ | StudentID | Name | Age | Gender | ClassID | TeacherID | +-----------+--------+-----+--------+---------+-----------+ | 1 | 小明 | 25 | boy | 7 | 2 | | 2 | 小红 | 23 | boy | 7 | 1 | | 3 | 小绿 | 21 | girl | 7 | 3 | | 4 | 小黑 | 26 | boy | 10 | 4 | | 5 | 小白 | 23 | girl | 8 | 5 | | 6 | 小蓝 | 24 | boy | 8 | 5 | | 7 | 小黄 | 23 | boy | 8 | 5 | | 8 | 小心 | 23 | boy | 10 | 4 | | 9 | 小严 | 22 | boy | 10 | 4 | | 10 | 小陈 | 26 | boy | 3 | 6 | | 11 | 小辉 | 25 | boy | 3 | 6 | | 12 | 小婷 | 26 | boy | 3 | 6 | +-----------+--------+-----+--------+---------+-----------+ 12 rows in set (0.00 sec) mysql> select * from tearchers; +---------+--------+-----------+-----------------+ | ClassID | Name | TeacherID | Ninjutsu_course | +---------+--------+-----------+-----------------+ | 7 | 张三 | 2 | 易经 | | 7 | 李四 | 1 | 大学 | | 7 | 王五 | 3 | 论语 | | 10 | 赵六 | 4 | 罗织经 | | 8 | 钱七 | 5 | 中庸 | | 8 | 钱七 | 5 | 鬼谷子 | | 8 | 钱七 | 5 | 孙子兵法 | | 10 | 赵六 | 4 | 道德经 | | 10 | 赵六 | 4 | 素书 | | 3 | 刘八 | 6 | 荀子 | | 3 | 刘八 | 6 | 韩非子 | | 3 | 刘八 | 6 | 黄帝内经 | +---------+--------+-----------+-----------------+ 12 rows in set (0.00 sec) mysql> select * from students,tearchers where students.ClassID = tearchers.ClassID; +-----------+--------+-----+--------+---------+-----------+---------+--------+-----------+-----------------+ | StudentID | Name | Age | Gender | ClassID | TeacherID | ClassID | Name | TeacherID | Ninjutsu_course | +-----------+--------+-----+--------+---------+-----------+---------+--------+-----------+-----------------+ | 1 | 小明 | 25 | boy | 7 | 2 | 7 | 张三 | 2 | 易经 | | 2 | 小红 | 23 | boy | 7 | 1 | 7 | 张三 | 2 | 易经 | | 3 | 小绿 | 21 | girl | 7 | 3 | 7 | 张三 | 2 | 易经 | | 1 | 小明 | 25 | boy | 7 | 2 | 7 | 李四 | 1 | 大学 | | 2 | 小红 | 23 | boy | 7 | 1 | 7 | 李四 | 1 | 大学 | | 3 | 小绿 | 21 | girl | 7 | 3 | 7 | 李四 | 1 | 大学 | | 1 | 小明 | 25 | boy | 7 | 2 | 7 | 王五 | 3 | 论语 | | 2 | 小红 | 23 | boy | 7 | 1 | 7 | 王五 | 3 | 论语 | | 3 | 小绿 | 21 | girl | 7 | 3 | 7 | 王五 | 3 | 论语 | | 4 | 小黑 | 26 | boy | 10 | 4 | 10 | 赵六 | 4 | 罗织经 | | 8 | 小心 | 23 | boy | 10 | 4 | 10 | 赵六 | 4 | 罗织经 | | 9 | 小严 | 22 | boy | 10 | 4 | 10 | 赵六 | 4 | 罗织经 | | 5 | 小白 | 23 | girl | 8 | 5 | 8 | 钱七 | 5 | 中庸 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 8 | 钱七 | 5 | 中庸 | | 7 | 小黄 | 23 | boy | 8 | 5 | 8 | 钱七 | 5 | 中庸 | | 5 | 小白 | 23 | girl | 8 | 5 | 8 | 钱七 | 5 | 鬼谷子 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 8 | 钱七 | 5 | 鬼谷子 | | 7 | 小黄 | 23 | boy | 8 | 5 | 8 | 钱七 | 5 | 鬼谷子 | | 5 | 小白 | 23 | girl | 8 | 5 | 8 | 钱七 | 5 | 孙子兵法 | | 6 | 小蓝 | 24 | boy | 8 | 5 | 8 | 钱七 | 5 | 孙子兵法 | | 7 | 小黄 | 23 | boy | 8 | 5 | 8 | 钱七 | 5 | 孙子兵法 | | 4 | 小黑 | 26 | boy | 10 | 4 | 10 | 赵六 | 4 | 道德经 | | 8 | 小心 | 23 | boy | 10 | 4 | 10 | 赵六 | 4 | 道德经 | | 9 | 小严 | 22 | boy | 10 | 4 | 10 | 赵六 | 4 | 道德经 | | 4 | 小黑 | 26 | boy | 10 | 4 | 10 | 赵六 | 4 | 素书 | | 8 | 小心 | 23 | boy | 10 | 4 | 10 | 赵六 | 4 | 素书 | | 9 | 小严 | 22 | boy | 10 | 4 | 10 | 赵六 | 4 | 素书 | | 10 | 小陈 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 荀子 | | 11 | 小辉 | 25 | boy | 3 | 6 | 3 | 刘八 | 6 | 荀子 | | 12 | 小婷 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 荀子 | | 10 | 小陈 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 韩非子 | | 11 | 小辉 | 25 | boy | 3 | 6 | 3 | 刘八 | 6 | 韩非子 | | 12 | 小婷 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 韩非子 | | 10 | 小陈 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 黄帝内经 | | 11 | 小辉 | 25 | boy | 3 | 6 | 3 | 刘八 | 6 | 黄帝内经 | | 12 | 小婷 | 26 | boy | 3 | 6 | 3 | 刘八 | 6 | 黄帝内经 | +-----------+--------+-----+--------+---------+-----------+---------+--------+-----------+-----------------+ 36 rows in set (0.00 sec)
mysql> select students.Name,tearchers.course from students,tearchers where students.ClassID =tearchers.ClassID; +--------+--------------+ | Name | course | +--------+--------------+ | 小明 | 易经 | | 小红 | 易经 | | 小绿 | 易经 | | 小明 | 大学 | | 小红 | 大学 | | 小绿 | 大学 | | 小明 | 论语 | | 小红 | 论语 | | 小绿 | 论语 | | 小黑 | 罗织经 | | 小心 | 罗织经 | | 小严 | 罗织经 | | 小白 | 中庸 | | 小蓝 | 中庸 | | 小黄 | 中庸 | | 小白 | 鬼谷子 | | 小蓝 | 鬼谷子 | | 小黄 | 鬼谷子 | | 小白 | 孙子兵法 | | 小蓝 | 孙子兵法 | | 小黄 | 孙子兵法 | | 小黑 | 道德经 | | 小心 | 道德经 | | 小严 | 道德经 | | 小黑 | 素书 | | 小心 | 素书 | | 小严 | 素书 | | 小陈 | 荀子 | | 小辉 | 荀子 | | 小婷 | 荀子 | | 小陈 | 韩非子 | | 小辉 | 韩非子 | | 小婷 | 韩非子 | | 小陈 | 黄帝内经 | | 小辉 | 黄帝内经 | | 小婷 | 黄帝内经 | +--------+--------------+ 36 rows in set (0.00 sec)
mysql> select Name from students; +--------+ | Name | +--------+ | 小明 | | 小红 | | 小绿 | | 小黑 | | 小白 | | 小蓝 | | 小黄 | | 小心 | | 小严 | | 小陈 | | 小辉 | | 小婷 | +--------+ 12 rows in set (0.01 sec) mysql> select Name as studentName from students; +-------------+ | studentName | +-------------+ | 小明 | | 小红 | | 小绿 | | 小黑 | | 小白 | | 小蓝 | | 小黄 | | 小心 | | 小严 | | 小陈 | | 小辉 | | 小婷 | +-------------+ 12 rows in set (0.01 sec) mysql>
mysql> select students.Name,tearchers.course from students,tearchers where students.ClassID =tearchers.ClassID; +--------+--------------+ | Name | course | +--------+--------------+ | 小明 | 易经 | | 小红 | 易经 | | 小绿 | 易经 | | 小明 | 大学 | | 小红 | 大学 | | 小绿 | 大学 | | 小明 | 论语 | | 小红 | 论语 | | 小绿 | 论语 | | 小黑 | 罗织经 | | 小心 | 罗织经 | | 小严 | 罗织经 | | 小白 | 中庸 | | 小蓝 | 中庸 | | 小黄 | 中庸 | | 小白 | 鬼谷子 | | 小蓝 | 鬼谷子 | | 小黄 | 鬼谷子 | | 小白 | 孙子兵法 | | 小蓝 | 孙子兵法 | | 小黄 | 孙子兵法 | | 小黑 | 道德经 | | 小心 | 道德经 | | 小严 | 道德经 | | 小黑 | 素书 | | 小心 | 素书 | | 小严 | 素书 | | 小陈 | 荀子 | | 小辉 | 荀子 | | 小婷 | 荀子 | | 小陈 | 韩非子 | | 小辉 | 韩非子 | | 小婷 | 韩非子 | | 小陈 | 黄帝内经 | | 小辉 | 黄帝内经 | | 小婷 | 黄帝内经 | +--------+--------------+ 36 rows in set (0.00 sec) mysql> select s.Name,t.course from students as s,tearchers as t where s.ClassID = t.ClassID; +--------+--------------+ | Name | course | +--------+--------------+ | 小明 | 易经 | | 小红 | 易经 | | 小绿 | 易经 | | 小明 | 大学 | | 小红 | 大学 | | 小绿 | 大学 | | 小明 | 论语 | | 小红 | 论语 | | 小绿 | 论语 | | 小黑 | 罗织经 | | 小心 | 罗织经 | | 小严 | 罗织经 | | 小白 | 中庸 | | 小蓝 | 中庸 | | 小黄 | 中庸 | | 小白 | 鬼谷子 | | 小蓝 | 鬼谷子 | | 小黄 | 鬼谷子 | | 小白 | 孙子兵法 | | 小蓝 | 孙子兵法 | | 小黄 | 孙子兵法 | | 小黑 | 道德经 | | 小心 | 道德经 | | 小严 | 道德经 | | 小黑 | 素书 | | 小心 | 素书 | | 小严 | 素书 | | 小陈 | 荀子 | | 小辉 | 荀子 | | 小婷 | 荀子 | | 小陈 | 韩非子 | | 小辉 | 韩非子 | | 小婷 | 韩非子 | | 小陈 | 黄帝内经 | | 小辉 | 黄帝内经 | | 小婷 | 黄帝内经 | +--------+--------------+ 36 rows in set (0.00 sec)
3.外链接
a>.左外联结:
只保留出现在左外连接元算之前(左边)的关系中的元组(以左表为准,)
mysql> select s.Name,t.course from students as s left join tearchers as t on s.ClassID = t.ClassID; +--------+--------------+ | Name | course | +--------+--------------+ | 小明 | 易经 | | 小红 | 易经 | | 小绿 | 易经 | | 小明 | 大学 | | 小红 | 大学 | | 小绿 | 大学 | | 小明 | 论语 | | 小红 | 论语 | | 小绿 | 论语 | | 小黑 | 罗织经 | | 小心 | 罗织经 | | 小严 | 罗织经 | | 小白 | 中庸 | | 小蓝 | 中庸 | | 小黄 | 中庸 | | 小白 | 鬼谷子 | | 小蓝 | 鬼谷子 | | 小黄 | 鬼谷子 | | 小白 | 孙子兵法 | | 小蓝 | 孙子兵法 | | 小黄 | 孙子兵法 | | 小黑 | 道德经 | | 小心 | 道德经 | | 小严 | 道德经 | | 小黑 | 素书 | | 小心 | 素书 | | 小严 | 素书 | | 小陈 | 荀子 | | 小辉 | 荀子 | | 小婷 | 荀子 | | 小陈 | 韩非子 | | 小辉 | 韩非子 | | 小婷 | 韩非子 | | 小陈 | 黄帝内经 | | 小辉 | 黄帝内经 | | 小婷 | 黄帝内经 | +--------+--------------+ 36 rows in set (0.00 sec)
b>.右外联结:
只保留出现在右外连接元算之后(右边)的关系中的元组(以右表为准)
mysql> mysql> s.Name,t.course from students as s right join tearchers as t on s.ClassID = t.ClassID; +--------+--------------+ | Name | course | +--------+--------------+ | 小明 | 易经 | | 小明 | 大学 | | 小明 | 论语 | | 小红 | 易经 | | 小红 | 大学 | | 小红 | 论语 | | 小绿 | 易经 | | 小绿 | 大学 | | 小绿 | 论语 | | 小黑 | 罗织经 | | 小黑 | 道德经 | | 小黑 | 素书 | | 小白 | 中庸 | | 小白 | 鬼谷子 | | 小白 | 孙子兵法 | | 小蓝 | 中庸 | | 小蓝 | 鬼谷子 | | 小蓝 | 孙子兵法 | | 小黄 | 中庸 | | 小黄 | 鬼谷子 | | 小黄 | 孙子兵法 | | 小心 | 罗织经 | | 小心 | 道德经 | | 小心 | 素书 | | 小严 | 罗织经 | | 小严 | 道德经 | | 小严 | 素书 | | 小陈 | 荀子 | | 小陈 | 韩非子 | | 小陈 | 黄帝内经 | | 小辉 | 荀子 | | 小辉 | 韩非子 | | 小辉 | 黄帝内经 | | 小婷 | 荀子 | | 小婷 | 韩非子 | | 小婷 | 黄帝内经 | +--------+--------------+ 36 rows in set (0.00 sec)
c>.全外联接:
全外联结就表示二者左右都出现,保留两个关系中的每一个元组,MySQL并不支持全外链接。
4.自联结
自联结说白了就是自己联结自己
mysql> select t.Name,s.Name from students as s,students as t where s.StudentID = t.TeacherID; +--------+--------+ | Name | Name | +--------+--------+ | 小明 | 小红 | | 小红 | 小明 | | 小绿 | 小绿 | | 小黑 | 小黑 | | 小白 | 小白 | | 小蓝 | 小白 | | 小黄 | 小白 | | 小心 | 小黑 | | 小严 | 小黑 | | 小陈 | 小蓝 | | 小辉 | 小蓝 | | 小婷 | 小蓝 | +--------+--------+ 12 rows in set (0.01 sec)
三.子查询
在查询中嵌套的查询我们就叫做子查询。MySQL并不擅长子查询,因此我们最后避免使用子查询,且大多数的子查询都可以改为链接查询。
1.用于WHERE中的子查询
a.用于比较表达式中的子查询,这种情况下子查询的返回值只能有一个!
b.用于EXISTS中的子查询,这种情况下是判断存在与否
mysql> select Name,ClassID from students where ClassID = 7 or ClassID = 8 ; +--------+---------+ | Name | ClassID | +--------+---------+ | 小明 | 7 | | 小红 | 7 | | 小绿 | 7 | | 小白 | 8 | | 小蓝 | 8 | | 小黄 | 8 | +--------+---------+ 6 rows in set (0.00 sec) mysql>
c.用于IN中的子查询,这种情况下是判断存在于指定列表中
2.用于FROM中子查询
mysql> select * from students where Gender='boy'; +-----------+--------+-----+--------+---------+-----------+ | StudentID | Name | Age | Gender | ClassID | TeacherID | +-----------+--------+-----+--------+---------+-----------+ | 1 | 小明 | 25 | boy | 7 | 2 | | 2 | 小红 | 23 | boy | 7 | 1 | | 4 | 小黑 | 26 | boy | 10 | 4 | | 6 | 小蓝 | 24 | boy | 8 | 5 | | 7 | 小黄 | 23 | boy | 8 | 5 | | 8 | 小心 | 23 | boy | 10 | 4 | | 9 | 小严 | 22 | boy | 10 | 4 | | 10 | 小陈 | 26 | boy | 3 | 6 | | 11 | 小辉 | 25 | boy | 3 | 6 | | 12 | 小婷 | 26 | boy | 3 | 6 | +-----------+--------+-----+--------+---------+-----------+ 10 rows in set (0.00 sec) mysql> select s.Name,s.Age,s.Gender from (select * from students where Gender='boy' ) as s where s.Age > 23; +--------+-----+--------+ | Name | Age | Gender | +--------+-----+--------+ | 小明 | 25 | boy | | 小黑 | 26 | boy | | 小蓝 | 24 | boy | | 小陈 | 26 | boy | | 小辉 | 25 | boy | | 小婷 | 26 | boy | +--------+-----+--------+ 6 rows in set (0.01 sec)
四.MySQL的联合查询:
联合查询是把两个或多个查询语句的结果合并成一个结果进行输出。用法格式:“ select clauase union select clause union..... ”
mysql> explain select Name,Age from students where Age > 24 G #解释命令,查看命令的执行过程 *************************** 1. row *************************** id: 1 select_type: SIMPLE table: students type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 12 Extra: Using where 1 row in set (0.01 sec) mysql> alter table students add index(Age); #创建索引 Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show indexes from students; #查看索引 +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | students | 0 | PRIMARY | 1 | StudentID | A | 12 | NULL | NULL | | BTREE | | | | students | 0 | PRIMARY | 2 | Name | A | 12 | NULL | NULL | | BTREE | | | | students | 1 | Age | 1 | Age | A | 12 | NULL | NULL | | BTREE | | | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 3 rows in set (0.00 sec) mysql> explain select Name,Age from students where Age > 23 G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: students type: range possible_keys: Age #由于我们创建了索引,因此在查询的过程中我们是可能会用到该索引的。 key: Age key_len: 1 ref: NULL #但是由于我们的表实在是太小了,因此即使我们创建了索引咱们这还是没有用到 rows: 6 Extra: Using where; Using index 1 row in set (0.01 sec)
六.视图
MySQL视图是一张虚表,它是存储下来的select语句,当然你可以理解为是MySQL的子查询,只不过子查询是在内存中保存,而试图视可以将查询的结果以一个表的形式存储起来。
1.创建视图
mysql> show tables; +----------------------+ | Tables_in_chensiting | +----------------------+ | Classes | | score | | students | | tearchers | +----------------------+ 4 rows in set (0.00 sec) mysql> show table status where Name='yanhuihuang_view' G #创建视图 Empty set (0.00 sec) mysql> show table status where Name='chensiting_view' G *************************** 1. row *************************** Name: chensiting_view #这个就是我们刚刚创建的视图名称。 Engine: NULL Version: NULL Row_format: NULL Rows: NULL Avg_row_length: NULL Data_length: NULL Max_data_length: NULL Index_length: NULL Data_free: NULL Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Collation: NULL Checksum: NULL Create_options: NULL Comment: VIEW #我们会发现它是个虚表,没有存储引擎等之类的属性。 1 row in set (0.00 sec) mysql> select * from chensiting_view; #当然我们也可以查看咱们创建的试图数据 +-----------+--------+-----+ | StudentID | Name | Age | +-----------+--------+-----+ | 3 | 小绿 | 21 | | 9 | 小严 | 22 | | 2 | 小红 | 23 | | 5 | 小白 | 23 | | 7 | 小黄 | 23 | | 8 | 小心 | 23 | | 6 | 小蓝 | 24 | | 1 | 小明 | 25 | | 11 | 小辉 | 25 | | 4 | 小黑 | 26 | | 10 | 小陈 | 26 | | 12 | 小婷 | 26 | +-----------+--------+-----+ 12 rows in set (0.00 sec) mysql> show create view chensiting_view G #查看视图是如何创建的 *************************** 1. row *************************** View: chensiting_view Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `chensiting_view` AS select `students`.`StudentID` AS `StudentID`,`students`.`Name` AS `Name`,`students`.`Age` AS `Age` from `students` character_set_client: utf8 collation_connection: utf8_general_ci 1 row in set (0.01 sec)
2.删除视图
mysql> show tables; +----------------------+ | Tables_in_chensiting | +----------------------+ | Classes | | chensiting_view | | score | | students | | tearchers | +----------------------+ 5 rows in set (0.00 sec) mysql> drop view chensiting_view; Query OK, 0 rows affected (0.00 sec) mysql> show tables; +----------------------+ | Tables_in_chensiting | +----------------------+ | Classes | | score | | students | | tearchers | +----------------------+ 4 rows in set (0.00 sec)
七.MySQL的数据插入操作
replace 替换表中数据,用法同insert,除了在新插入的数据与表中的主键或唯一索引定义的数据相同会替换老的行。insert的用法有以下三种: 第一种: insert into tb_name [(col1,col2,....)]{values(批量插入)|value(插入单行)}(val1,val2,...)[,(val21,val22,....),....] 第二种:(这种方式适合插入一行) insert into tb_name set col_name=val1,col2=val2,.... 第三种(将一个表中的数据插入到另外一张表中): insert into tb_name select clause
八.MySQL的更新操作
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1=val1 [, col_name2={val2] ... [WHERE where_condition] #查找过滤的条件 [ORDER BY ...] #将查询的结果进行排序操作 [LIMIT row_count] #限定修改的行数 update通常情况下,必须要使用where字句,或者使用limit限制要修改的行数 --safe-updates:启动时应该带选项
九.MySQL表的删除操作
delete:删除数据
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
truncate tb_name 重置表的所有内容,当然也可以清空表的自动增长的数值。