Sql 语句记录

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  我们将使用示例数据库中的employeesdependents表进行演示。

以下语句查找至少有一个家属的所有员工:

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适合于外表小而内表大的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值