[MySQL] 基本的SELECT语句(二)

简介: [MySQL] 基本的SELECT语句(二)

5. 空值参与运算

空值:null

在 MySQL 中, 空值不等于空字符串。一个空字符串是长度为 0 的字符串,而一个空值是表示没有具体值。

null 不等同于 0 (数值为0,不为空),''(长度为0的字符串,不为空),'null'(字符串,不为空)。

SELECT * 
FROM employees;

空值参与运算,结果一定也为空。

SELECT employee_id, salary AS "月工资", 
     salary*(1+commission_pct)*12 AS "年工资", 
     commission_pct 
FROM employees;

由于有些记录的 commission_pct 中值为空,所以该记录对应的计算出来的“年工资”也为空。

实际问题的解决方案:引入 IFNULL()

SELECT
    employee_id,
    salary AS "月工资",
    # 如果 commission_pct 为空,使用 0 进行代替
    salary*(1+IFNULL(commission_pct, 0))*12 AS "年工资",
    commission_pct
FROM employees;

6. 着重号

着重号:` (键盘左上角,1旁边)

当表名或字段名与关键字一样时,需要使用着重号将表名或字段名引起来。

SELECT * 
FROM ORDER;

报错

[42000][1064] You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server 
version for the right syntax to use near 'ORDER' at line 1
SELECT * 
FROM `order`;

我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,在 SQL 语句中使用一对 `(着重号)引起来。

7. 查询常数

常数会与查询结果的每行进行拼接。

SELECT
    'hello',
    123,
    employee_id,
    last_name
FROM employees;

8. 显示表结构

语法:

DESCRIBE 表名;

简写:

DESC 表名;

显示employees表的结构:

DESCRIBE employees;
DESC employees;

查询结果,显示了表中字段的详细信息。

  • 其中,各个字段的含义分别解释如下:
  • (1) Field:表示字段名称。
  • (2) Type:表示字段类型
  • (3) Null:表示该列是否可以存储 NULL 值。
  • (4) Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分;UNI 表示该列是 UNIQUE 索引的一部分;MUL 表示在列中某个给定值允许出现多次。
  • (5) Default:表示该列是否有默认值,如果有,那么值是多少。
  • (6) Extra:表示可以获取的与给定列有关的附加信息,例如 AUTO_INCREMENT 等。

9. 过滤数据

使用 WHERE 字句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句,过滤条件声明在 FROM 结构的后面。

语法:

SELECT 字段1, 字段2, ...
FROM 表名
WHERE 过滤条件;

查询90号部门的员工信息:

SELECT *
FROM employees
WHERE department_id=90;

查询 last_name 为 ‘King’ 的员工信息:

SELECT *
FROM employees
WHERE last_name='King';

SELECT *
FROM employees
WHERE last_name='king';

该语句的查询结果与上面相同

原因:在 windows 环境下,对大小写不敏感导致 MySQL 中对大小写也不敏感,但是由于 MySQL 的不严谨导致字符串中的大小写也不进行区分,所以上面的两句结果相同。

在其他数据中不会出现这种情况。

在 windows 环境下不区分大小,指的是字段名,表名,关键字,不包括引号内的字符串。

10. 基本的SELECT语句练习

【题目】

# 1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY
# 2.查询employees表中去除重复的job_id以后的数据 
# 3.查询工资大于12000的员工姓名和工资 
# 4.查询员工号为176的员工的姓名和部门号 
# 5.显示表 departments 的结构,并查询其中的全部数据

【答案】

1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY

# 理解 1 :计算12月的基本工资
SELECT
    employee_id,
    last_name,
    salary*12 AS "ANNUAL SALARY"
FROM employees;

# 理解 2 :计算12月的基本工资和奖金
SELECT
    employee_id,
    last_name,
    salary*12*(1+IFNULL(commission_pct,0)) AS "ANNUAL SALARY"
FROM employees;

2.查询employees表中去除重复的job_id以后的数据

SELECT DISTINCT job_id
FROM employees;

3.查询工资大于12000的员工姓名和工资

SELECT
    last_name,
    salary
FROM employees
WHERE salary>12000;

4.查询员工号为176的员工的姓名和部门号

SELECT
    last_name,
    department_id
FROM employees
WHERE employee_id=176;

5.显示表 departments 的结构,并查询其中的全部数据

DESC departments;
DESCRIBE departments;

SELECT *
FROM departments;


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
存储 关系型数据库 MySQL
在 MySQL 中使用 Insert Into Select
【8月更文挑战第11天】
8197 0
在 MySQL 中使用 Insert Into Select
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
305 2
|
关系型数据库 MySQL Linux
mysql 将select结果导出文件 linux
mysql 将select结果导出文件 linux
316 3
|
存储 SQL 关系型数据库
【MySQL进阶之路 | 基础篇】基本的SELECT语句及DESC显示表结构
【MySQL进阶之路 | 基础篇】基本的SELECT语句及DESC显示表结构
|
关系型数据库 MySQL 索引
MySQL之优化SELECT语句
以上只是一些基本的优化策略,具体的优化方案还需要根据实际的业务需求和数据情况来定制。
314 0
|
关系型数据库 MySQL 数据库
MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能
MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能
|
SQL 关系型数据库 MySQL
深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥
深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥
|
存储 关系型数据库 MySQL
mysql 存储过程游标 循环输出select 查询结果
mysql 存储过程游标 循环输出select 查询结果
487 0
|
存储 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT *、分页查询的优化、合理使用连接、子查询的优化)(上)
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT *、分页查询的优化、合理使用连接、子查询的优化)(上)
2406 0

推荐镜像

更多