SQL单表查询

一、基础查询

SQL从数据表中查询数据的基本语句是SELECT语句,语法如下:

主语句:
SELECT [DISTINCT]*|{字段名1,字段名2,字段名3,......}
FROM 表名
子语句:
[WHERE 条件表达式1]
[GROUP BY 字段名 [HAVING 条件表达式2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET,] 记录数]

注意:各句子的位置和顺序

特点:SQL语言是一种非过程化的结构查询语句,简洁明了。只要请求查什么?从哪里查?即可返回结果。

例如:查询制定表中的所有记录的所有列(图1)

图1

改变列标题的显示,语法如下:

字段名 AS 标题名 或 字段名 标题名

注意:在DOS绘画窗口使用中文别名,须先执行改变字符集命令:SET NAMES gbk;

例如:查询表中所有图书的BookID,ISBN,BookName(图2)

图2

二、条件查询

条件语句为:

SELECT [DISTINCT] * |{字段名1,字段名2,字段名3,......}
FROM 表名
[WHERE 条件表达式1]

1.比较条件的使用,如下图(图3)

图3

例如:在TBL_Bookinfo 表中查询所有“清华大学出版社”出版的书(图4)

图4

2.比较条件的组合使用,如下图(图5)

图5

例如:在TBL_Bookinfo 表查询页数在200至400之间、同时出版社为“清华大学
出版社”的书(图6)

图6

3.BETWEEN关键字

BETWEEN...AND...       ##在指定的闭区间范围内
NOT BETWEEN...AND...   ##不在指定的闭区间范围内

一般用于数值和日期型数据

注意:BETWEEN...AND...是包含边界的

例如:从TBL_Bookinfo表中检索1990年出版的图书信息。(图7)

图7

4.IN()关键字

IN()        ##在给定的集合内
NOT IN()    ##不在给定的集合内

5.LIKE关键字

LIKE'匹配模式'         ##获取匹配到的数据(用于模糊匹配)
NOT LIKE'匹配模式'     ##获取匹配不到的数据

注:在LIKE关键字中常用的通配符:

%  :代表任意多个字符

_(下划线)   :代表一个任意字符

6.IS NULL关键字

IS NULL          ##比较一个数据是否是NULL
IS NOT NULL      ##比较一个数据是否不是NULL

三、高级查询

1.DISTINCT关键字

      实际应用中,出于对数据的分析需求,有时需要去除查询记录中重复的数据。可使用DISTINCT(去重复值子句)去除重复记录 (消除重复行,只保留一条)。
 

语法:DISTINCT 字段名1 [, 字段名2 ]…

例如:在TBL_Bookinfo表中检索所有的出版社(图8)

图8

2.ORDER BY子句

       在项目开发时,为了使查询的数据结果满足用户的要求,通常使用ORDER BY(排序子句)对查询出的数据进行上升或下降的排序。
MySQL提供了两种排序的方式,分别为单字段排序和多字段排序。

单字段排序 (单重排序)
语法:ORDER BY 字段名 [ASC|DESC]
说明:ASC 升序,DESC 降序,缺省值为升序

关于空值NULL排序问题:
1、ASC方式,排序列为NULL的元组(记录、行)最先显示,

2、DESC方式,排序列为NULL的元组(记录、行)最后显示;

关于中文排序问题:
1、字段的字符集是utf8,默认不会按照中文拼音排序;

2、字段的字符集是gbk, 将会按照中文拼音排序;
3、在不改变数据表结构的情况下,可以使用“CONVERT(字段名 USING gbk)”函数强制让指定的字段按中文排序,

例如:

select * from TBL_Bookinfo order by convert(Publisher using gbk);
多字段排序 (多重排序)
语法:ORDER BY 字段名1 [ASC | DESC] [, 字段名2 [ASC | DESC]]…
说明:多字段排序首先按照第一字段值排序,当第一字段的值相同时,
再按照第二字段值进行排序,依次类推。

3.LIMIT关键字

关于记录数的限量问题:
      对于一次性查询出的大量记录,不仅不便于阅读查看,还会浪费系统效率。MySQL中提供了一个关键字LIMIT(限量子句),可以限定记录的数量,也可以指定查询从哪一条记录开始(通常用于分页)。

语法:LIMIT [偏移量,] 记录数

说明:
1、记录数表示限定获取的最大记录数量。仅含此参数时,表示从第1条记录开始获取。
2、偏移量用于设置从哪条记录开始,默认第1条记录的偏移量值为0,第2条记录的偏移量值为1,依次类推。
3、LIMIT 后使用无符号的整数。

4.常用聚合函数

图9

说明:
1、COUNT()、SUM()、AVG()、MAX()、MIN() 函数中可以在字段名前添加DISTINCT,表示对不重复的记录进行相关操作;
2、COUNT(*),表示统计符合条件的所有记录(包含NULL);其他聚合函数都不能使用*,不统计字段中的空值(NULL)。

重要提示:select查询内容,group by、having、order by 子句是聚合函数允许出现的地方,在where 子句中不能使用聚合函数。

四、分组查询

1.GROUP BY子句

分组统计:

在应用中,通常需要对数据按照某个或多个字段进行分组统计。

语法:GROUP BY 字段名

注意: 如果包括WHERE子句,则须将WHERE子句置于GROUP BY子句之前,即先筛选(过滤)行,再分组汇总。(子句顺位问题)

使用GROUP BY子句注意事项:

1.GROUP BY分组字段最好选择非空字段,因为空值也将被当作一组。

2.SQL语法规定:使用group by 子句的select语句,非分组字段不能作为查询输出列,即查询输出列只能由分组字段和聚合函数列组成。

3.SQL语法规定:不使用group by 子句的select语句,查询输出列不允许同时出现字段与聚合函数。

多字段分组统计:

按某个字段进行分组后,对已经分组的数据进行再次分组的操作。

语法:GROUP BY 字段名1,字段名2,…

例如: 从TBL_ User 表中统计每班男女人数。(图10)

图10

分组排序

为分组字段进行升序或降序排序,默认升序排序。

语法:GROUP BY 字段名[ASC | DESC]

 说明:对分组字段进行排序,不需要使用ORDER BY,直接在分组字段后添加ASC或DESC。

2.HAVING子句

分组筛选

对查询的数据分组时,可以利用HAVING子句对分组筛选。

SELECT 查询列表 FROM 数据表名
[WHERE 条件表达式]
GROUP BY 字段名 [ASC | DESC][, …]
HAVING 条件表达式
;
HAVING子句与WHERE的区别

WHERE子句是在分组前对数据进行筛选,条件不可以使用聚合函数。
HAVING子句对分组统计后的结果进行筛选,条件使用聚合函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值