高級查詢(mysql)

高級查詢

> 其他+V:w891123884

MySQL提供了幾種高級查詢語句,用於複雜場所下進行多表一起查詢,這樣就會用到內連接查詢、外連接查詢、自然連接查詢、交叉連接查詢和聯合查詢,以滿足日常業務查詢的需求,從而更能體會MySQL強大的功能。

1、內連接查詢

SELECT*FROM 左表 [INNER] JOIN 右表 ON 左表.字段=右表.字段;

mysql> select*from user;
+----+-------+------+------+----------+---------+-----------+
| id | name  | sex  | age  | password | phone   | loginname |
+----+-------+------+------+----------+---------+-----------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |
+----+-------+------+------+----------+---------+-----------+
5 rows in set (0.00 sec)

mysql> use shop;
Database changed
mysql> create table score(
    -> id int not null,
    -> score nvarchar(233),
    -> grage nvarchar(233),
    -> primary key(id));
Query OK, 0 rows affected (0.07 sec)


mysql> insert into score values(1,'88','優秀');
Query OK, 1 row affected (0.02 sec)

mysql> insert into score values(2,'70','中等');
Query OK, 1 row affected (0.02 sec)

mysql> insert into score values(3,'60','不優秀');
Query OK, 1 row affected (0.02 sec)

mysql> select*from score;
+----+-------+--------+
| id | score | grage  |
+----+-------+--------+
|  1 | 88    | 優秀   |
|  2 | 70    | 中等   |
|  3 | 60    | 不優秀 |
+----+-------+--------+
3 rows in set (0.02 sec)

mysql> select*from user u inner join score s on u.id=s.id;  
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
| id | name  | sex  | age  | password | phone   | loginname | id | score | grage  |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  1 | 88    | 優秀   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  2 | 70    | 中等   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  3 | 60    | 不優秀 |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
3 rows in set (0.02 sec)

mysql> select*from user u join score s on u.id=s.id;
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
| id | name  | sex  | age  | password | phone   | loginname | id | score | grage  |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  1 | 88    | 優秀   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  2 | 70    | 中等   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  3 | 60    | 不優秀 |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
3 rows in set (0.00 sec)

mysql> select u.id uid,u.name,u.sex,u.age,s.score,s.grage from user u join score s on u.id=s.id; 
+-----+-------+------+------+-------+--------+
| uid | name  | sex  | age  | score | grage  |
+-----+-------+------+------+-------+--------+
|   1 | david || 19   | 88    | 優秀   |
|   2 | 小明  || 22   | 70    | 中等   |
|   3 | 小花  || 21   | 60    | 不優秀 |
+-----+-------+------+------+-------+--------+
3 rows in set (0.00 sec)

mysql> select u.id uid,u.name,u.sex,u.age,s.score,s.grage from user u join score s u.id=s.id;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'u.id=s.id' at line 1
mysql> select*from user u join score s;
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
| id | name  | sex  | age  | password | phone   | loginname | id | score | grage  |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  1 | 88    | 優秀   |
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  2 | 70    | 中等   |
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  3 | 60    | 不優秀 |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  1 | 88    | 優秀   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  2 | 70    | 中等   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  3 | 60    | 不優秀 |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  1 | 88    | 優秀   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  2 | 70    | 中等   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  3 | 60    | 不優秀 |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  1 | 88    | 優秀   |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  2 | 70    | 中等   |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  3 | 60    | 不優秀 |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  1 | 88    | 優秀   |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  2 | 70    | 中等   |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  3 | 60    | 不優秀 |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
15 rows in set (0.00 sec)

mysql> select*from user u inner join score s on u.id=s.id;
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
| id | name  | sex  | age  | password | phone   | loginname | id | score | grage  |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  1 | 88    | 優秀   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  2 | 70    | 中等   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  3 | 60    | 不優秀 |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
3 rows in set (0.00 sec)

mysql>  select*from user u inner join score s on u.id>s.id;
+----+------+------+------+----------+---------+-----------+----+-------+--------+
| id | name | sex  | age  | password | phone   | loginname | id | score | grage  |
+----+------+------+------+----------+---------+-----------+----+-------+--------+
|  2 | 小明 || 22   | 123456   | 444444  | hfhhj     |  1 | 88    | 優秀   |
|  3 | 小花 || 21   | 123456   | 6666666 | hfhhkj    |  1 | 88    | 優秀   |
|  3 | 小花 || 21   | 123456   | 6666666 | hfhhkj    |  2 | 70    | 中等   |
|  4 | 小敏 || 25   | 123456   | 8888888 | hfhhj     |  1 | 88    | 優秀   |
|  4 | 小敏 || 25   | 123456   | 8888888 | hfhhj     |  2 | 70    | 中等   |
|  4 | 小敏 || 25   | 123456   | 8888888 | hfhhj     |  3 | 60    | 不優秀 |
|  5 | 小華 || 26   | 123456   | 999999  | hfhhj     |  1 | 88    | 優秀   |
|  5 | 小華 || 26   | 123456   | 999999  | hfhhj     |  2 | 70    | 中等   |
|  5 | 小華 || 26   | 123456   | 999999  | hfhhj     |  3 | 60    | 不優秀 |
+----+------+------+------+----------+---------+-----------+----+-------+--------+
9 rows in set (0.00 sec)

2、外連接查詢

SELECT * FROM 左表 LEFT/RIGHT JOIN 右表 ON 左表.字段=右表.字段;

mysql> select*from user u left join score s on u.id=s.id;+----+-------+------+------+----------+---------+-----------+------+-------+--------+
| id | name  | sex  | age  | password | phone   | loginname | id   | score | grage  |
+----+-------+------+------+----------+---------+-----------+------+-------+--------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |    1 | 88    | 優秀   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |    2 | 70    | 中等   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |    3 | 60    | 不優秀 |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     | NULL | NULL  | NULL   |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     | NULL | NULL  | NULL   |
+----+-------+------+------+----------+---------+-----------+------+-------+--------+
5 rows in set (0.02 sec)

mysql> select*from user u right join score s on u.id=s.id;+------+-------+------+------+----------+---------+-----------+----+-------+--------+
| id   | name  | sex  | age  | password | phone   | loginname | id | score | grage  |
+------+-------+------+------+----------+---------+-----------+----+-------+--------+
|    1 | david || 19   | 123456   | 5555555 | hfhhj     |  1 | 88    | 優秀   |
|    2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  2 | 70    | 中等   |
|    3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  3 | 60    | 不優秀 |
+------+-------+------+------+----------+---------+-----------+----+-------+--------+
3 rows in set (0.00 sec)

3、交叉連接查詢

SELECT *左表 CROSS JOIN 右表 或 FROM 左表,右表;

mysql> select*from user cross join score;交叉連接
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
| id | name  | sex  | age  | password | phone   | loginname | id | score | grage  |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  1 | 88    | 優秀   |
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  2 | 70    | 中等   |
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  3 | 60    | 不優秀 |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  1 | 88    | 優秀   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  2 | 70    | 中等   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  3 | 60    | 不優秀 |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  1 | 88    | 優秀   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  2 | 70    | 中等   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  3 | 60    | 不優秀 |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  1 | 88    | 優秀   |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  2 | 70    | 中等   |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  3 | 60    | 不優秀 |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  1 | 88    | 優秀   |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  2 | 70    | 中等   |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  3 | 60    | 不優秀 |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
15 rows in set (0.00 sec)

mysql> select*from user,score;from兩個表
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
| id | name  | sex  | age  | password | phone   | loginname | id | score | grage  |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  1 | 88    | 優秀   |
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  2 | 70    | 中等   |
|  1 | david || 19   | 123456   | 5555555 | hfhhj     |  3 | 60    | 不優秀 |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  1 | 88    | 優秀   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  2 | 70    | 中等   |
|  2 | 小明  || 22   | 123456   | 444444  | hfhhj     |  3 | 60    | 不優秀 |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  1 | 88    | 優秀   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  2 | 70    | 中等   |
|  3 | 小花  || 21   | 123456   | 6666666 | hfhhkj    |  3 | 60    | 不優秀 |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  1 | 88    | 優秀   |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  2 | 70    | 中等   |
|  4 | 小敏  || 25   | 123456   | 8888888 | hfhhj     |  3 | 60    | 不優秀 |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  1 | 88    | 優秀   |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  2 | 70    | 中等   |
|  5 | 小華  || 26   | 123456   | 999999  | hfhhj     |  3 | 60    | 不優秀 |
+----+-------+------+------+----------+---------+-----------+----+-------+--------+
15 rows in set (0.00 sec)

4、聯合查詢

SELECT column_name FROM table1
UNION (all)
SELECT column_name FROM table2;

mysql> select id from user;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
+----+
5 rows in set (0.00 sec)

mysql> select id from user       集合
    -> union
    -> select id from score;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
+----+
5 rows in set (0.02 sec)

mysql> select id,name from user
    -> union
    -> select id,score from score;
+----+-------+
| id | name  |
+----+-------+
|  1 | david |
|  2 | 小明  |
|  3 | 小花  |
|  4 | 小敏  |
|  5 | 小華  |
|  1 | 88    |
|  2 | 70    |
|  3 | 60    |
+----+-------+
8 rows in set (0.00 sec)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章