SQL合并查询、连接查询、SQL数据类型
关联查询例题
select count(*) from t_activity a join t_user u1 on a.activity_owner = u1.user_id join t_user u2 on a.activity_create_by = u2.user_id left join t_user u3 on a.activity_edit_by = u3.user_id where a.activity_name like "%Lex%" and u1.u_login_act like "%xx%"
上面的查询代码,查的是某个市场活动,查t_activity表(并设置别名为a,简写),关联查询t_user表(设置别名为u1),没有on后面的条件,a表中每一行数据都对应user表中的全部数据【联系实际就是一个市场活动表,我想要查这个活动负责人的信息,给a表一个owner列,值与其负责人的user_id相等,方便查询】,on后面是过滤这些数据,留下u1表中user_id列与a表中activity_owner(市场活动所有者)列相等的数据,【联系实际,也就是不是每一个用户都会去负责市场活动,所以a表要的数据是当前负责人的个人信息】,再次过滤,查的是市场活动创建者的个人信息,再次过滤,查的是市场活动编辑者的个人信息,查的是市场活动名字有Lex且这个市场活动负责人的u_login_act包含xx的
合并查询
使用合并查询必须保证合并的两张表个的列数相同,列的数据类型可以不同 比如合并的两张表是两个班级的学生信息表,列名都为id和name 则可以合并这两种表
SELECT * FROM t1 UNION SELECT * FROM t2;
保留重复记录
SELECT * FROM t1 UNION ALL SELECT * FROM t2;
一、内连接查询(INNER JOIN | ON)
SELECT * FROM t_employees INNER JOIN t_jobs ON t_employees.`job_id` = t_jobs.`job_id`;
二、三表连接
SELECT * FROM t_employees INNER JOIN t_departments ON t_employees.`department_id` = t_departments.`dpID` INNER JOIN t_jobs ON t_jobs.`job_address` = t_departments.`dpID`;
三、左外连接(LEFT JOIN ON)
左外连接,是以左表为主表,依次向右匹配,匹配到,返回结果,匹配不到,则返回NULL值填充
SELECT employee_id,first_name,salary,department_id FROM t_employees LEFT JOIN t_departments ON t_departments.`dpID` = t_employees.`department_id`;
上诉代码查询t_employees表和t_departments表,连接的过程当中用的是左连接,也就是LEFT JOIN,左连接就是以左表为主表去向右表去匹配,匹配到就显示这个完整的结果,如果左表t_employees对应的t_departments表没有结果则显示NULL
四、右外连接(RIGHT JOIN ON)
SELECT employee_id,first_name,salary,department_id FROM t_employees RIGHT JOIN t_departments ON t_departments.`dpID` = t_employees.`department_id`;
