[MySQL] 基本的SELECT语句
文章目录
- 资料
- 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;
[MySQL] 基本的SELECT语句相关推荐
- 学习MySQL:使用SELECT语句从MySQL服务器查询数据
In this series of articles, we are going to learn about the basics of the MySQL database server. In ...
- MySQL基本的SELECT语句,SQL语言概述,基础和重要不冲突,完整详细可收藏
文章目录 1.SQL语言的分类 2.SQL语言的规则与规范 3.基本的SELECT语句 4.DESCRIBE显示表结构 5.WHERE过滤数据 1.SQL语言的分类 SQL语言在功能上主要分为如下3大 ...
- mysql 笔记05 select语句以及条件语句的使用
select语句 过滤重复语句(distinct) 举例: 查询学生的总分 select name, math + English + China as '总分' from students; 在姓赵 ...
- mysql的selectwhere语句_(MySQL笔记)SELECT语句的WHERE子句详解
WHERE子句 在SELECT语句中,语句首先从FROM子句开始执行,执行后会生成一个中间结果集,然后就开始执行WHERE子句.WHERE子句是对FROM子句生成的结果集进行过滤,对中间结果集的每一行 ...
- mysql 从句_MySQL select语句之from从句
http://www.lovestblog.cn,欢迎转载该文,但请注明文章出处,谢谢合作. mysql的from从句用来指定参与查询的表,当然也可以是生成的中间表,在表前我们有时需要指定数据库,这主 ...
- MySQL实现update select语句
多次用到的sql 每次找文档都找好久 sql如下 UPDATE `user` AS A INNER JOIN (SELECT id FROM `user` WHERE `sid`=2) AS B ON ...
- MySQL下执行select语句输入到一个文件出现“Can’t create/write to file /home/0521b.txt (Errcode: 13)”错误解决方法
这个问题一般是该目录读写权限不足造成的 外场有客户询问要导出已开户的专网手机的大小号和imsi用于比对那些imsi被用了,询问方法? 告知登录服务器,linux提示符下执行登录mysql. mysql ...
- 一文搞懂select语句在MySQL中的执行流程!
MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多年后,想跳槽进入大厂, ...
- MySQL数据库select语句6大子句(from、where、group by、having、order by 、limit )#经典员工、部门表案例语句练手!
MySQL中的select语句,有说5大子句,有说6大子句的,两者都没有问题,只不过把from接表名算上一个子句,where是条件查询,group by是分组查询,having是筛选,order ...
最新文章
- linux——sshd服务及其管理命令
- 星际战甲堕落轰击者结合目标_星际战甲-任务指南
- 【JSOI2008】星球大战 (并查集)
- 美国域名总量跌至7971万:4月上旬降幅缩小32.4%
- delphi中利用Indy的TIdFtp控件实现FTP协议
- Mysql 1030 Got error -1 from storage engine 错误解决
- 06-4.部署高可用 kube-scheduler 集群
- 网络安全应急响应(文末附应急工具)
- 怎么将两台计算机ping接通,小编教你手把手教你一根网线连接两台电脑实现数据传送...
- TILERA--Makefile实例
- 瑞吉外卖_短信验证bug
- 信息不对称套利之 - 羊毛党
- 排除Transformation Errors
- LiveData 源码解析(2.4.1 版本)
- char在c语言中的意思(char在c++中的意思)
- 13.创建活动、布局、活动关联布局、注册活动
- 关于HTTP常见状态码
- 【Xmind】Linux
- 博弈之威佐夫博弈详解
- 统一网关 Gateway
热门文章
- 在Egg.js中实现RBAC权限管理
- 深度学习用于交通标志识别
- 雷达ADS-B信号覆盖评估系统-SRTM数据读取
- matlab自带数据集使用,Matlab中的示例数据集
- 如何轻松找到竞品独立站?竞品独立站搜罗神器曝光!
- 车载打气泵的开发与参数简介
- 1. 编写一个程序,使用 cin 从标准输入输入 3 段文字,保存到一段动态分配的 内存中,每一段文字输入后,必须要即时保存到动态内存中。
- 网络上排名前500的电子电气网站
- 迭代硬阈值类算法总结||IHT/NIHT/CGIHT/HTP
- warning C4290: 忽略C++ 异常规范,但指示函数不是__declspec(nothrow)