MYSQL---查询数据

查询数据

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输出前十条记录。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章