数据查询

数据查询使用select语句,其功能非常强大,应用也是非常灵活的,首先来看它的基本格式。

MySQL
select <返回字段> from <表名> where <条件>;

<返回字段>可以指定查询结果中显示的字段,如果需要显示所有字段,可以使用*符号,否则使用逗号分隔字段名;需要注意的是,当字段名或表名中包含空格等特殊字符时,应使用一对``符号(重音符号)包含。<表名>指定查询的数据表名称。<条件>的设置是非常多样化的,下面先来了解条件的设置。

条件

条件的设置不但可以用于数据查询,也同样适用于数据的修改、删除等操作,下来就来了解一些常用的条件类型。

比较条件

和其它编程语言中的比较运算很相似,在SQL中也包含一些基本的比较运算,如:

  • 等于,使用=运算符。。
  • 不等,使用<>或!=运算符。
  • 大于,使用>运算符。
  • 大于等于,使用>=运算符。
  • 小于,使用<运算符。
  • 小于等于,使用<=运算符。

下面的代码会查询sex等于0的记录。

MySQL
SELECT * FROM cdb_demo.user_main WHERE sex=0;

代码执行结果如下图。

区间条件

指定一个区间,可以使用between...and...条件,如between 1 and 9就是指定条件值在1和9之间。下面的代码显示sex在1和2之间的记录。

MySQL
SELECT * FROM cdb_demo.user_main WHERE sex BETWEEN 1 AND 2;

查询结果如下图。

in条件

使用in条件可以指定字段数据的匹配列表,如sex in (0,2)表示sex字段数据为0或2。如下面的代码,同样查询sex为1和2的记录。

MySQL
SELECT * FROM cdb_demo.user_main WHERE sex IN(1,2);

查询结果如下图。

模糊查询

需要模糊查询,如查询文本数据时,可以使用like条件,其中,还可以使用匹配字符限定指定数量的字符,如:

  • _,表示一个字符。
  • %,表示零个或多个字符。

模糊查询主要用于文本内容的查询,如下面的代码用于查询username字段数据以user开头,以3结束,之间有一个字符的记录。

MySQL
SELECT * FROM cdb_demo.user_main WHERE username LIKE 'user_3';

查询结果如下图。

下面的代码查询fullname字段以“一”结束的记录。

MySQL
SELECT * FROM cdb_demo.user_main WHERE fullname LIKE '%一';

查询结果如下图。

空值查询

判断字段数据是否为空值时,可以使用is null条件,判断字段数据不是空值时,可以使用is not null条件。下面的代码判断fullname为空值的记录。

MySQL
SELECT * FROM cdb_demo.user_main WHERE fullname IS NULL;

查询结果如下图。

相应的,查询fullname字段数据不为空值可以使用如下代码。

MySQL
SELECT * FROM cdb_demo.user_main WHERE fullname IS NOT NULL;

查询结果如下图。

条件组合

可以通过基本的逻辑运算来组合多个条件,如:

  • and,如x and y表示x和y条件都成立时,整个条件成立。
  • or,如x or y表示x和y条件有一个成立时,整个条件就成立。
  • not,如not x表示x条件不成立时,整个条件才成立。如not sex=1实际查询就是sex不等于1的条件,同sex<>1。

下面的代码查询fullname为空值,并且sex为2的记录。

MySQL
SELECT * FROM cdb_demo.user_main 
WHERE fullname IS NULL AND sex=2;

查询结果如下图。

下面的代码查询fullname不为空,或者sex为2的记录。

MySQL
SELECT * FROM cdb_demo.user_main 
WHERE fullname IS NOT NULL OR sex=2;

查询结果如下图。

指定返回记录数

不需要返回查询结果的所有记录时,可以添加limit子句,如下面的代码,只返回fullname为空值的2条记录。

MySQL
SELECT * FROM cdb_demo.user_main WHERE fullname IS NULL LIMIT 2;

查询结果如下图所示。

limit子句还可以使用第二个参数,此时,参数1指定跳过的记录数量,参数2指定返回的记录数量。如下面的代码。

MySQL
SELECT * FROM cdb_demo.user_main WHERE fullname IS NULL LIMIT 2,2;

查询结果如下图所示。

去除重复记录

使用distinct子句,可以过滤数据完全相同的记录,如下面的代码,只显示userpwd和fullname两个字段,并去除数据重复的记录。

MySQL
SELECT DISTINCT userpwd,fullname FROM cdb_demo.user_main;

查询结果如下图。

排序

需要对查询结果排序时,可以使用order by子句,其后可以指定一个或多个排序字段和排序方法。默认为升序排列,与使用asc关键字功能相同,如果使用降序排列则使用desc关键字。

下面的代码会根据sex字段升序排列。

MySQL
SELECT * FROM cdb_demo.user_main ORDER BY sex;

查询结果如下图。

本例中没有指定排序方法,默认使用升序,和下面的代码功能相同。

MySQL
SELECT * FROM cdb_demo.user_main ORDER BY sex asc;

下面的代码,使用sex升序排列,username降序排列。

MySQL
SELECT * FROM cdb_demo.user_main ORDER BY sex ASC, username DESC;

查询结果如下图。

计算函数

SQL标准中定义了五个基本的计算函数,分别是:

  • min()函数,返回指定字段中的最小值。
  • max()函数,返回指定字段中的最大值。
  • avg()函数,返回指定字段数据的平均数。
  • sum()函数,返回指定字段数据的和。
  • count()函数,返回查询结果的记录数量。

下面的代码用于求sex字段的平均数(虽然这没什么实际意义)。

MySQL
SELECT AVG(sex) AS sex_avg FROM cdb_demo.user_main;

代码执行结果如下图,请注意,这里使用as关键字定义计算结果的别名为sex_avg。

分组

通过计算函数和分组功能,可以进行简单的统计工作,如下面的代码就是统一不同性别(sex)的用户各有多少人。

MySQL
SELECT sex,COUNT(sex) AS sex_count 
FROM cdb_demo.user_main 
GROUP BY sex
ORDER BY sex;

这里,使用group by子句定义分组字段,并对结果按sex字段数据进行排序,查询结果如下图所示。

如果需要对分组后的结果设置返回条件,可以使用having子句,其设置可以参考where条件设置。

本站内容均为原创作品,转载请注明出处,本页面网址为:http://caohuayu.com/chy/article/Article.aspx?code=cc004004