最近学习mysql, 回陆续整理我的学习笔记。没有什么技术难度,不过却在以后可以非常方便的使用。
select语句:从表中检索一个或多个数据列。使用select时,要给出两个信息--选择什么以及从什么地方选择。
下面使用column_name代表列名,table代表表名:
1. select column_name from table; //选择所有符合要求(单列)的行
2. select column_name, column_name1... from table; //选择所有符合要求(多列)的行
3. select * from table; //选择所有符合要求(所有列)的行
4. select distinct column_name from table; //选择所有符合要求的,但不同的行
上面与1的区别是:如果选择某列的结果中有相同的行,可以用distinct删除重复的,只显示不同的行
5. select column_name from table limit number; //限制结果:选择符合要求的前number个结果
6. select column_name from table limit start_row, number; //限制结果:选择符合要求的,从start_row行开始的number个结果
7. select table.column_name from database.table; //完全限定的表名、列名
8. select column_name from table order by column_name1; //选择所有符合要求的行,并对结果按column_name1进行升序排序(默认)。column_name1可以等于column_name
9. select column_name from table order by column_name1, column_name2...; //在8的基础上,对相同的行的结果按照column_name2进行升序排序(默认),以此类推
10. select column_name from table order by column_name1 desc; //选择所有符合要求的行,并对结果按column_name1进行降序排序
11. select column_name from table order by column_name desc, column_name2 desc; //如果要对多个关键字降序排序,需要在每个关键字后面加上desc
12. select column_name from table order by column_name1 limit number; //按照column_name1进行升序排序,并取结果的前number个数据
13. select column_name from table order by column_name1 desc limit number; //按照column_name1进行降序排序,并取结果的前number个数据
12、13两个可以用于取排序后最高或最低的结果。
使用select语句的where子句指定搜索条件(如果需要排序,order by应该在where子句之后):
where子句关系操作符:
1. select column_name from table where column_name1 = value; //搜索指定列column_name1的值为value的行
2. select column_name from table where column_name1 != value; //搜索指定列column_name1的值不为value的行
上述1和2中的“=”和“!=”可以根据需求替换为“<>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)”。
3. select column_name from table where column_name1 between value1 and value2; //搜索指定列column_name1的值在范围value1到value2之间的行
组合where子句(op为上述的子句操作符):
1. select column_name from table where column_name1 op1 value1 and column_name2 op2 value2; //搜索指定列column_name1的值满足op1操作,并且column_name2的值满足op2操作,二者必须同时满足。and子句可以根据需求扩展为多个
2. select column_name from table where column_name1 op1 value1 or column_name2 op2 value2; //搜索指定列column_name1的值满足op1操作,或column_name2的值满足op2操作,二者中任意一个满足即可。or子句可以根据需求扩展为多个
3. select column_name from table where column_name1 op1 value1 or column_name2 op2 value2 and column_name3 op3 value3; //搜索指定列column_name2的值满足op2操作,并且column_name3的值满足op3操作,或者column_name1的值满足op1操作
特别注意:and的优先级高于or, 所以先进行and操作,再进行or操作。
如果我们希望找出满足如下条件的结果:column_name1或column_name2中任意值成立,并且满足column_name3的值成立,这时,我们需要通过添加()来提高or的优先级,如下:
select column_name from table where ( column_name1 op1 value1 or column_name2 op value2 ) and column_name3 op3 value3;
4. select column_name from table where column_name1 in ( value1, value2 ); //搜索指定列column_name1的值等于value1或value2,括号内为所有要进行匹配的清单
in操作符等价于or操作,上式等价于:
select column_name from table where column_name1 = value1 or column_name2 = value2;
5. select column_name from table where column_name1 not in (value1, value2 ); //搜索指定列column_name1的值不等于value1或value2, 括号内为所有要进行匹配的清单,not经常用于复杂的筛选中
where中使用like以及通配符
1. select column_name from table where column_name1 like '...%'; //搜索指定列column_name1中值以...(已知要匹配的内容)开头的行,%表示任何字符出现任意次数,%可以出现在要匹配内容的任意位置
2. select column_name from table where column_name1 like '_...'; //搜索指定列column_name1中值以...(已知要匹配的内容)结尾的行,_表示任何字符出现一次,_可以出现在要匹配内容的任意位置
_只匹配单个字符,而%可以匹配多个字符
特别注意:由于一般搜索匹配指定了值,而通配符的值时未知的。所以通配符搜索的处理一般要比其他搜索所花时间更长,下面是一些使用通配符的技巧:
- 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把通配符用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来时最慢的。
- 自习注意通配符的位置。如果坊错位置,可能不会返回想要的数据。
阅读(1859) | 评论(0) | 转发(1) |