Sql语句的一些事(一)
(1)limit子句(mysql)
----limit 子句用于规定要返回的记录的数目,一般和order by一起使用
经常用于数据的分页查询,但是一旦数据量一大,limit的性能就会急速下降
格式:select * from table limit m,n 其中m代表表的某一行数据,n表示的是要查找的多少行数据,从m+1行数据开始查找
select * from persons limit 5; 查看person表中前5行的数据 select * from persons limit 5,10;查看person表的第6-15条数据 select * from persons limit 95,-1;查看person表第96-last的所有数据
(2)between
----between语句一般和and或者是not一起使用,会选取介于两个值之间的数据范围,可以是文本,数值或日期
格式: select column_name(s) from table_name where column_name between value1 and value2
原表:
id | lastname | firstname | address | city |
---|---|---|---|---|
1 | adams | john | oxford street | london |
2 | bush | george | fifth avenue | new york |
3 | carter | thomas | changan street | beijing |
4 | gates | bill | xuanwumen 10 | beijing |
select * from persons where lastname between 'adams' and 'carter
结果集:
id | lastname | firstname | address | city |
---|---|---|---|---|
1 | adams | john | oxford street | london |
2 | bush | george | fifth avenue | new york |
重要事项:不同的数据库对 between...and 操作符的处理方式是有差异的。某些数据库会列出介于 "adams" 和 "carter" 之间的人,但不包括 "adams" 和 "carter" ;某些数据库会列出介于 "adams" 和 "carter" 之间并包括 "adams" 和 "carter" 的人;而另一些数据库会列出介于 "adams" 和 "carter" 之间的人,包括 "adams" ,但不包括 "carter" 。
(3)inner join、left join、right join和full join
----inner join和join是一样的,也称为内连接,表示在表中存在至少一个匹配时,返回行数据,和where的使用效果是相同的
原表:
"persons" 表:
id_p | lastname | firstname | address | city |
---|---|---|---|---|
1 | adams | john | oxford street | london |
2 | bush | george | fifth avenue | new york |
3 | carter | thomas | changan street | beijing |
"orders" 表:
id_o | orderno | id_p |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
当我们想要查找出所有有订单信息的客户时:
select persons.lastname, persons.firstname, orders.orderno from persons where person.id_p = order.id_p order by persons.lastname
使用内连接时:
select persons.lastname, persons.firstname, orders.orderno from persons inner join orders on persons.id_p=orders.id_p order by persons.lastnam
结果:
lastname | firstname | orderno |
---|---|---|
adams | john | 22456 |
adams | john | 24562 |
carter | thomas | 77895 |
carter | thomas | 44678 |
----left join:左连接的结果是除了匹配条件的数据还包含左边表中的所有数据
right join:右连接的结果是除了匹配条件的数据还包含右边表中的所有数据
full join:只要其中某个表存在匹配,full join 关键字就会返回行,就是不管左右两边的表的行内是否存在数据
这三者统称为外链接
当我们想要查找所有人的订单情况时:
select persons.lastname, persons.firstname, orders.orderno from persons left join orders on persons.id_p=orders.id_p order by persons.lastname
结果:
lastname | firstname | orderno |
---|---|---|
adams | john | 22456 |
adams | john | 24562 |
carter | thomas | 77895 |
carter | thomas | 44678 |
bush | george |
当我们想要查找所有的订单情况以及订单的客户信息时:
select persons.lastname, persons.firstname, orders.orderno from persons right join orders on persons.id_p=orders.id_p order by persons.lastname
结果:
lastname | firstname | orderno |
---|---|---|
adams | john | 22456 |
adams | john | 24562 |
carter | thomas | 77895 |
carter | thomas | 44678 |
34764 |
当我们想要查找所有人包括所有的订单信息情况时;
select persons.lastname, persons.firstname, orders.orderno from persons full join orders on persons.id_p=orders.id_p order by persons.lastname
结果:
lastname | firstname | orderno |
---|---|---|
adams | john | 22456 |
adams | john | 24562 |
carter | thomas | 77895 |
carter | thomas | 44678 |
bush | george | |
34764 |