JAVA进阶 MySQL数据库编程技术(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: JAVA进阶 MySQL数据库编程技术(三)

6.1.14逻辑条件

逻辑条件组合两个比较条件的结果来产生一个基于这些条件的单个的结果,或者逆转一个单个条件的结果。当所有条件的结果为真时,返回行。

SQL 的三个逻辑运算符是:

  • AND
  • OR
  • NOT

可以在 WHERE 子句中用 AND 和 OR 运算符使用多个条件。

示例一:

查询 employees 表中雇员薪水是 8000 的并且名字中含有e 的雇员名字与薪水。

select last_name,salary from employees where salary = 8000 and last_name like '%e%';

6.1.15优先规则

6.1.16使用 ORDER BY 排序

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

SELECT 语句的执行顺序如下:

  • FROM 子句
  • WHERE 子句
  • SELECT 子句
  • ORDER BY 子句

示例一:

查询 employees 表中的所有雇员,显示他们的ID、名字与薪水,并按薪水升序排序。

1. select employee_id,last_name,salary from employees order by salary;
2. select employee_id,last_name,salary from employees order by salary asc;

使用别名排序

示例:

显示雇员ID,名字。计算雇员的年薪,年薪列别名为annsal,并对该列进行升序排序,

select employee_id,last_name ,12*salary annsal from employees order by annsal;

多列排序

示例:

以升叙排序显示 DEPARTMENT_ID 列,同时以降序排序显示 SALARY 列。

select department_id,salary from employees order by department_id asc ,salary desc;

6.1.17练习部分

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 中的雇员的名字和部门号,并以名字按字母顺序排序。

1. SELECT LAST_NAME ,DEPARTMENT_ID from employees WHERE DEPARTMENT_ID IN
2. (20,50) ORDER BY LAST_NAME ASC;

5.列出收入在 5,000 和 12,000 之间,并且在部门 20 或50 工作的雇员的名字和薪水。将列标题分别显示为 Employee 和 Monthly Salary

1. SELECT LAST_NAME AS Employee,SALARY AS `Monthly Salary` FROM employees
2. 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*SALARY*12 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%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_CLERK') AND SALARY NOT IN (2500,3500,7000);

七、MySQL函数

不同数据库对函数的实现时不同的,函数名也存在差异。

函数是 SQL 的一个非常强有力的特性,函数能够用于下面的目的:

  • 执行数据计算
  • 修改单个数据项
  • 操纵输出进行行分组
  • 格式化显示的日期和数字
  • 转换列数据类型

SQL 函数有输入参数,并且总有一个返回值。

7.1 单行函数

7.1.1单行函数的分类

单行函数仅对单个行进行运算,并且每行返回一个结果。

常见的函数类型:

  • 字符
  • 数字
  • 日期
  • 转换

7.1.2字符函数

大小写处理函数

函数 描述 实例
LOWER(s)|LCASE(s) 将字符串 s 转换为小写

将字符串 JAVA 转换为小写:

SELECT LOWER("JAVA"); -- java

UPPER(s)|UCASE(s) 将字符串s转换为大写

将字符串 java转换为大写:

SELECT UPPER("java"); -- JAVA

示例:

显示雇员 Davies 的雇员号、姓名和部门号,将姓名转换为大写。

SELECT EMPLOYEE_ID,UPPER(LAST_NAME),DEPARTMENT_ID FROM employees WHERE LAST_NAME = "Davies";

默认情况下MySQL中where子句的字符串是不区分大小写的

字符处理函数

函数 描述 实例
length(s) 返回字符串 s 的长度

返回字符串java的字符数

SELECT SELECT LENGTH("java");----4

concat(s1,s2...sn) 字符串 s1,s2 等多个字符串合并为一个字符串

合并多个字符串

SELECT CONCAT("java", "MySQL ");-----javaMySQL 

lpad(s1,len,s2) 在字符串 s1 的开始处填充字符串 s2,使字符串总长度达到 len

将字符串 "哈" 填充到 mysql字符串的开始处:

SELECT LPAD('mysql',8,'哈'); -- 哈哈哈mysql

ltrim(s) 去掉字符串 s 开始处的空格

去掉字符串 Java开始处的空格:

SELECT LTRIM(" Java") ;-- Java

replace(s,s1,s2) 将字符串 s2 替代字符串 s 中的字符串 s1

将字符串 java中的字符 a 替换为字符 O:

SELECT REPLACE('java','a','o'); --jovo

reverse(s) 将字符串s的顺序反过来

将字符串 java的顺序反过来:

SELECT REVERSE('java');--avaj

rpad(s1,len,s2) 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len

将字符串 "哈"填充到 Java字符串的结尾处:

SELECT RPAD('Java',8,'哈'); ---Java哈哈哈哈

rtrim(s) 去掉字符串 s 结尾处的空格

去掉字符串 java 的末尾空格:

SELECT RTRIM("java "); -- java

substr(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 Java中的第 2 个位置截取 3个 字符:

SELECT SUBSTR("Java", 2, 3); -- ava

substring(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 Java中的第 2 个位置截取 3个 字符:

SELECT SUBSTRING("Java", 2, 3); --ava

trim(s) 去掉字符串 s 开始和结尾处的空格

去掉字符串 java的首尾空格:

SELECT TRIM(' java ');--java

instr(s1,s2) 获取s2在s1首次出现的位置 SELECT instr('java', 'a');--2

7.1.3数字函数

函数名 描述 实例
ABS(x) 返回 x 的绝对值 返回 -1 的绝对值:SELECT ABS(-1) -- 返回1
ACOS(x) 求 x 的反余弦值(参数是弧度) SELECT ACOS(0.25);
ASIN(x) 求反正弦值(参数是弧度) SELECT ASIN(0.25);
ATAN(x) 求反正切值(参数是弧度) SELECT ATAN(2.5);
ATAN2(n, m) 求反正切值(参数是弧度) SELECT ATAN2(-0.8, 2);
AVG(expression) 返回一个表达式的平均值,expression 是一个字段 返回 Products 表中Price 字段的平均值:SELECT AVG(Price) AS AveragePrice FROM Products;
CEIL(x) 返回大于或等于 x 的最小整数 SELECT CEIL(1.5) -- 返回2
CEILING(x) 返回大于或等于 x 的最小整数 SELECT CEILING(1.5); -- 返回2
COS(x) 求余弦值(参数是弧度) SELECT COS(2);
COT(x) 求余切值(参数是弧度) SELECT COT(6);
COUNT(expression) 返回查询的记录总数,expression 参数是一个字段或者 * 号 返回 Products 表中 products 字段总共有多少条记录:SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;
DEGREES(x) 将弧度转换为角度 SELECT DEGREES(3.1415926535898) -- 180
n DIV m 整除,n 为被除数,m 为除数 计算 10 除于 5:SELECT 10 DIV 5; -- 2
EXP(x) 返回 e 的 x 次方 计算 e 的三次方:SELECT EXP(3) -- 20.085536923188
FLOOR(x) 返回小于或等于 x 的最大整数 小于或等于 1.5 的整数:SELECT FLOOR(1.5) -- 返回1
GREATEST(expr1, expr2, expr3, ...) 返回列表中的最大值 返回以下数字列表中的最大值:SELECT GREATEST(3, 12, 34, 8, 25); -- 34返回以下字符串列表中的最大值:SELECT GREATEST("Google", "Runoob", "Apple"); -- Runoob
LEAST(expr1, expr2, expr3, ...) 返回列表中的最小值 返回以下数字列表中的最小值:SELECT LEAST(3, 12, 34, 8, 25); -- 3返回以下字符串列表中的最小值:SELECT LEAST("Google", "Runoob", "Apple"); -- Apple
LN 返回数字的自然对数,以 e 为底。 返回 2 的自然对数:SELECT LN(2); -- 0.6931471805599453
LOG(x) 或 LOG(base, x) 返回自然对数(以 e 为底的对数),如果带有 base 参数,则 base 为指定带底数。 SELECT LOG(20.085536923188) -- 3 SELECT LOG(2, 4); -- 2
LOG10(x) 返回以 10 为底的对数 SELECT LOG10(100) -- 2
LOG2(x) 返回以 2 为底的对数 返回以 2 为底 6 的对数:SELECT LOG2(6); -- 2.584962500721156
MAX(expression) 返回字段 expression 中的最大值 返回数据表 Products 中字段 Price 的最大值:SELECT MAX(Price) AS LargestPrice FROM Products;
MIN(expression) 返回字段 expression 中的最小值 返回数据表 Products 中字段 Price 的最小值:SELECT MIN(Price) AS MinPrice FROM Products;
MOD(x,y) 返回 x 除以 y 以后的余数 5 除于 2 的余数:SELECT MOD(5,2) -- 1
PI() 返回圆周率(3.141593) SELECT PI() --3.141593
POW(x,y) 返回 x 的 y 次方 2 的 3 次方:SELECT POW(2,3) -- 8
POWER(x,y) 返回 x 的 y 次方 2 的 3 次方:SELECT POWER(2,3) -- 8
RADIANS(x) 将角度转换为弧度 180 度转换为弧度:SELECT RADIANS(180) -- 3.1415926535898
RAND() 返回 0 到 1 的随机数 SELECT RAND() --0.93099315644334
ROUND(x) 返回离 x 最近的整数 SELECT ROUND(1.23456) --1
SIGN(x) 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 SELECT SIGN(-10) -- (-1)
SIN(x) 求正弦值(参数是弧度) SELECT SIN(RADIANS(30)) -- 0.5
SQRT(x) 返回x的平方根 25 的平方根:SELECT SQRT(25) -- 5
SUM(expression) 返回指定字段的总和 计算 OrderDetails 表中字段 Quantity 的总和:SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
TAN(x) 求正切值(参数是弧度) SELECT TAN(1.75); -- -5.52037992250933
TRUNCATE(x,y) 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入) SELECT TRUNCATE(1.23456,3) -- 1.234

ROUND(column|expression, n) 函数

ROUND 函数四舍五入列、表达式或者 n 位小数的值。如果第二个参数是 0 或者缺少,值被四舍五入为整数。如果第二个参数是 2值被四舍五入为两位小数。如果第二个参数是–2,值被四舍五入到小数点左边两位。

SELECT ROUND(45.923,2), ROUND(45.923,0),ROUND(45.923,-1);-----45.92,46,50

TRUNCATE(column|expression,n) 函数

TRUNCATE函数的作用类似于 ROUND 函数。如果第二个参数是 0 或者缺少,值被截断为整数。如果第二个参数是 2,值被截断为两位小数。如果第二个参数是–2,值被截断到小数点左边两位。与 ROUND 最大的区别是不会进行四舍五入。

SELECT TRUNCATE(45.923,2);--45.92

使用MOD(m,n) 函数

MOD 函数找出m 除以n的余数。

7.1.4日期函数

在MySQL中允许直接使用字符串表示日期,但是要求字符串的日期格式必须为:‘YYYY-MM-DD HH:MI:SS’ 或者‘YYYY/MM/DD HH:MI:SS’;

函数名 描述 实例
CURDATE() 返回当前日期 SELECT CURDATE(); -> 2018-09-19
CURTIME() 返回当前时间 SELECT CURTIME(); -> 19:59:02
CURRENT_DATE() 返回当前日期 SELECT CURRENT_DATE(); -> 2018-09-19
CURRENT_TIME() 返回当前时间 SELECT CURRENT_TIME(); -> 19:59:02
DATE() 从日期或日期时间表达式中提取日期值 SELECT DATE("2017-06-15"); -> 2017-06-15
DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数 SELECT DATEDIFF('2001-01-01','2001-02-02') -> -32
DAY(d) 返回日期值 d 的日期部分 SELECT DAY("2017-06-15"); -> 15
DAYNAME(d) 返回日期 d 是星期几,如 Monday,Tuesday SELECT DAYNAME('2011-11-11 11:11:11') ->Friday
DAYOFMONTH(d) 计算日期 d 是本月的第几天 SELECT DAYOFMONTH('2011-11-11 11:11:11') ->11
DAYOFWEEK(d) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 SELECT DAYOFWEEK('2011-11-11 11:11:11') ->6
DAYOFYEAR(d) 计算日期 d 是本年的第几天 SELECT DAYOFYEAR('2011-11-11 11:11:11') ->315
HOUR(t) 返回 t 中的小时值 SELECT HOUR('1:2:3') -> 1
LAST_DAY(d) 返回给给定日期的那一月份的最后一天 SELECT LAST_DAY("2017-06-20"); -> 2017-06-30
MONTHNAME(d) 返回日期当中的月份名称,如 November SELECT MONTHNAME('2011-11-11 11:11:11') -> November
MONTH(d) 返回日期d中的月份值,1 到 12 SELECT MONTH('2011-11-11 11:11:11') ->11
NOW() 返回当前日期和时间 SELECT NOW() -> 2018-09-19 20:57:43
SECOND(t) 返回 t 中的秒钟值 SELECT SECOND('1:2:3') -> 3
SYSDATE() 返回当前日期和时间 SELECT SYSDATE() -> 2018-09-19 20:57:43
TIMEDIFF(time1, time2) 计算时间差值 SELECT TIMEDIFF("13:10:11", "13:10:10"); -> 00:00:01
TO_DAYS(d) 计算日期 d 距离 0000 年 1 月 1 日的天数 SELECT TO_DAYS('0001-01-01 01:01:01') -> 366
WEEK(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53 SELECT WEEK('2011-11-11 11:11:11') -> 45
WEEKDAY(d) 日期 d 是星期几,0 表示星期一,1 表示星期二 SELECT WEEKDAY("2017-06-15"); -> 3
WEEKOFYEAR(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53 SELECT WEEKOFYEAR('2011-11-11 11:11:11') -> 45
YEAR(d) 返回年份 SELECT YEAR("2017-06-15"); -> 2017
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
218 1
|
2月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
153 6
|
3月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
645 1
|
2月前
|
安全 前端开发 Java
从反射到方法句柄:深入探索Java动态编程的终极解决方案
从反射到方法句柄,Java 动态编程不断演进。方法句柄以强类型、低开销、易优化的特性,解决反射性能差、类型弱、安全性低等问题,结合 `invokedynamic` 成为支撑 Lambda 与动态语言的终极方案。
158 0
|
3月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
447 100
|
3月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
130 13
|
3月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
313 1
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
149 3
|
3月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

推荐镜像

更多