mysql高级语句(一)(总有一个人的出现,让你的生活不再继续糟糕)(一)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: mysql高级语句(一)(总有一个人的出现,让你的生活不再继续糟糕)(一)

前言


mysql高级SQL语句主要学习select语句


本章主要三个板块:


1.mysql进阶查询

2.mysql数据库函数

3.mysql存储过程


#准备实验所需的两张表
use stevelu;
create table location (Region char(20),Store_Name char(20));
insert into location values('East','Boston');
insert into location values('East','New York');
insert into location values('West','Los Angeles');
insert into location values('West','Houston');
mysql> select * from location ;
+--------+-------------+
| region | store_name  |
+--------+-------------+
| East   | Boston      |
| East   | New York    |
| West   | Los Angeles |
| West   | Houstion    |
+--------+-------------+
create table store_info (Store_Name char(20),Sales int(10),Date char(10));
insert into store_info values('Los Angeles','1500','2020-12-05');
insert into store_info values('Houston','250','2020-12-07');
insert into store_info values('Los Angeles','300','2020-12-08');
insert into store_info values('Boston','700','2020-12-08');
mysql> select * from store_info;
+-------------+-------+------------+
| Store_Name  | Sales | Date       |
+-------------+-------+------------+
| Los Angeles |  1500 | 2020-12-05 |
| Houston     |   250 | 2020-12-07 |
| Los Angeles |   300 | 2020-12-08 |
| Boston      |   700 | 2020-12-08 |
+-------------+-------+------------+


一、mysql进阶查询(1)


1.1 SELECT

---- SELECT ----显示表格中一个或数个字段的所有数据记录
语法:SELECT "字段" FROM "表名";
#查询表中的指定字段
mysql> SELECT Store_Name FROM store_info;
+-------------+
| Store_Name  |
+-------------+
| Los Angeles |
| Houston     |
| Los Angeles |
| Boston      |
+-------------+
#查询时可以把字段重新排序
mysql> select date,Store_Name,Sales from store_info;
+------------+-------------+-------+
| date       | Store_Name  | Sales |
+------------+-------------+-------+
| 2020-12-05 | Los Angeles |  1500 |
| 2020-12-07 | Houston     |   250 |
| 2020-12-08 | Los Angeles |   300 |
| 2020-12-08 | Boston      |   700 |
+------------+-------------+-------+


1.2 DISTINCT

---- DISTINCT ----不显示重复的数据记录
语法:SELECT DISTINCT "字段" FROM "表名";
#不显示重复记录(DISTINCT加在字段前面)
mysql> SELECT DISTINCT Store_Name FROM store_info;
+-------------+
| Store_Name  |
+-------------+
| Los Angeles |
| Houston     |
| Boston      |
+-------------+
mysql> SELECT DISTINCT Store_Name,date FROM store_info;
+-------------+------------+
| Store_Name  | date       |
+-------------+------------+
| Los Angeles | 2020-12-05 |
| Houston     | 2020-12-07 |
| Los Angeles | 2020-12-08 |
| Boston      | 2020-12-08 |
+-------------+------------+

1.3 WHERE

---- WHERE ----有条件查询
语法:SELECT "字段" FROM "表名" WHERE "条件";
#查询Store_Name为Houston的记录
mysql> select * from store_info where Store_Name='Houston';
+------------+-------+------------+
| Store_Name | Sales | Date       |
+------------+-------+------------+
| Houston    |   250 | 2020-12-07 |
+------------+-------+------------+
#查询Sales大于1000的Store_Name
mysql> SELECT Store_Name FROM store_info WHERE Sales > 1000;
+-------------+
| Store_Name  |
+-------------+
| Los Angeles |
+-------------+


1.4 AND OR

---- AND OR ----且 或
语法:SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;
#查询sales大于500小于1000的store_name
mysql> select store_name from store_info where sales >500 and sales <1000;
+------------+
| store_name |
+------------+
| Boston     |
+------------+
#查看sales大于200小于500,或者大于1000,且和或同时有记得加括号,把括号里面作为一个整体优先看待
mysql> select store_name,sales from store_info where (sales >200 and sales <500) or sales>1000;
+-------------+-------+
| store_name  | sales |
+-------------+-------+
| Los Angeles |  1500 |
| Houston     |   250 |
| Los Angeles |   300 |
+-------------+-------+


1.5 IN

---- IN ----显示已知的值的数据记录
#括号里面的值作为一个池子,有匹配该字段的就显示(值要用单引号)
语法:SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);
#查询Store_Name等于'Los Angeles'或 'Houston'
mysql> SELECT * FROM store_info WHERE Store_Name IN ('Los Angeles', 'Houston');
+-------------+-------+------------+
| Store_Name  | Sales | Date       |
+-------------+-------+------------+
| Los Angeles |  1500 | 2020-12-05 |
| Houston     |   250 | 2020-12-07 |
| Los Angeles |   300 | 2020-12-08 |
+-------------+-------+------------+
3 rows in set (0.00 sec)
#查询Store_Name不等于'Los Angeles'或 'Houston' (与上述操作取反)
mysql> SELECT * FROM store_info WHERE Store_Name not IN ('Los Angeles', 'Houston');
+------------+-------+------------+
| Store_Name | Sales | Date       |
+------------+-------+------------+
| Boston     |   700 | 2020-12-08 |
+------------+-------+------------+
1 row in set (0.00 sec)


1.6 BETWEEN

---- BETWEEN ----显示两个值范围内的数据记录
语法:SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';(数值左小右大)
#查询date在'2020-12-06' 和 '2020-12-10'之间的记录
mysql> SELECT * FROM store_info WHERE Date BETWEEN '2020-12-06' AND '2020-12-10';
+-------------+-------+------------+
| Store_Name  | Sales | Date       |
+-------------+-------+------------+
| Houston     |   250 | 2020-12-07 |
| Los Angeles |   300 | 2020-12-08 |
| Boston      |   700 | 2020-12-08 |
+-------------+-------+------------+
3 rows in set (0.00 sec)


1.7 通配符与like

----通配符----通常通配符都是跟 LIKE 一起使用的(与Linux的通配符不同)
---- LIKE ----匹配一个模式来找出我们要的数据记录
语法:SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式};
SELECT * FROM Store_Info WHERE Store_Name like '%os%';
% :百分号表示零个、一个或多个字符
_ :下划线表示单个字符
'A_Z':所有以 'A' 起头,另一个任何值的字符,且以 'Z' 为结尾的字符串。例如,'ABZ' 和 'A2Z' 都符合这一个模式,而 'AKKZ' 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。
'ABC%': 所有以 'ABC' 起头的字符串。例如,'ABCD' 和 'ABCABC' 都符合这个模式。
'%XYZ': 所有以 'XYZ' 结尾的字符串。例如,'WXYZ' 和 'ZZXYZ' 都符合这个模式。
'%AN%': 所有含有 'AN'这个模式的字符串。例如,'LOS ANGELES' 和 'SAN FRANCISCO' 都符合这个模式。
'_AN%':所有第二个字母为 'A' 和第三个字母为 'N' 的字符串。例如,'SAN FRANCISCO' 符合这个模式,而 'LOS ANGELES' 则不符合这个模式。
#查询以on结尾的Store_Name的记录
mysql> select * from store_info where store_name like '%on';
+------------+-------+------------+
| Store_Name | Sales | Date       |
+------------+-------+------------+
| Houston    |   250 | 2020-12-07 |
| Boston     |   700 | 2020-12-08 |
+------------+-------+------------+
2 rows in set (0.00 sec)


1.8 ORDER BY

---- ORDER BY ----按关键字排序(通常是对数值排序)
语法:SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。
#对Sales值降序排序
mysql> SELECT Store_Name,Sales,Date FROM store_info ORDER BY Sales DESC;
+-------------+-------+------------+
| Store_Name  | Sales | Date       |
+-------------+-------+------------+
| Los Angeles |  1500 | 2020-12-05 |
| Boston      |   700 | 2020-12-08 |
| Los Angeles |   300 | 2020-12-08 |
| Houston     |   250 | 2020-12-07 |
+-------------+-------+------------+
4 rows in set (0.00 sec)
#对store_name值的字母升序排序
mysql> select * from store_info order by store_name;
+-------------+-------+------------+
| Store_Name  | Sales | Date       |
+-------------+-------+------------+
| Boston      |   700 | 2020-12-08 |
| Houston     |   250 | 2020-12-07 |
| Los Angeles |  1500 | 2020-12-05 |
| Los Angeles |   300 | 2020-12-08 |
+-------------+-------+------------+
4 rows in set (0.00 sec)

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
存储 SQL 关系型数据库
二、MySQL高级分享2
二、MySQL高级分享2
37 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL基础详讲(高级部分)
MySQL是一种关系型数据库管理系统(RDBMS),它是一种开源数据库软件,广泛用于Web应用程序的开发和数据存储
67 3
|
7月前
|
关系型数据库 MySQL Java
MySQL高级【约束】第七章(上)
MySQL高级【约束】第七章
|
7月前
|
存储 SQL 关系型数据库
【MYSQL高级】数据生成与插入脚本编写与使用
【MYSQL高级】数据生成与插入脚本编写与使用
99 1
|
7月前
|
SQL 监控 关系型数据库
【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】
473 0
|
4月前
|
关系型数据库 MySQL 数据库
深入理解MySQL:从基础到高级数据库管理
深入理解MySQL:从基础到高级数据库管理
113 0
|
4月前
|
SQL 存储 缓存
SQL语句在MySQL中是如何执行的
SQL语句在MySQL中是如何执行的
46 0
|
3月前
|
SQL 关系型数据库 MySQL
Java中的MySQL高级使用手册:解锁数据库之道
Java中的MySQL高级使用手册:解锁数据库之道
50 1
|
4月前
|
存储 关系型数据库 MySQL
三、MySQL高级分享-分页
三、MySQL高级分享-分页
36 0
|
5月前
|
存储 SQL 关系型数据库
Mysql高级完整版
Mysql高级完整版
54 0