mysql-检索数据(select)
一、select的基本检索
1、检索单个列:select columnname from markname;
并没有过滤以及排序等操作,字节返回。
2、检索多个列:select columnname1,columnname2,columnname3 from markname;
检索多个列,在列名之间加上逗号
3、检索所有列:select * from markname;
*为通配符,匹配所有,使用通配符,返回表中所有列,列的顺序一般是列在表定 义中出现的顺序
4、检索不同的行:select distinct columnname from markname;
使用distinct关键字,使Mysql只返回不同的值,也就是去重。
使用distinct还可以应用于多列,诸如:
select distinct columnname1,columnname2 from markname;
那么以上语句的结果是除非指定的两个列内容都不同,后者所有行都将被检索出来(即必须所有列中的内容都不同才会被去重)
5、限制结果:select columnname from markname limit num;
使用以上语句返回不多于num行的数据。但是如果你想得到下一个5行,可以指定检索的开始行和行数:
select columnname from markname limit num1,num2;
从第num1行开始,去num2行
也可以这样:
select columnname form markname limit num1 offset num2;
从第num2行开始,取num1行
6、使用完全限定的表名:
select markname.columnname from markname;
使用限定的列名可以避免同名带来的问题
二、排序检索数据order by
使用order by关键字,取一个或多个列的名字,据此对输出进行排序,如下:
select columnname from markname order by columnname;
这条语句指定了对columnname进行排序(字符串的话按字母顺序排)
也可以按照多个列排序,多个列之间用逗号隔开即可。如下:
select columnname1,columnname2,columnname3 from markname order by columnname1,columnname2;
上述语句只会在columnname1相同时才会按columnname2进行排序。
默认为升序(ASC),也可以调成降序(DESC)如下:
select columnname1,columnname2,columnname3 from markname order by columnname1 desc,columnname2;(对columnname1进行降序排序,对columnname2进行默认的升序排序)
select columnname1 from mark order by columnname1 desc limit 1;
仅仅返回一行最少的那一个。
三、过滤数据where
我们可以再select语句中,通过在where子句中使用指定的搜索条件进行过滤:
select columnname1,columnname2 from markname where columnname1=1.0;
该语句可以从mark表中检索出两个列,但不会返回所有行,仅仅返回columnname为1.0的数据。
在同时使用order by 和where子句时,应该让order位于where之后。
Mysql支持的所有条件操作符:
操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
BETWEEN 在两者之间
1、检查单个值
select prod_name,prod_price from products where prod_name='Fuses';
上述语句是通过检查prod_name='Fuses',返回prod_name的值为Fuses的一行数据,Mysql在执行匹配时,数据是区分大小的。
2、不匹配检查:
select vend_id,prod_name form products where vend_id<>1003;(或使用!=)
3、范围值检查:为了检查某个范围的值,我们使用between...and操作符,他需要两个值,即范围的开始和结束值,如下:
select prod_name,prod_price from products where prod_proce between 5 and 10;
4、空值检查:在创建表时,表设计人员可以指定其中的列是否可以不包含值,在一个列不包含值时,称其为包含空值NULL。
select prod_name from products where prod_price is null;(用is 不用=)
5、我们可以使用以AND子句或OR子句的方式使其具备多个where子句。
AND(与操作符):为了通过不止一个列进行过滤,可以使用AND操作符和where子句附加条件,表示多个条件必须同时满足如下:
select prod_id,prod_price,prod_name from products where vend_id =1003 and prod_price <=10;
OR同理
6、计算次序:where可以包含任意数目的and和or操作符,并且允许两者结合以进行复杂和高级的过滤。
但是组合的时候会出现次序问题,and的优先级高于or。
可以利用括号来改变计算的优先级关系
7、in操作符:in操作符从来指定条件范围,范围中的每个条件都可以进行匹配,in取合法值的由逗号分割的清单,全都括在括号中。
select prod_name,prod_price from products where vend_id in(1002,1003) order by prod_name;
in中还可以包含其他的select语句,使得更动态的建立where子句。
8、not操作符:用它来否定它之后说跟的任何条件
select rod_name,prod_price form products where vend_id not in(1002,1003) order by prod_name;
与7中的in功能相反
四、用通配符进行过滤
1、like操作符:通配符用来匹配值的一部分的特殊字符。通配符本身实际是SQL的where子句中有特殊含义的字符,sql支持的通配符如下:
a.百分号(%)通配符:%表示任何字符出现的任意次数。
select prod_id,prod_name from products where prod_name like 'jet%';
以上语句使用了搜索模式‘jet%’,在执行这条子句时,将检索任意jet开头的词,%告诉mysql接收jet之后的任意字符,不管他有多少个字符。%区分大小写。
%123:表示以123结尾的; %123%:表示词中包含123的; 123%:以123开头的
2、下划线_通配符:
它只陪陪单个字符而不是多个字符。
select prod_id,prod_name from products where prod_name like '_ton anvil'
可以匹配到prod_name中带有?ton anvil的数据