M17051121193254

2020-06-25   阅读量: 835

Mysql

MYSQL复习回顾-数据查询(一)

扫码加入数据分析学习群

数据查询是使用数据查询语言(DQL)从一个或多个表中查询所需的数据,查询结果会通过客户端反馈给 用户。

一.虚拟结果集

查询结果是存储在内存中的虚拟结果集,并不是真实存在的表。当用户执行其他命令时,内存中的虚拟 结果集就会被释放,想要再次查看就需要再次执行查询命令,所以查询不会修改数据库表中的记录。

基本的查询语句就是SELECT语句,它至少包含两条信息:想查询什么,以及从哪里查询。

1.查询所有字段

在SELECT语句中使用星号 “*” 通配符查询所有字段。

select * from <表名1>[,<表名2>...,<表名n>];

一般情况下,除非需要使用表中所有的字段,否则好不要使用通配符“*”。使用通配符虽然可以节省输 入查询语句的时间,但是获取不需要的字段通常会降低查询和所使用的应用程序的效率。通配符的优势 是,当不知道所需的字段名时,可以通过通配符获取。


2.查询不重复的记录

在MySQL中需要查询表中不重复的记录时,可以使用distinct关键字过滤重复记录。

select distinct <字段名1>[,<字段名2>...,<字段名n>] from <表名>;

多个字段去重时,distinct关键字必须位于第一个字段前,多个字段完全一样的情况下,才会过滤。


3.设置别名

通常情况下我们通过计算字段得到的字段名都是比较长的,为了提高查询结果的可读性,我们可以使用 as关键字设置别名,使查询语句更简洁。

要保证表别名不能与数据库中的其他表名或关键字重复。

MySQL支持两种别名:列别名和表别名

select <字段名> [as] <字段别名> from <表名> [as] <表别名>;

3.1列别名

有时字段名称是一些表达式,使查询结果的输出很难理解,可以使用列别名设置描述性名称。

设置别名后可以在group by,having和order by子句中来引用该别名,而不能在WHERE子句中使用列 别名。 因为SQL语句的执行顺序:

from -> where -> group by -> having -> select -> distinct -> order by -> limit

因此在where子句执行的时,设置别名的select子句还没有执行,即该别名还不存在,所以where子句 不能使用,order by子句是在select后执行的,可以使用列别名。而group by和having子句虽然也是在 select前执行,一般也不能在group by和having子句中使用别名,但是MySQL对此做了扩展。在 MySQL5.7.5及之后的版本,ONLY_FULL_GROUP_BY sql mode默认开启,MySQL对标准SQL的扩展生 效:

允许在select,having和order by子句中使用没有出现在group by中的字段。此时MySQL会随机 选择没有出现在group by中的字段的值。

允许在group by和having子句中使用select中的别名。


4.2表别名

当表名重复引用时,可以使用别名为表添加不同的名称,用于简化和区分。

示例:查询所有领导姓名及其下属员工姓名

select e1.ename 上层领导,e2.ename 下属员工 from emp e1,emp e2 where e1.empno=e2.mgr;

表别名只在执行查询时使用,并不在返回结果中显示。而列别名在客户端的查询结果中显示,显示的结 果集中字段名即为字段的别名。


二.条件查询

在 SELECT查询语句中,可以使用 WHERE 子句来指定查询条件,对表中的数据筛选,满足条件的记录 会出现在结果集中

select <字段名列表> from 表名 where <查询条件>;

<查询条件>是有运算符构成的逻辑判断表达式,结果取值为1或0。


空值查询

在数据库中null为未知值,不属于任何数据类型,因此null和任何类型的数据进行运算的结果都为null, 我们在进行运算时需要先处理null。 在WHERE子句查询条件中,可以使用IS关键字进行空值查询。

select <字段名列表> from <表名> where <字段名> is [not] null;


模糊查询

在WHERE子句中,当我们不知道准确的查询条件时,可以使用LIKE关键字和通配符组成比较特定数据 的搜索模式对文本字段进行模糊查询。

通配符是用来匹配值的一部分的特殊字符,同时使用LIKE关键字在WHERE子句中构成查询条件。通配 符模糊查询只能用于文本字段(字符串),非文本数据类型字段不能使用通配符进行模糊查询。

select <字段名列表> from 表名 where 字段名 like <通配符>;

百分号(%) :在模糊查询中,%表示任何字符出现任意次数

下划线(_)通配符:在模糊匹配中,_只匹配单个字符。

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
39.1734 2 1 关注作者 收藏

评论(0)


暂无数据

推荐课程