MySQL的DML常用語法格式
我們知道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:[email protected]
#建立資料庫
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)用法格式:“left_tb LEFT JOIN right_tb ON 條件 ”案例展示
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)用法格式:“left_tb RIGHT JOIN right_tb ON 條件 ”案例展示
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)用法格式:“select alias.col,....FROM(SELECT CLUSE) alias WHERE condition”案例展示
四.MySQL的聯合查詢:
聯合查詢是把兩個或多個查詢語句的結果合併成一個結果進行輸出。用法格式:“select clauase union select clause union.....”
mysql> select Name from students union select Name from tearchers; #注意,兩張表必須都要有相同型別的欄位喲,即Name欄位 +--------+ | Name | +--------+ | 小明 | | 小紅 | | 小綠 | | 小黑 | | 小白 | | 小藍 | | 小黃 | | 小心 | | 小嚴 | | 小陳 | | 小輝 | | 小婷 | | 張三 | | 李四 | | 王五 | | 趙六 | | 錢七 | | 劉八 | +--------+ 18 rows in set (0.01 sec)
五.索引
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 重置表的所有內容,當然也可以清空表的自動增長的數值。