sql记录

join后,再使用on、where筛选的区别:

SELECT * FROM A;
SELECT * FROM B;
以上是两张表的机构

SELECT * FROM A LEFT JOIN B ON A.id=b.a_id ;

语句一   :   SELECT * FROM A LEFT JOIN B ON A.id=b.a_id AND B.id <3;
语句二:  SELECT * FROM A LEFT JOIN B ON A.id=b.a_id WHERE B.id <3;

两个语句查询出来的结果是有差异的
sql查询的关键字顺序为  from -> where -> group by-> having ->order by

left join 是在from范围的所以先on条件筛选,然后再做left join,而where是在left join的结果之后再次筛选

语句一(等价于SELECT *FROM A LEFT JOIN (SELECT * FROM B WHERE B.id < 3) b2 ON A.id = b2.a_id;)

按照on后的条件筛选B.id<3
1中查询出的结果与A left join

语句二
先left join 
然后再根据where条件再次筛选

 

一对多查询,显示出一行数据:

select   c.name,  (select   group_concat(name) from student   s   where  s.class_id =c.id ) from  class  c;

SELECT company.*,(SELECT GROUP_CONCAT(contact_name) FROM company LEFT JOIN company_contact on company.id=company_contact.company_id ) as b FROM company

参考:https://blog.csdn.net/textalign/article/details/71746973 https://www.cnblogs.com/lucky-girl/p/9482169.html


关于mysql添加索引的命令:

ALTER TABLE `student`
  ADD PRIMARY KEY (`id`),   //添加主键(索引)
  ADD UNIQUE KEY `email` (`email`),  //添加唯一索引
  ADD KEY `name` (`name`);  //添加普通索引

这跟使用以下添加命令,效果一样:

ALTER TABLE `student` ADD UNIQUE(`email`); //这也是添加唯一索引的命令;
ALTER TABLE `student` ADD UNIQUE `email_key` (`email`);

ALTER TABLE `student` ADD INDEX(`name`); 这也是添加普通索引的命令;
ALTER TABLE `student` ADD INDEX `name_key` (`name`);

 

关于排序规则的选择,一般是utf8_general_ci,参考:https://blog.csdn.net/wan212000/article/details/124706692



posted on 2020-04-09 10:55  飞哥100  阅读(129)  评论(0)    收藏  举报

导航