三天学会MySQL(四)SQL之DQL

2024-03-03 19:40

本文主要是介绍三天学会MySQL(四)SQL之DQL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.SELECT基本操作

二.算数表达式与运算符

三.空值&别名&去重

四.查询中的行选择(where子句)

五.MySQL中的比较条件 &逻辑条件

六.使用 ORDER BY 排序

七.select查询练习


一.SELECT基本操作

SELECT 基本查询
SELECT 语句的功能
SELECT 语句从数据库中返回信息。使用一个 SELECT 语句,可以做下面的事:
列选择: 能够使用 SELECT 语句的列选择功能选择表中的列,这些列是想 要用查询返回的。当查询时,能够返回列中的数据。
行选择: 能够使用 SELECT 语句的行选择功能选择表中的行,这些行是想 要用查询返回的。能够使用不同的标准限制看见的行。
连接: 能够使用 SELECT 语句的连接功能来集合数据,这些数据被存储在不 同的表中,在它们之间可以创建连接,查询出我们所关心的数 据。
SELECT 基本语法

基本 SELECT 语句
在最简单的形式中, SELECT 语句必须包含下面的内容:
一个 SELECT 子句,指定被显示的列
一个 FROM 子句,指定表,该表包含 SELECT 子句中的字段列表
在语法中:

添加测试数据
data.sql文件 (戳链接)通过 Navicat 导入到 MySQL itbz 数据库中。该文件包含了课程中所使用的案例表。
新建一个数据库,右键表,点击 运行SQL文件,选取SQL文件导入即可。

查询中的列选择
选择所有列

用跟在 SELECT 关键字后面的星号 (*) ,你能够显示表中数据的所有列。
示例:
查询 departments 表中的所有数据。

select * from departments;

选择指定列

能够用 SELECT 语句来显示表的指定列,指定列名之间用逗号分隔。
示例:
查询 departments 表中所有部门名称。

 select department_name from departments;

在Navicat里执行SQL语句

点击要查询的表,点击查询,点击新建查询,输入sql语句,点击运行即可。

查看表的详细信息:

  • 右键表,点击对象信息
  • 直接用命令desc 表名

二.算数表达式与运算符

查询中的算术表达式 

做完算数表达式,数据库中的数据不会改变,只是对查询的结果进行了算术运算。

需要修改数据显示方式,如执行计算,或者作假定推测,这些都可能用到算 术表达式。一个算术表达式可以包含列名、固定的数字值和算术运 算符。

使用算术运算符

示例:查询雇员的年薪,并显示他们的雇员 ID ,名字。
select employees_id,last_name, 12 * salary from employees;

运算符的优先级

如果算术表达式包含有一个以上的运算,乘法和除法先计算。如果在一个表达式中 的运算符优先级相同,计算从左到右进行。可以用圆括号强制其中 的表达式先计算。
示例一:
计算 employees 表中的员工全年薪水加 100 以后的薪水是多少,并显示他们的员工 ID 与名字。
select employees_id,last_name, 12 * salary + 100 from employees;
示例二:
计算 employees 表中的员工薪水加 100 以后的全年薪水是多少,并显示他们的员工 ID 与名字。
select employees_id,last_name, 12 * ( salary + 100 ) from employees;

三.空值&别名&去重

MySQL 中定义空值
如果一行中的某个列缺少数据值,该值被置为 null , 或者说包含一个空。
空是一个难以获得的、未分配的、未知的,或不适用的值。空和 0或者空格不相同。 0 是一个数字,而空格是一个字符。
算术表达式中的空值

示例:
计算年薪包含佣金。
select 12 * salary * commission_pct from employees;

如果算数表达式中的某一项中是null,那么算术表达式结果就是null。

MySQL 中的别名
使用列别名

 SELECT 列名 AS 列别名 FROM 表名 WHERE 条件;

示例:
查询 employees 表将雇员 last_name 列定义别名为 name
select last_name as name from employees;
select last_name name from employees;

使用表别名

SELECT 表别名 . 列名   FROM 表名 as 表别名 WHERE 条件 ;
示例:
查询 employees 表为表定义别名为 emp ,将雇员 last_name 列定
义别名为 name

select emp.last_name name from employees emp;

MySQL中去除重复

 除去相同的行

 SELECT DISTINCT 列名 FROM 表名;

示例:
查询 employees 表,显示唯一的部门 ID
select distinct department_id from employees;
注意 distinct 关键字是使一条数据不重复,比如 select distinct department_id,salary from employees;

那么department_id,salary视作一条记录,即不允许有department_id 和 salary都相同的两条记录。

四.查询中的行选择(where子句)

WHERE 子句限制从查询返回的行。一个 WHERE 子句包含一个必须满足的条件, WHERE 子句紧跟着 FROM 子句 。如果条件是 true ,返回满足条件的行。
在语法中:
WHERE 限制查询满足条件的行
condition 由列名、表达式、常数和比较操作组成
1 SELECT * | 投影列 FROM 表名 WHERE 选择条件 ;

示例: 
查询 departments 表中部门 ID 90 的部门名称与工作地点 ID
select department_name,location_id from
departments where department_id =90 ;
注意:where后面跟的条件返回的只是真或假,例如
select department_name,location_id from
departments where 1=1;
那么此条件永远为真,即查所有department_name,location_id。

五.MySQL中的比较条件 &逻辑条件

符号 != 也能够表示 不等于条件。
示例一: 
查询 employees 表中员工薪水大于等于 3000 的员工的姓名与薪水。 

select last_name,salary from employees where salary >= 3000 ;
示例二:
查询 employees 表中员工薪水不等于 5000 的员工的姓名与薪水。
select last_name,salary from employees where salary <> 5000 ;

其他比较条件
使用 BETWEEN 条件

可以用 BETWEEN 范围条件显示基于一个值范围的行。指定的范围包含一个下限和一个上限。
示例:
查询 employees 表,薪水在 3000-8000 之间的雇员 ID 、名字与薪水。
select employee_id,last_name,salary from
employees where salary between 3000 and 8000 ;
使用 IN 条件

示例:
查询 employees 表,找出薪水是 5000,6000,8000 的雇员 ID 、名字与薪水。
select employee_id,last_name,salary from
employees where salary in ( 5000 , 6000 , 8000 ) ;

使用 LIKE 条件

示例:
查询 employees 中雇员名字第二个字母是 e 的雇员名字。
select last_name from employees where
last_name like '_e%' ;
注意:%可以表示零个字符!
使用 NULL 条件

NULL 条件,包括 IS NULL 条件和 IS NOT NULL 条件。
select last_name from employees where
last_name like '_e%' ;
 
IS NULL 条件用于空值测试。空值的意思是难以获得的、未指定的、未知的或者不适用的。因此,你不能用 = ,因为 null 不能等于 或不等于任何值。
示例一:
找出 emloyees 表中那些没有佣金的雇员雇员 ID 、名字与佣金。
select employee_id,last_name,commission_pct
from employees where commission_pct is null ;
示例二:
找出 employees 表中那些有佣金的雇员 ID 、名字与佣金。
select employee_id,last_name,commission_pct
from employees where commission_pct is not null ;

逻辑条件

逻辑条件组合两个比较条件的结果来产生一个基于这些条件的单个的结果,或者逆
转一个单个条件的结果。当所有条件的结果为真时,返回行。
SQL 的三个逻辑运算符是:
  • AND
  • OR
  • NOT
可以在 WHERE 子句中用 AND OR 运算符使用多个条件。
示例一:
查询 employees 表中雇员薪水是 8000 的并且名字中含有 e 的雇员名字与薪水。
select last_name,salary from employees where
salary = 8000 and last_name like '%e%' ;

示例二:
查询 employees 表中雇员薪水是 8000 的或者名字中含有 e 的雇员名字与薪水。
select last_name,salary from employees where
salary = 8000 or last_name like '%e%' ;

示例三:
查询 employees 表中雇员名字中不包含 u 的雇员的名字。
select last_name from employees where
last_name not like '%u%' ;

优先规则

 

在图片的例子中,有两个条件:
第一个条件是 job_id AD_PRES 并且薪水高于 15,000

第二个条件是 job_id SA_REP

在图片中的例子有两个条件:
第一个条件是 job_id AD_PRES 或者 SA_REP
第二个条件是薪水高于 $15,000

六.使用 ORDER BY 排序

在一个不明确的查询结果中排序返回的行。 ORDER BY 子句用于排序。如果使用了 ORDER BY 子句,它 必须位于 SQL 语句的最后

SELECT 语句的执行顺序如下:
  • FROM 子句
  • WHERE 子句
  • SELECT 子句
  • ORDER BY 子句
示例一:
查询 employees 表中的所有雇员,显示他们的 ID 、名字与薪水,并按薪水升序排序。
select employee_id,last_name,salary from
employees order by salary; (默认是升序)
select employee_id,last_name,salary from
employees order by salary asc ;
示例二:
查询 employees 表中的所有雇员,显示他们的 ID 与名字,并按雇员名字降序排序。
select employee_id,last_name from employees
order by last_name desc ;

使用别名排序

 示例:

显示雇员 ID ,名字。计算雇员的年薪,年薪列别名为 annsal ,并对该列进行升序排序,
select employee_id,last_name , 12 * salary annsal from employees order by annsal;

多列排序  

示例:
以升叙排序显示 DEPARTMENT_ID 列,同时以降序排序显示SALARY 列。
select last_name from employees
order by department_id asc ,salary desc ;
(先按department_id 升序排序,salary 降序排序,而且要注意这里select列表是last_name ,但是排序的属性却是别的,这就证明了上面的那句话, 可以排序一一个不在SELECT列表中的列 )

七.select查询练习

实现一个查询时先写出大题框架,再往里填补其他的东西。

select
from
where;

 1.创建一个查询,显示收入超过 12,000 的雇员的名字和薪水。

select
LAST_NAME,SALARY
from employees
WHERE SALARY > 12000 ;

2.创建一个查询,显示雇员号为 176 的雇员的名字和部门号。

SELECT
LAST_NAME,DEPARTMENT_ID
from employees
where EMPLOYEE_ID = 176 ;

3.显示所有薪水不在 5000 12000 之间的雇员的名字和薪水。

select
LAST_NAME,SALARY
from employees
where salary not BETWEEN 5000 and 12000 ;

4. 显示所有在部门 20 50 中的雇员的名字和部门号,并以名字按字母顺序排序。
LAST_NAME,DEPARTMENT_ID
FROM employees
WHERE DEPARTMENT_ID IN ( 20 , 50 )
ORDER BY LAST_NAME asc ;

5. 列出收入在 5,000 12,000 之间,并且在部门 20 50 工作的雇员的名字和薪水。将列标题分别显示为 Employee Monthly Salary
SELECT
LAST_NAME Employee,SALARY 'Monthly Salary'
FROM employees
WHERE SALARY BETWEEN 5000 and 12000
AND
DEPARTMENT_ID in ( 20 , 50 ) ;

6.显示所有没有主管经理的雇员的名字和工作岗位。

SELECT
LAST_NAME,JOB_ID
FROM employees
WHERE MANAGER_ID is null ;

7. 显示所有有佣金的雇员的名字、薪水和佣金。以薪水和佣金的降序排序数据。
SELECT
LAST_NAME,SALARY,COMMISSION_PCT
from employees
where COMMISSION_PCT is not NULL
ORDER BY SALARY DESC , COMMISSION_PCT desc ;

8.显示所有名字中有一个 a 和一个 e 的雇员的名字。

SELECT
LAST_NAME
from employees
where LAST_NAME LIKE '%a%'
AND
LAST_NAME LIKE '%e%' ;

9. 显示所有工作岗位是销售代表( SA_REP )或者普通职员(ST_CLERK) ,并且薪水不等于 2,500 3,500 7,000 的雇员的名 字、工作岗位和薪水。
SELECT
LAST_NAME,JOB_ID,SALARY
from employees
WHERE
JOB_ID in ( 'SA_REP' , 'ST_CLIERK' )
AND
SALARY not IN ( 2500 , 3500 , 7000 )

这篇关于三天学会MySQL(四)SQL之DQL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/770698

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3