您的位置:首页 > 数据库 > MySQL

MYSQL---查询数据

2016-06-30 23:12 453 查看
查询数据

1.基本查询语句

select 属性列表

from 表名和视图列表

[where 条件表达式1]

[group by 属性名1[having 条件表达式2]]

[order by 属性名2[ASC|DESC]]

where子句表示按指定条件查询;没有的话就查询所有记录。

group by是按照属性名指定的字段进行分组,如果有having关键字,则只输出符合条件表达式2的信息。

order by是按照属性名指定的字段进行排序。排序方式由ASC和DESC指定。

ASC表示按升序排列,DESC表示按降序排列,缺省是升序排列。



2.单表查询(只从一张表上查询)

1)查询所有字段

a)列出所有字段 select 属性名1 属性名2 属性名3….from 表名 //可以改变字段的排列顺序

b)使用查询所有字段 select from 表名 //不能改变字段的排列顺序

2)查询指定字段(查询的字段必须包含在表中)

在select的属性列表中列出所要查询的字段。select 属性名1 属性名2 from 表名

3)查询指定记录

where语句用来指定查询条件,where子句中用到的查询条件很多,如图。

条件表达式设置的条件越多,查询出来的记录就越少,就越接近我们想查询到的结果。

4)带IN关键字的查询

可以判断某个字段的值是否在指定的集合中。在则会被查询出来,不在则不会被查询出来。

[not] IN (元素1,元素2…..)

eg:select * from employee where id [not] in (001,007);

5)带between and 的范围查询(大于等于起始值,小于等于终止值)

判断某个字段的值是不是在指定的范围内,

[not]between 取值1(起始值) and 取值2(终止值);

eg:select * from employee where age [not] between 15 and 25;

6)带LIKE的字符匹配查询。可以匹配字符串是否相等。

[not] like ‘字符串’;

字符串可以是一个完整的字符串,也可以是包含 % 和 _ 的通配字符。

% 代表任意长度的字符。长度可以为0;

_ 只能代表单个字符;

eg:select * from employee where name like ‘huan’;

相当于select * from employee where name=’huan’;

如果字符串中包含了通配符,就不能这样(=)替换了。

需要匹配的字符串需要加引号,可以是双引号也可以是单引号,如果匹配的时候是一个汉字,需要用两个_来匹配。一个汉字是两个字符。

7)查询空值

is [not] null 来判断字段的值是否为空值。

eg:select * from employee where name is null;

is null是一个整体不能用=来替换is或 !=替换 is not null

8)带and的多条件查询

联合多个条件进行查询。只有同时满足所有查询条件的记录会被查询出来,如果不满足这些查询条件中的任意一个,则不会被查询出来。

and可以连接两个条件表达式,可以同时使用多个and关键字。

条件表达式1 and 条件表达式2 [and 条件表达式n……]

eg:select * from employee where name like ‘huan’ and sex=’女’;

9)带or的多条件查询

联合多个条件进行查询。只要同时满足其中一个查询条件的记录会被查询出来。

or可以连接两个条件表达式,可以同时使用多个or关键字。

条件表达式1 or 条件表达式2 [or 条件表达式n……]

eg:select * from employee where name like ‘huan’ or sex=’男’;

or 和 and 可以一起使用,and 运算优先于or。and关键字前后的表达式先结合,再和or关键字的条件结合。

10)查询结果不重复

如果某些字段没有唯一性约束,就会有重复的值产生。可以使用distinct来消除字段中的重复记录。

eg:select distinct id from employee

11)对查询结果排序,对记录进行排序。

order by 属性名 [asc|desc]

eg: select * from employee order by age asc;年龄升序排列;

若存在age字段为空值,升序则最先显示,降序则在最后显示。

可以指定多个字段进行排序,当年龄相等时,把年龄相等的记录按id排序。

eg: select * from employee order by age asc ,id asc;

12)对查询结果分组

1)单独使用group by 关键字来分组。

将查询结果按某个字段或者多个字段进行分组。字段中值相等的为一组。

group by 属性名 [having 条件表达式] [with rollup];

属性名是指按照字段的值分组

Having 用来限制分组后的显示,满足表达式的结果将会被显示

with rollup将会在所有记录的最后加上一条记录。该记录是上面所有记录之和。

group by 经常和集合函数 count(),sum(),avg(),max(),min()一起使用.

如果不与上述函数一起使用,则查询结果就是字段取值的分组。

eg: select * from employee group by sex;

group by 单独使用时,只查询出每个分组的一条记录。使用的意义不大,因此一般和集合函数一起使用。

2)group by与 group_contact()函数一起使用。每个分组中指定的字段值都会显示出来。

eg: select sex group_contact(name) from employee group by sex;

取值为女的是一组,取值为男的是一组,并且每个人姓名都显示出来。

3)与集合函数一起使用。可以计算出分组中的总记录,最大值,最小值等。

eg: select sex count(sex) from employee group by sex;分别查询出男女不同记录数目。

4)与having 一起使用,输出符合条件的记录,限制查询结果的显示。

eg: select sex count(sex) from employee group by sex having count(sex)>3;查询出记录数目大于3的分组。

where字句用来限制表和视图的结果显示,Having用于分组后的记录,选择满足条件的组。

5)按多个字段进行分组。

当某一个字段相等时,再按另一个字段分组。

eg: select * from employee group by sex,age;

6)group by 与with rollup一起使用

with rollup将会在所有记录的最后加上一条记录。该记录是上面所有记录之和。

select sex count(sex) from employee group by sex with rollup;

7)使用limit限制查询结果的数量。

查询数据时,可能会查出很多的记录,但用户需要的记录只是很少的一部分,这样就需要来限制查询结果的数量。

limit关键字有两种使用方式,一种是指定初始位置,一种是不指定初始位置。

a)不指定初始位置

不指定初始位置的时候,从第一条记录开始显示,显示记录的条数由limit关键字指定。

limit 记录数;

当记录数 > 查询结果的总记录数,显示所有查询到的记录;

当记录数 < 查询结果的总记录数,显示指定条数的记录;

eg: select * from employee limit 2;//显示前两条记录

b)指定初始位置

可以指定查询结果从从哪条记录开始显示,显示多少条记录。

limit 初始位置,记录数;

eg: select * from employee limit 0,2;//显示前两条记录

limit关键字是MYSQL特有的。0表示第一条记录。

比如,如果需要查询成绩前十名的同学,我们可以用order by将成绩降序排列,再用limit输出前十条记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: