请参见下列MySQL实验:
创新互联公司专注于企业全网整合营销推广、网站重做改版、修水网站定制设计、自适应品牌网站建设、H5开发、成都商城网站开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为修水等各大城市提供网站开发制作服务。
-- 生成orderproduct表
create table orderproduct(orderid char(11) primary key,productid varchar(255));
-- product表
create table product(productid varchar(10) primary key,productname varchar(50));
-- 向订单表插入数据
insert into orderproduct values
(20161116001,'D0020'),
(20161116035,'E0055'),
(20161101048,'A0035'),
(20161005321,'B0049'),
(20160901515,'C0038'),
(20160814525,'C0038,A0035,E0055'),
(20160714510,'D0020,B0049');
-- 向产品表插入数据
insert into product values
('D0020','立顿牌绿茶'),
('E0055','越南小面包'),
('A0035','珠宝台历'),
('B0049','护手霜'),
('C0038','运动水壶');
select * from orderproduct;
select * from product;
-- 返回第一问的SQL语句
select a.orderid,min(a.productid) as productid,
group_concat(b.productname) as productname
from orderproduct a,product b
where b.productname in ('运动水壶','珠宝台历','越南小面包')
and instr(a.productid,b.productid)0
group by a.orderid;
-- 返回第二问的SQL语句
select a.orderid,min(a.productid) as productid,
group_concat(b.productname) as productname
from orderproduct a,product b
where b.productname in ('立顿牌绿茶','护手霜')
and instr(a.productid,b.productid)0
group by a.orderid;
联表查询 你偏向用户表中的数据 左链接 或者有链接都可以
语法:
SELECT fields FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field1 AND ON table1.field2 compopr table2.field2 OR ON table1.field3 compopr table2.field3
也可以
SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOER] [( ]tablex[INNER JOIN] ON table1.field1 compopr table2.field1 ON table1.field2 compopr table2.field2 ON table1.field3 compopr table2.field3
外部连接返回更多记录,在结果中保留不匹配的记录,不管存不存在满足条件的记录都要返回另一侧的所有记录。
FROM table [LEFT|RIGHT]JOIN table2 ON table1.field1comparision table.field2
用左连接来建立外部连接,在表达式的左边的表会显示其所有的数据
例:不管有没有定货量,返回所有商品
SELECT ProductName ,OrderID FROM Products LEFT JOIN Orders ON Products.PrductsID=Orders.ProductID
右连接与左连接的差别在于:不管左侧表里有没有匹配的记录,它都从左侧表中返回所有记录。
例:如果想了解客户的信息,并统计各个地区的客户分布,这时可以用一个右连接,即使某个地区没有客户,也要返回客户信息。 空值不会相互匹配,可以通过外连接才能测试被连接的某个表的字段是否有空值。
SELECT * FROM talbe1 LEFT JOIN table2 ON table1.a=table2.c
in(v1,v2..vn) ,符合v1,v2,,,vn才能被查出 IN关键字可以判断某个字段的值是否在指定的集合中。如果字段的值在集合中,则满足查询条件,该纪录将被查询出来。如果不在集合中,则不满足查询条件。其语法规则如下:[ NOT ] IN ( 元素1, 元素2, …, 元素n ) 例如: select * from STUDENT where STU_AGE in(11,12);