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
浙公网安备 33010602011771号