Sql语句的一些事(一)
(1)LIMIT子句(MySql)
----LIMIT 子句用于规定要返回的记录的数目,一般和Order By一起使用
经常用于数据的分页查询,但是一旦数据量一大,limit的性能就会急速下降
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。格式: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 | 
                    
													
													
													
													
	
		
