语法篇 链接查询

一、初始化数据库

1、Tbl_Product产品表,Tbl_Sales_Detail销售详情表

CREATE DATABASE Test  

CREATE TABLE `Tbl_Product` (
  `pid` int(4) NOT NULL auto_increment,
  `pname` char(20) default NULL,
  `pcode` char(20) default NULL,
  PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Tbl_Sales_Detail` (
  `aid` int(4) NOT NULL auto_increment,
  `pcode` char(20) default NULL,
  `saletime` date default NULL,
  PRIMARY KEY (`aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `Tbl_Product` VALUES ('1', 'A', 'AC');
INSERT INTO `Tbl_Product` VALUES ('2', 'B', 'DE');
INSERT INTO `Tbl_Product` VALUES ('3', 'C', 'XXX');

INSERT INTO `Tbl_Sales_Detail` VALUES ('1', 'AC', '2012-07-23');
INSERT INTO `Tbl_Sales_Detail` VALUES ('2', 'DE', '2012-07-16');
INSERT INTO `Tbl_Sales_Detail` VALUES ('3', 'AC', '2012-07-05');
INSERT INTO `Tbl_Sales_Detail` VALUES ('4', 'AC', '2012-07-05');

查询两个数据表情况

SELECT * FROM Tbl_Product

SELECT * FROM Tbl_Sales_Detail

 2、实现查询的链接

 常用查询

SQL语句执行的时候是有一定顺序的。理解这个顺序对SQL的使用和学习有很大的帮助。
1from
先选择一个表,或者说源头,构成一个结果集。
2where
然后用where对结果集进行筛选。筛选出需要的信息形成新的结果集。
3group by
对新的结果集分组。
4having
筛选出想要的分组。
5select
选择列。
6order by
当所有的条件都弄完了。最后排序。

 多表联查

 left join左连接(是返回左表中所有的行及右表中符合条件的行)

容易误区 查询是以a表为主,就去匹配a表的数据,那么查询数据的条数就等于a表这种是错误的。

而是a表为主查询,(1、每行遍历匹配满足条件的数据,最后合计,2、不满足条件,就默认null))

SELECT * FROM Tbl_Product a LEFT JOIN Tbl_Sales_Detail b ON a.pcode=b.pcode

如图:

right join右连接,是返回右表中所有的行及左表中符合条件的行。

(反过来,以b为主表,每行去遍历匹配查询(1、每行遍历匹配满足条件的数据,最后合计,2、不满足条件,就默认null))

SELECT * FROM Tbl_Product a RIGHT JOIN Tbl_Sales_Detail b ON a.pcode=b.pcode

如图:

 细节:查询 pid  pname 虽然改了 right 但是 查出的字段顺序 还是 没有改变 

 比如 INSERT INTO `Tbl_Sales_Detail` VALUES ('5', 'SS', '2012-07-23');

inner join(等值连接) 只返回两个表中联结字段相等的行  可以简写 join 查询 

 简写

 

select * from Tbl_Product,Tbl_Sales_Detail

select * from Tbl_Product inner join Tbl_Sales_Detail

select * from Tbl_Product join Tbl_Sales_Detail

//加条件和不加条件不一样

 

union:联合的意思,即把两次或多次查询结果合并起来。 union会去掉重复的行。

(select * from Tbl_Sales_Detail order by aid) union (select * from Tbl_Sales_Detail order by aid)

如图

 如果不想去掉重复的行,可以使用union all。

 可以看出,字段数没变,变动的只是行数

 

posted @ 2020-08-16 18:12  反骨少年  阅读(220)  评论(0)    收藏  举报