Select 详解
select语法说明
Name: 'SELECT'
Description:
Syntax:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[MAX_STATEMENT_TIME = N]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[PARTITION partition_list]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
查询记录
select [*|columnName] from tableName [where condition];
//1、‘*’表示将所有的字段都显示出来
//2、用逗号将columnName分隔,列出需要查询显示的字段
//eg(当前版本mysql。user表中不存在password字段,为加密后的密钥)
select user,host,password from mysql.user;
查询不重复记录
select Distinct columnName From tableName Where selectCondition;
//1、Distinct必须放在最开头
//2、Distinct只能使用需要去重的字段进行操作(如果我对name和age字段进行了去重,我后面就只能根据name或者age或者这两个字段进行排序,而不能使用其他字段进行排序)
//3、Distinct去重多个字段时,是指 几个字段 同时重复时才会被过滤
条件查询
select columnName from tableName where Condition;
//Where条件又叫过滤条件,它从From子句的中间结果中去掉所有条件补位True(为False或Null)的行
//Where子句跟在From子句后面,不能再Where子句中使用列别名
eg: select * from student where sex='1' and age>20;
//where 后面的条件可以用>、<、>=、<=、!= 等多种比较运算符
//多个条件之间可以用or、and、not、xor等逻辑运算符
Where中出现的字符串或者日期字面量必须使用引号括起来
Mysql不区分大小写进行查询(与oracle不同),字符串字面量大小写查询结果一致
Where 条件中逻辑操作符
逻辑操作符 | 说明 |
---|---|
and | 逻辑与(两个子条件)。只有子条件都为True时,才为True |
or | 逻辑或(两个子条件)。所有条件中只要有一个为True,就为True |
not | 逻辑非(一个子条件)。如果子条件为True,则子条件为False(反转) |
xor | 逻辑异或(两个子条件)。当一个子条件为True而另一个子条件为False时,其结果为True;当两个子条件都为True或False时,结果为False。否则结果为Null |
范围比较查询
//eg:
select * From world.city Where population Between 10000 And 20000;
In 查询
//eg:
select * From world.city Where countrycode In ('chn','jpn');
模糊查询
select * From world.city Where countrycode Like '匹配模式字符串';
//eg:
Select * From world.city Where countrycode Like 'ch%';
实现模式匹配查询或者模糊查询:测试一个列值是否匹配给出的模式
在‘匹配模式字符串’中,可以有两个具有特殊含义的通配字符
1. %:表示0个或者多个字符
2. _:只表示一个任意字符
查询结果排序
使用order by排序;如果select语句中没有order by子句,那么结果集中行的顺序是不可预料的。
//eg:
Select * From world.city ORDER BY population(columnName) desc;
//多个排序字段
Select * From world.city ORDER BY population desc countrycode asc;
//以表中列编号进行排序
Select * From world.city ORDER BY 5 desc;
MYSQL中,把Null值当做一列值中最小的值对待。因此,ASC排序时,Null值在最前面。
使用方法:ORDER BY子句一般在Select语句的最后。
ORDER BY子句后面可以跟多个不同的排序字段(columnName),每个字段都可以有不同的排序顺序。
当第一个排序字段的值一样时,相同的结果行按照第二个排序字段进行排序。
如果只有一个排序字段,则字段相同的记录将会无序排序。
部分参数说明:
* ASC:执行升序排序,默认值。
* DESC:执行降序排序。
限制查询(限制显示的结果集:LIMIT)
//用法
Limit [跳过行号('偏移量')] <获取行数>
//eg:
Select * From world.city Where population Between 10000 and 20000 Limit 2,10;
//行号从零开始
//意思为跳过第0,1,2行,显示10行结果
Select语句中的最后一个子句(在ORDER BY之后)【MYSQL特有子句】
偏移量最小为0
它用来表示从结果集中选取最前面或最后面的几行。
综合查询实例
select * from world.city where population between 10000 and 20000 order by population desc limit 0,10;