1、要修改一个表中数据为null的列,若使用常规查询语句(select * from table where col_name=null;)会报错,需借助is not 组合进行修改:
select * from table where col_name is null;
2、两个表做笛卡尔积的联合查询:left Join、right Join 、inner Join
(1)、left Join:select * from table A left join table B ON A.id=B.cId where col_name=xx;则是以A为基准,将A表所有行列出来,将B表中符合与A链接条件的列出来。right join 与left join相似。
(2)、inner join:select * from table A inner join table B ON A.id=B.cId where col_name='xxx'; 则不以任何表为基准,不全列出A表或B表,只列出A表与B表符合链接条件的结果。
3、in与exist 语句:
(1)、in 语句类似多条件的Or查询:select * from table where col_name=xx1 Or col_name=xx2 Or col_name=xx3 ;
等价于 select * from table where col-name in(xx1,xx2,xx3);
(xx1,xx2,xx3)又可以是另其他表查询出来的列,not in与in语义相反,使用方式相似; 需要注意的是In的查询效率比较低,数据量较大的情况谨慎使用。
(2)、Exist 我们将使用示例数据库中的employees
和dependents
表进行演示。
以下语句查找至少有一个家属的所有员工:
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
EXISTS( SELECT 1 FROM dependents
WHERE dependents.employee_id = employees.employee_id);
先根据条件查出 employees的列,再用employees的列与括号中的子查询链接查询返回真假,返回真就输出employees的这一类,返回假则什么都不做。
EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:
IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。