
简单的多表查询 对表的常规操作事例
注 注 注 意:在做每一题时思考如何将需求转化成sql语句,思考逻辑,思考怎样实现,建议手动操作服用,效果更佳。建议多找案例多练!多练!多练!多思考!,学会sql则是水到渠成。
建立供应商信息表
create table supplierss(
s_id int primary key,
s_name varchar(50),
s_city varchar(30)
);
insert into supplierss values(
101,'供应商01','北京市'),
(102,'供应商02','北京市'),
(103,'供应商03','上海市'),
(104,'供应商04','北京市'),
(105,'供应商05','广州市'),
(106,'供应商06','保定市'),
(107,'供应商07','北京市'),
(108,'供应商08','石家庄市'),
(109,'供应商09','北京市');
新建商品表
CREATE TABLE fruitss(
f_id char(10) not null,
s_id int not null,
f_name char(255) not null,
f_price DECIMAL(8,2) not null,
PRIMARY KEY (f_id)
);
商品表插入信息
insert into fruitss(f_id,s_id,f_name,f_price)values
('a1',101,'apple',5.2),
('b1',101,'blackbeery',10.2),
('bs1',102,'orange',11.2),
('bs2',105,'melon',8.2),
('t1',102,'banana',10.3),
('t2',102,'grape',5.3),
('o2',103,'coconut',9.2),
('c0',101,'cherry',3.2),
('a2',103,'apricot',25.2),
('12',104,'lemon',6.4),
('b2',104,'berry',7.6),
('m1',106,'mango',15.6),
('m2',105,'xbabay',2.6),
('t4',107,'xbababa',3.6),
('b5',107,'xxxx',3.6);
1.查询apple这个商品的供货商信息
正常思维可写成
SELECT fruitss.s_id,f_name,f_price,s_name,s_city
FROM supplierss,fruitss
WHERE f_name='apple' and fruitss.s_id=supplierss.s_id;
-----使用别名可写成
SELECT f.s_id,f_name,f_price,s_name,s_city
FROM supplierss s,fruitss f
WHERE f_name='apple' and f.s_id=s.s_id;
ANSI对多表连接规定的写法(制定sql标准的组织)
INNER JOIN 内链接,inner 可省略
SELECT f.s_id,f_name,f_price,s_name,s_city
FROM supplierss s inner JOIN fruitss f
on s.s_id=f.s_id
WHERE f_name='apple';
2.查询所有商品以及供应商的信息
正常思维可写成,看查询结果没有供应商品的供应商无信息
SELECT f.s_id,f_name,f_price,s_name,s_city
FROM supplierss s inner JOIN fruitss f
on s.s_id=f.s_id;
使用外连接将所有的供应商信息查询出来(左外连接 LEFT JOIN 右外连接 RIGHT JOIN)
SELECT f.s_id,f_name,f_price,s_name,s_city
FROM supplierss s LEFT JOIN fruitss f
on s.s_id=f.s_id;
3.复合条件连接查询

可对查询出的结果进行排序或其他操作,与单表操作无异。
子查询
比如一个select 语句中嵌套一个select语句
4.查询商品的平均价格
SELECT avg(f_price) FROM fruitss;
5.查询 所有价格高于 平均价格的商品信息(先执行子查询,再执行外部查询)
SELECT * FROM fruitss
WHERE f_price>(SELECT avg(f_price) FROM fruitss);