DQL 之基础查询之列控制|学习笔记

简介: 快速学习 DQL 之基础查询之列控制

开发者学堂课程【数据处理:DQL 之基础查询之列控制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/64/detail/1151


DQL 之基础查询之列控制


接下来学习 DQL,学习完 DQL 后还会学习关于编码,备份等相关知识。关于 DQL 内容不多,包含很多练习,练习题多为单表操作难度不大,真正有难度的在多表操作。

基本查询

首先 DQL 数据库查询语言,查询不会修改数据库表记录。

(1)字段控制

①查询所有列

查询所有列 :SELECT * FROM 表名;首先切换到数据库 exam,查询表 emp,查询语句为 SELECT * FROM emp;

image.png

表 emp 中个字段意义: empno 表示员工编号,ename 表示员工姓名,job 表示员工的工作, mgr 表示员工上级领导编号(例如甘宁的领导编号为1013 ,而1013对应员工为庞统,庞统的领导编号为1004,而1004表示刘备,刘备上级编号为1009,1009对应曾阿牛,所有曾阿牛为最终 BOSS),hircdate 表示入职时间(其中在表中甘宁入职最早工资最低),sal 表示工资,COMM 表示佣金,deptno 表示所属部门。查看部门编号的部门名称需要查找表 dept,20代表学工部。

image.png

②指定列查询

表 emp 中个字段(或叫做 列也可以叫做属性)已经做了基础讲解。语句 SELECT * FROM emp 中星号(*)表示所有列,可以替换为列名。如果表中字段过多,可以只查询其中一部分字段。例如需要查看姓名与工资,执行语句 SELECT ename ,sal FROM emp 即可;此查询方式叫指定列查询,语法为 SELECT 列1,【列2...列 n】 FROM 表名;至少查询一列

image.png

例如查询表 emp 中佣金列:SELECT COMM FROM emp;数据显示只有五个人有佣金,其中有四个是30部门中的销售员,黛绮丝奖金3000,殷天正奖金5000,谢逊奖金14000,韦一笑奖金0.00,张三奖金50000。其中张三是后来添加的方便进行右外连接查询

image.png

③完全重复只记录一次

去除重复行,只是在显示时不显示完全相同的两行记录,而不是删除重复记录。SELECT 不会影响表。去除重复行需要在星号前添加关键字  distinct,例如SELECT distinct * FROM emp;仍然显示15行说明表 emp 中没有完全重复的两行记录。执行 SELECT deptno from emp;执行后有完全重复的两行记录,在查询所有列时没有重复的记录,但查询一列时有重复记录,把 SELECT deptno from emp 改为 SELECT distinct deptno from emp 后查询结果只有四条记录,没有重复记录。

image.png

如果查询该公司中工资样式或者该公司的工作种类(去除重复种类)可以使用语句 SELECT distinct job from emp;查询该公司的工作种类:文员,销售员,经理,分析师,董事长,保洁员;没有重复记录。在查询列前加 distinct  ,其作用是去除完全重复的记录,只要记录(只一行数据)中有所区别就不会被去除。在查询一列时只要有数据重复就会被去除。

image.png

④列运算

接下来讲解列运算,共四种变化。例如现在给该公司员工工资涨百分之五十。执行  SELECT *,sal  FROM emp ,(当管理员窗口太小时,点击鼠标右键,选择属性,找到布局,可以在布局中调节管理员窗口大小)执行命令后sal被查询两遍,* 表示所有列,sal表示多查一列。执行 SELECT *,sal*1.5  FROM emp 表示 sal列数据增长百分之五十,而数据库并不发生变化,它只是一种查询手段。

image.png

SELECT *,ename*1.5  FROM emp 当执行此语句时,最后一行数据全为0,即当所给值无法转换为整型时会以0代替。SELECT *,ename+100 FROM emp 当执行此语句时,最后一行数据全为100,即把 ename 中数据当成0了(即无法转换为整数的数据当成0对待)。同样可以进行减运算,除法运算。可以对列进行四则运算,这是列运算。

还可以查询 工资加佣金,即 SELECT*, sal+COMM FROM emp,执行后出错了:没有佣金的员工工资也没了。任何数据与 NULL 相加结果为 NULL,3000+16000=19000,而29750+NULL=NULL,与我们预期不符,我们希望 NULL在运算时当0处理。

image.png

可以使用函数 ifnull(),使用函数把 COMM 列包裹,当 COMM 中数据为 NULL时转换为0,SELECT*, sal+ifnull(COMM ,0)FROM emp;

执行语句后达到理性预期,ifnull(列名,替换的值)。

image.png

把没有上级领导的 mgr 改为 BOSS, SELECT empno,ename,job,ifnull(mgr’BOSS‘),hirodate,sal, COMM,deptno FROM emp;则没有上级领导的增阿牛的 mgr 变为 BOSS。

image.png

字符串类型可以做连续运算,在 MySQL 中不能使用加号连接字符串,SELECT sname+job FROM emp 执行结果为0,把不能转化为整数的值当作0进行处理,即在执行时 甘宁被当成0,文员也被当成0,0+0等于0.

image.png

SELECT ename job || FROM emp ,其中||表示逻辑判断,在其他程序中表示连接字符串,在 MySQL 中不能使用。而在 MySQL  则使用函数 CONCAT(),即 SELECT CONCAT(ename,sal) FEOM emp;

image.png

可以使用函数  CONCAT() 进行更复杂的连接,例如SELECT CONCAT(’我叫,‘ename,’我的工作是‘,sal) FEOM emp;查询功能到目前为止非常强大,如果向 txt 文件中存储数据不能这么方便的查询数据。刚刚讲解了四则运算,字符串连接,ifnull()函数;连接字符串使用 CONCAT() 函数。

image.png

⑤给字符串起别名,在进行字符串连接是列名杂乱,应适当修改。SELECT CONCAT(’我叫,‘ename,’我的工作是‘,sal)as 描述 FEOM emp;

image.png

SELECT ename as 姓名,job as 工作  FEOM emp;给列起别名列名与 as之间没有逗号;其中 as 可以省略,语句可以写为 SELECT ename 姓名,job 工作  FEOM emp;有一问题:问下面语句中是否有误 SELECT empno,ename job,sal from emp;其中 ename job中间没有逗号,其执行结果是对 ename 起别名为 job,语句可以执行。这一题非常具有迷惑性。

image.png

DQL 中基础查询中有列控制与查询整张表,查询整张表语句为 select* from 表明;。列控制包括列运算(如语句 select sal*1.5 from emp,这条语句既是列运算,当 sal 中值不是整数会被当成0进行运算),连接字符串 (select concal(’我的名称是‘,ename) from emp;),处理 NULL 值(select sal+ifnull(comm,0)from emp;把 comm 中的 NULL 转换为0),给列起别名(select ename 姓名 from emp),去除完全重复的行(select distict comm from emp;)

上面学习的是基础查询,内容较多。而本节课程主要学习基础查询的列控制。还有条件控制,其中 where 应该已经掌握,但对模糊查询不太了解,下节课程学习模糊查询。

相关文章
|
5月前
|
SQL
DQL-基础查询
DQL-基础查询
20 0
|
4月前
|
SQL 数据库
SQL标识列实现自动编号的步骤和技巧以及优势
SQL标识列实现自动编号的步骤和技巧以及优势
67 0
|
5月前
|
SQL 关系型数据库 MySQL
sql处理重复的列,更好理清分组和分区
sql处理重复的列,更好理清分组和分区
46 0
|
SQL Oracle 关系型数据库
【SQL开发实战技巧】系列(八):聊聊如何插入数据时比约束更灵活的限制数据插入以及怎么一个insert语句同时插入多张表
插入数据、阻止对某几列插入的实现、复制表的定义和数据以及注意事项、比创建约束功能更强大!用 WITH CHECK OPTION限制数据录入、如何一个insert将数据同时插入多个表【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。但是!ORA - 01723 : 不允许长度为 0 的列。
【SQL开发实战技巧】系列(八):聊聊如何插入数据时比约束更灵活的限制数据插入以及怎么一个insert语句同时插入多张表
|
关系型数据库 MySQL 数据库
MySQL数据库:第十一章:合并查询(联合查询)
MySQL数据库:第十一章:合并查询(联合查询)
基础DQL(数据查询)——基础查询
基础DQL(数据查询)——基础查询
92 0
基础DQL(数据查询)——基础查询
|
SQL 数据库
基础DQL(数据查询)——多表关系及多表查询概述
我们要想在数据库的层面上体现这种关系,就要建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
84 0
基础DQL(数据查询)——多表关系及多表查询概述
|
关系型数据库 MySQL
最基础,MySQL基础查询SELECT
最基础,MySQL基础查询SELECT
79 0
最基础,MySQL基础查询SELECT
|
存储 SQL Java
Mysql数据库表字段设计优化(状态列)
初始状态码(java int 32 long 64),int 可以表示31种(除去0000),long可以表示63种(除去0000),当然不可能将0000赋值给初始状态,一般来讲,选择int还是long是根据具体业务需求来决定的。
394 0
Mysql数据库表字段设计优化(状态列)
|
关系型数据库 MySQL 索引
Mysql建表3大约束+条件查询、分页语法+难点聚合案例解析
Mysql建表3大约束+条件查询、分页语法+难点聚合案例解析
145 0