天天看點

MySQL資料庫查詢資料操作篇第二十一篇連接配接查詢

21.連接配接查詢(單獨一篇)
mysql> create table suppliers
    -> (
    -> s_id int not null auto_increment,
    -> sname    char(50) not null,
    -> s_city   char(50) null,
    -> s_zip    char(50) not null,
    -> s_call   char(50) not null,
    -> primary key (s_id)
    -> );
Query OK, 0 rows affected

mysql> insert into suppliers(s_id,sname,s_city,s_zip,s_call)
    -> values(1001,"fastfruit inc","tianjing","30000","48075"),
    -> (1002,"lt supplies","chongqing","40000","44332"),
    -> (1003,"acme","shanghai","25809","90046"),
    -> (1004,"good boy","anqing","528437","11123"),
    -> (1005,"oldboy","hefei","246100","33322")
    -> ;
Query OK, 5 rows affected
Records: 5  Duplicates: 0  Warnings: 0
查詢之前,檢視兩表的結構:
mysql> desc fruits;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| f_id    | char(10)    | NO   | PRI | NULL    |       |
| s_id    | int(11)     | NO   |     | NULL    |       |
| f_name  | char(255)   | NO   |     | NULL    |       |
| f_price | varchar(11) | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set

mysql> desc suppliers;
+--------+----------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra          |
+--------+----------+------+-----+---------+----------------+
| s_id   | int(11)  | NO   | PRI | NULL    | auto_increment |
| sname  | char(50) | NO   |     | NULL    |                |
| s_city | char(50) | YES  |     | NULL    |                |
| s_zip  | char(50) | NO   |     | NULL    |                |
| s_call | char(50) | NO   |     | NULL    |                |
+--------+----------+------+-----+---------+----------------+
5 rows in set

由結果可以看到,fruits表和suppliers表中都有相同資料類型的字段s_id。兩個表通過s_id字段建立聯系。接下來從fruits表中查詢f_name,f_price字段,從suppliers表中查詢s_id,s_name:
mysql> select suppliers.s_id,sname,f_name,f_price
    -> from fruits,suppliers
    -> where fruits.s_id = suppliers.s_id;
Empty set

在fruits表和suppliers表之間,使用inner join 文法進行内連接配接查詢:
mysql> select suppliers.s_id,sname,f_name,f_price
    -> from fruits inner join suppliers
    -> on fruits.s_id = suppliers.s_id;
Empty set


mysql> create table orders
    -> (
    -> o_num    int not null auto_increment,
    -> o_date   datetime not null,
    -> c_id int not null,
    -> primary key (o_num)
    -> );
Query OK, 0 rows affected
mysql> insert into orders(o_num,o_date,c_id)
    -> values(3001,"2019-12-11",1001),
    -> (3002,"2019-12-12",1002),
    -> (3003,"2019-12-13",1003)
    -> ;
Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0

左連接配接:
mysql> select customers.c_id,orders.o_num
    -> from customers left outer join orders
    -> on customers.c_id = orders.c_id
    -> ;
+-------+-------+
| c_id  | o_num |
+-------+-------+
| 10086 | NULL  |
| 10087 | NULL  |
| 10088 | NULL  |
+-------+-------+
3 rows in set

mysql> select suppliers.s_id,sname,f_name,f_price
    -> from fruits inner join suppliers
    -> on fruits.s_id = suppliers.s_id
    -> order by fruits.s_id;
Empty set      

繼續閱讀