sql高级命令
在一次面试中,sql语句基本写不上来,平时就是增删改查,对于一个特殊一定的sql语法没有接触,网上找一些资料,自己汇总一下。
stu
id | name | age | score |
---|---|---|---|
1 | dawei | 20 | 18 |
2 | liming | 23 | 58 |
3 | zhanghua | 22 | 65 |
4 | lucy | 18 | 88 |
5 | xiaohua | 22 | 78 |
– 选取前n条记录
select top 3 * from stu
– 列之间的数学运算 ( mysql中的加号 + ,就是用来做数学运算的 )
select age + score as result from stu
– 字符串的拼接
select concat(“a” , “b”, “c”) from dual ==> “abc”
集合运算(交集、并集等)
– union 并集,不重复
select * from t1 union select * from t2
– union all 并集,重复
select * from t1 union all select * from t2
– intersect 交集,相同部分
select * from t1 intersect select * from t2
– except 减集 ,除相同部分
select * from t1 except select * from t2
– ifnull 处理内容为null的结果
select ifnull(num,0) as num from t1
得到的结果中,如果有null,则替换为0
– 插入一列时,先判断是否插入过,没有插入过再插入
INSERT INTO order (order_id,group_id,created_at)
SELECT
#{OrderId},
#{GroupId},
#{CreateAt}
FROM DUAL
WHERE not EXISTS ( SELECT 1 FROM car_order_ids WHERE order_id = #{OrderId} and group_id = #{GroupId} )
判断传入的数据是否存在表中
dual 表,是一个虚拟表,为了保证格式的正确而存在的,没有实际存储的内容
– exists,判断一个子句是否返回了至少一个值
select * from t1 where exists (select 1 from t2 where name = “tom”)
如果从t2表中查到了tom,结果返回1,exists后面的select语句返回值,这个exists就返回true,前面的select* 就生效
先写到这,肯定还会补充的