初识Mysql(part17)--我需要知道的3条Mysql语句之联结

学习笔记,以代码和例子堆砌而成,方便查阅。
参考书籍:《Mysql必知必会》等
要点:联结、INNER JOIN、ON关键字


此Blog会用到下面3个表.

temp_store表:

# pr_id, store_num
'1001', '2000'
'1002', '1000'
'1003', '500'
'1004', '1000'
'1005', '700'

temp_product表:

# pr_id, pro_name, price
'1001', 'Apple', '3'
'1002', 'Pen', '50'
'1003', 'Book', '35'
'1004', 'Hamburger', '10'
'1005', 'Toy', '15'

temp_shop表:

# id, pr_id, sale_num, customer
'1', '1001', '10', 'Ada'
'2', '1001', '4', 'Peter'
'3', '1001', '2', 'Jack'
'4', '1002', '10', 'Black'
'5', '1002', '2', 'Tim'
'6', '1003', '5', 'Kit'
'7', '1004', '2', 'Bunny'
'8', '1005', '100', 'Horde'
'9', '1005', '5', 'Mansion'

等值联结


SELECT pro_name, customer FROM temp_product, temp_shop WHERE temp_product.pr_id=temp_shop.pr_id;

查询结果:

# pro_name, customer
'Apple', 'Ada'
'Apple', 'Peter'
'Apple', 'Jack'
'Pen', 'Black'
'Pen', 'Tim'
'Book', 'Kit'
'Hamburger', 'Bunny'
'Toy', 'Horde'
'Toy', 'Mansion'

在这个查询语句中,SELECT 指定要检索的列,这里我们检索temp_product表中的产品名称(pro_name)和temp_shop表中的客户(customer)

再来看FROM子句,这里我们的FROM子句列出了两个表temp_product和temp_shop,这俩表就是SELECT语句要联结的两个表的名字。这俩表用WHERE子句联结,WHERE告诉MYSQL匹配temp_product表中的pr_id和temp_shop表中的pr_id


我们看看不使用WHERE子句,会发生啥事情:

SELECT pro_name, customer FROM temp_product, temp_shop;

查询结果:

# pro_name, customer
'Apple', 'Ada'
'Pen', 'Ada'
'Book', 'Ada'
'Hamburger', 'Ada'
'Toy', 'Ada'
'Apple', 'Peter'
'Pen', 'Peter'
'Book', 'Peter'
'Hamburger', 'Peter'
'Toy', 'Peter'
'Apple', 'Jack'
'Pen', 'Jack'
'Book', 'Jack'
'Hamburger', 'Jack'
'Toy', 'Jack'
'Apple', 'Black'
'Pen', 'Black'
'Book', 'Black'
'Hamburger', 'Black'
'Toy', 'Black'
'Apple', 'Tim'
'Pen', 'Tim'
'Book', 'Tim'
'Hamburger', 'Tim'
'Toy', 'Tim'
'Apple', 'Kit'
'Pen', 'Kit'
'Book', 'Kit'
'Hamburger', 'Kit'
'Toy', 'Kit'
'Apple', 'Bunny'
'Pen', 'Bunny'
'Book', 'Bunny'
'Hamburger', 'Bunny'
'Toy', 'Bunny'
'Apple', 'Horde'
'Pen', 'Horde'
'Book', 'Horde'
'Hamburger', 'Horde'
'Toy', 'Horde'
'Apple', 'Mansion'
'Pen', 'Mansion'
'Book', 'Mansion'
'Hamburger', 'Mansion'
'Toy', 'Mansion'

语句执行记录:

21:56:15	SELECT pro_name, customer FROM temp_product, temp_shop LIMIT 0, 1000	45 row(s) returned	0.000 sec / 0.000 sec

可以看到,输出了9*5=45条记录,啧啧啧,真残暴。


内联结


SELECT pro_name, customer FROM temp_product INNER JOIN temp_shop ON temp_product.pr_id=temp_shop.pr_id;

查询结果:

# pro_name, customer
'Apple', 'Ada'
'Apple', 'Peter'
'Apple', 'Jack'
'Pen', 'Black'
'Pen', 'Tim'
'Book', 'Kit'
'Hamburger', 'Bunny'
'Toy', 'Horde'
'Toy', 'Mansion'

这条SQL语句中,SELECT语句和前面那条SELECT语句一毛一样,但是FROM子句不同,这里,俩表之间的关系以INNER JOIN指定,在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句。


其实等值联结也称为内部联结,所以除了SQL代码不同,我们看到这俩语句得到的结果是一样的,但是我们还是支持使用这种写法。


联结多个表


SELECT pro_name, store_num, customer FROM temp_product, temp_store, temp_shop WHERE temp_product.pr_id=temp_shop.pr_id AND temp_store.pr_id=temp_shop.pr_id AND temp_shop.SALE_NUM=2;

查询结果:

# pro_name, store_num, customer
'Apple', '2000', 'Jack'
'Pen', '1000', 'Tim'
'Hamburger', '1000', 'Bunny'
发布了219 篇原创文章 · 获赞 102 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/m0_37422217/article/details/105646265