SQL使用心得

create table a (aid int,aname varchar(10))
create table b (bid int,bname varchar(10))

select * from a

aid aname
----------- ----------
1 wlg
2 ytu
3 hit

select * from b

bid bname
----------- ----------
1 java
2 python
4 php

Join, left join, right join, inner join的用法
select * from a left join b on a.aid = b.bid

//left join 取出 a 表全部数据,然后根据 on 匹配条件加上b表匹配的数据。

aid aname bid bname
----------- ---------- ----------- ----------
1 wlg 1 java
2 ytu 2 python
3 hit NULL NULL

select * from a inner join b on a.aid = b.bid

//只有a和b匹配的数据。

aid aname bid bname
----------- ---------- ----------- ----------
1 wlg 1 java
2 ytu 2 python

select * from a right join b on a.aid = b.bid

//首先取出b表的所有数据然后根据 on 匹配条件加上a表匹配的数据。

aid aname bid bname
----------- ---------- ----------- ----------
1 wlg 1 java
2 ytu 2 python
NULL NULL 4 php

select * from a,b where a.aid = b.bid

//只有a 和 b 匹配的数据。

aid aname bid bname
----------- ---------- ----------- ----------
1 wlg 1 java
2 ytu 2 python

Union, union all的用法
对于上表a, b而言:
Select * from a union select * from b与select * from a union all select * from b效果是相同的,union与union all的功能都是将两个结果集合并为一个,但是区别是union会将两个结果集中重复的记录筛选掉再合并,而union all只是重复的合并结果集。同时应注意如果union两端的查询结果数据类型不一样,例如一个为字符串,另外一个为数字,则返回的总结果会以BLOB返回,可以实现通过convert转换


Group by
主要实现分类聚合的功能

子查询与表连接
该类查询分为多种:
1. 子查询记录唯一,可用
select * from table_a where table_a.field=(select table_b.field from table_b)

2. 子查询属性唯一,记录不唯一
select * from table_a where table_a.field in (select table_b.field from table_b)

3. 较常用的,表连接
Select table_a.* from table_a, table_b where table_a.field=table_b.field[color=red]
注意:如果table_b为空,即使查询条件中没有与table_b相关的项,结果仍然为空。[/color]
4. 复杂一点的为:
Select table_a.* from table_a, (select * from table_b) as tem where table_a.field1=tem.field1 and table_a.field2=tem.field2.
[color=red]
另外需要注意的一些细节:[/color]
1. SQL语句尽量写得严谨,防止注入式攻击。如select * from tablename where col=XX 这种写法尽量避免,可以写成select * from tablename where col=?。

2. SQL正则表达式中出现如element=XX时最好使用element=’XX’替代。当element为数字类型是前一种可能不会出问题,但是在字符串类型时会出现问题,而后一种是通用的,无论该element是数字类型还是字符串类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值