[MySQL] 基本的SELECT语句

article/2025/9/26 5:42:09

请添加图片描述

文章目录

    • 资料
    • 1. 查询常量计算
    • 2. 查询语句的基本语法
      • 2.1 查询全部字段
      • 2.2 查询指定字段
    • 3. 列的别名
    • 4. 去除重复行
    • 5. 空值参与运算
    • 6. 着重号
    • 7. 查询常数
    • 8. 显示表结构
    • 9. 过滤数据
    • 10. 基本的SELECT语句练习
      • 【题目】
      • 【答案】


资料

根据【MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!】 整理
资料链接:
百度网盘:
链接:https://pan.baidu.com/s/1KboU_3EZJxrezMWZ2klP6g
提取码:1234
阿里云盘
【MySQL】

1. 查询常量计算

语法:

SELECT 常量运算表达式1, 常量运算表达式2, ...
[ FROM dual ];
SELECT 1+1, 3*2;

查询常量不需要从表中进行查找,可以使用 dual (伪表)补全查询语句的结构。

SELECT 1+1, 3*2
FROM dual;

在这里插入图片描述

2. 查询语句的基本语法

查询语句的基本语法:

SELECT 字段1, 字段2, ... 
FROM 表名;

2.1 查询全部字段

语法:

SELECT * 
FROM 表名;
  • * 表示表中的所有字段。

查询employees 表中的所有字段:

SELECT * 
FROM employees;

在这里插入图片描述

一般情况下,除非需要使用表中所有的字段数据,否则最好不要使用通配符 *

使用通配符虽然可以节省 输入查询语句 的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。

通配符的优势是,当不知道所需要的列的名称时,可以通过通配符获取它们。

在生产环境下,不推荐直接使用 SELECT * 进行查询。

2.2 查询指定字段

语法:

SELECT 字段1, 字段2, ... 
FROM 表名;

查询表中指定字段,需要保证字段在表中要存在,同时要保证字段名拼写要完全正确。

查询employees 表中 employee_id、last_name、salary字段:

SELECT employee_id, last_name, salary 
FROM employees;

在这里插入图片描述

3. 列的别名

查询时,需要对查询的字段进行重命名(取别名),可以使用关键字 AS (alias – 别名)。

查询employees 表中 employee_id、last_name、salary字段:

SELECT employee_id AS id, last_name AS lname, salary AS sal 
FROM employees;

AS 关键字可以省略

SELECT employee_id id, last_name lname, salary sal 
FROM employees;

字段的别名可以使用一对 双引号 引起来,不要使用单引号(由于MySQL语法不严谨,在 MySQL 中不会报错,但在有些数据库中会报错)。

补充:字符串使用单引号引起来,不要使用双引号,会报错。

SELECT employee_id AS "id", last_name AS "lname", salary AS "sal" 
FROM employees;

三个语句的查询结果相同:

在这里插入图片描述

字段的别名使用双引号引起来,以便在别名中包含空格或特殊的字符并区分大小写,别名中有空格一定要用双引号包裹。

SELECT employee_id emp_id,last_name AS lname,department_id "部门id",salary * 12 AS "annual sal" 
FROM employees;

在这里插入图片描述

4. 去除重复行

默认情况下,查询会返回全部行,包括重复行。

查询员工表中一共有哪些部门id:
没有去重的情况:

SELECT department_id 
FROM employees;

在这里插入图片描述

去重的情况(使用关键字 DISTINCT ):

SELECT DISTINCT department_id 
FROM employees;

在这里插入图片描述

SELECT salary,DISTINCT department_id
FROM employees;

salary 没有进行去重会全部显示, DISTINCT department_id 会去重,两个发生了冲突,会报错。

[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 'DISTINCT department_id FROM employees' 
at line 1

对 department_id, salary 两者的查询结果进行重复去重:

SELECT DISTINCT department_id, salary 
FROM employees;

只有当 department_id, salary 两个字段的值都一样的记录才会进行去重。

在这里插入图片描述

DISTINCT 其实是对后面所有列名的组合进行去重。
最后的结果是 74 条,因为这 74 个结果中部门 id 与 salary 组合后没有重复。如果想要看都有哪些不同的部门(department_id),只需要写 DISTINCT department_id 即可,后面不需要再加其他的列名。

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()

SELECTemployee_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月的基本工资
SELECTemployee_id,last_name,salary*12 AS "ANNUAL SALARY"
FROM employees;

在这里插入图片描述

# 理解 2 :计算12月的基本工资和奖金
SELECTemployee_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的员工姓名和工资

SELECTlast_name,salary
FROM employees
WHERE salary>12000;

在这里插入图片描述

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

SELECTlast_name,department_id
FROM employees
WHERE employee_id=176;

在这里插入图片描述

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

DESC departments;
DESCRIBE departments;

在这里插入图片描述

SELECT *
FROM departments;

在这里插入图片描述


http://chatgpt.dhexx.cn/article/x5SN2qWo.shtml

相关文章

数据结构总结+搬运

C语言与数据结构小总结,自我总结各处收集来的他人的总结(很多记不清了,若有侵权请联系我删! 一、常用C语言小总结 1)数据类型、运算符与表达式 逗号运算符优先级最低,左操作数为先运算,但这是…

19c pdb克隆单机到rac,日志出现:WARNING报警处理

打开pdb后,警告日志出现 Violations: Type: 2, Count: 1 *************************************************************** WARNING: Pluggable Database PDB3 with pdb id - 3 is altered with errors or warnings. Please look into PDB_PLUG_IN_VIOLATIONS vie…

当工作空间下无法进行source时如何处理

当工作空间下无法进行source时,如下 这时是由于~/.bashrc文件下环境变量过多导致 有以下原因导致 多次进行 echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc 即会导致出现环境变量混乱 这时只需在主文件夹下 按 Ctrl …

如何破解HIT的孤岛效应,一起关于患者主索引的案例分享

从一个虚构的故事说起 故事是这样的,当时我们正在讨论安全架构,传来轻轻的敲门声,伴随着小刘有些胆怯的声音:“主任,这个警官找您”。小刘是我们新来的同事,做事很踏实,就是一说话就脸红。我抬…

Redis之key命令

文章目录 Redis之key命令1.keys pattern2.type3.del4.pexpireat5.rename6.persist7.ttl8.expire9.exists10.renamenx11.expireat12.pttl13.dump14.randomkey15.flushdb16.move17.pexpire18.renamex19.flushall Redis之key命令 注:本文是基于Ubuntu 20.04.3系统上Re…

redis根据前缀删除key

对于redis的批量删除指定key,有没有好的方法 redis可以用flushdb/flushall删除所有的key。用del只能根据key去删除。另外一种方式,你可以通过设置过期时间让key到期自动删除。 本回答由提问者推荐 对于redis的批量删除指定key,有没有好的方法 获取所有Ke…

Redis清除Key(Docker)

文章目录 查看镜像进入容器进入redis-cli身份验证查看Key清除所有key删除指定key 查看镜像 docker ps进入容器 docker exec -i -t shopxx-b2b2c-redis /bin/bash进入redis-cli redis-cli身份验证 auth "shopxx"shopxx是Redis的密码 注意使用英文双引号包裹 查看…

删除指定redis的key

1.首先进入redis 服务器 2. 在命令行输入 redis-cli -p 6379 get key 获取key 值 如出现 (error) NOAUTH Authentication required 则需要输入redis 帐号密码,如图 3.输入你要查找的key值,如出现 (nil)表示没有; 4.…

php redis删除所有key,php redis批量删除key的方法

php redis删除key的方法:首先使用scan命令增量迭代的方式遍历出以【XX】为前缀的key;然后通过unlink函数删除指定的key即可。 php redis批量删除key 摘要 使用scan命令增量迭代的方式遍历出以XX为前缀的key,然后删除 简介 在实际开发中&#…

redis删除指定key

redis删除指定key 1.打开redis目录并打开redis-cli.exe 如果直接输入get key会出现以下问题,表示需要认证,也就是需要登录用户 使用auth password登录即可 然后使用get key获取键的值 确认后,使用del key删除键中的值,可多个…

【Redis】批量删除Key的三种方式

Redis 中有删除单个 Key 的指令 del,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux的 xargs 指令来完成这个动作 1.使用命令行批量删除redis的key 语法 ./redis-cli -h IP -p PORT -a PASSWORD -n NUM keys key* | xargs ./redis-cli -h IP…

redis删除key命令

如何批量删除redis中keys 在linux中批量操作redis中的keys的方法: 1.统计个数: redis中名称含有OMP_OFFLINE的key的个数; src/redis-clikeys"*OMP_OFFLINE*"|wc-l 2.批量删除 批量删除0号数据库中名称含有OMP_OFFLINE的key&#xf…

当做一件事,坚持到第二十年——Open-SkyEye强势回归!

1.故事起源 这个故事要从2002年的冬天说起。彼时北方的天气已经有些冷冽,一群操作系统爱好者正热切地在网络上讨论时下热门技术话题:如何脱离硬件限制来学习和研究操作系统的原理,用“软件模拟硬件”的奇妙想法随之诞生。这群技术爱好者中就…

基于SkyEye的覆盖率测试

目录 01.覆盖率测试概念 02.覆盖率测试方法 03.嵌入式软件覆盖率测试原理 04.SkyEye的重大突破 01.覆盖率测试概念 覆盖率测试是一种白盒测试手段,通常会在软件测试的早期阶段进行,也就是单元测试过程中。覆盖率测试这种测试方式需要对测试代码本身进行访问同时…

SkyEye 仿真

http://www.cnitblog.com/schkui/default.html?page4 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具,这样就可以在没有硬件条件下来进行嵌入式系统的开发。 以下操作均在Fedora Core 1.0里通过。 Skyeye项目资源列表 http://gro.clinux.org/projects/skyeye/ …

SkyEye的使用

转载:http://blog.csdn.net/htttw/article/details/7226754 对于希望学习ARM汇编的同学而言, 购买ARM开发板进行板上实测无疑是一个有效的方法,不过购买ARM开发板需要一笔费用,而且每次测试都需要连接开发板,比较麻烦。…

SkyEye安装与使用

一. SkyEye配置选项 SkyEye模拟的硬件配置和模拟执行行为由配置文件skyeye.conf中的选项确定。根据选项的功能,skyeye.conf的选项分为硬件配置选项和模拟执行选项。根据参数的个数,skyeye.conf的选项主要由两种组成: 单参数选项…

use skyeye

操作系统 :LINUX ES3 版本 :2.4.21-9ELSKYEYE 版本 : V0.8.0http://gro.clinux.org/projects/skyeye 下载最新的SkyEy软件 1、下载SKYEYE的原代码包skyeye-v0.x.x.tar.bz2 这里就不写怎样配置安装SKYEYE了,因为我编译没成功&…

SkyEye助力飞控软件Debug

​01.Debug是什么? 1947年9月9日,美国著名科学家格蕾丝.霍普(Grace Hopper)与其同伴在对Mark II计算机进行研究时发现,导致计算机无法正常工作的罪魁祸首居然是一只粘在继电器上的小飞蛾。格蕾丝用镊子将飞蛾夹出&…

手把手教你搭建国产嵌入式模拟器SkyEye开发环境

SkyEye介绍 SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定"仿真"和"…