MySQL 查询

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL 查询

准备练习环境

导入数据库

mysql> source /root/practice.sql

库内容:

查询库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| crashcourse        |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

进入库

mysql> use crashcourse;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

查看表

mysql> show tables;
+-----------------------+
| Tables_in_crashcourse |
+-----------------------+
| customers             |
| orderitems            |
| orders                |
| productnotes          |
| products              |
| vendors               |
+-----------------------+
6 rows in set (0.00 sec)

select命令

数据列限制输出行数  

SELECT 列名 FROM 表名 LIMIT 行数;

mysql> SELECT prod_name FROM products LIMIT 5,5; -- DATA ROW 6 TO 10
+--------------+
| prod_name    |
+--------------+
| Carrots      |
| Fuses        |
| JetPack 1000 |
| JetPack 2000 |
| Oil can      |
+--------------+
5 rows in set (0.00 sec)

查询列数据

SELECT 字段列表 FROM 库名.表名;

数据列去重 SELECT DISTINCT

查看订单表的所有内容

mysql> select *  from orders ;
+-----------+---------------------+---------+
| order_num | order_date          | cust_id |
+-----------+---------------------+---------+
|     20005 | 2023-09-01 00:00:00 |   10001 |
|     20006 | 2023-09-12 00:00:00 |   10003 |
|     20007 | 2023-09-30 00:00:00 |   10004 |
|     20008 | 2023-10-03 00:00:00 |   10005 |
|     20009 | 2023-10-08 00:00:00 |   10001 |
+-----------+---------------------+---------+
5 rows in set (0.00 sec)

排序 order by 列名 (desc)

根据列的值进行从小到大的排序输出,使用desc 排序结果为从大到小

1、排序结果对整行数据生效

2、使用多列作为排序的依据时,首先使用第一个指定的列对整体表排序,然后对于第一列 中存在的重复的列,使用指定的第二列数据进行小范围排序

mysql> SELECT prod_id,prod_name FROM products ORDER BY prod_name;
+---------+----------------+
| prod_id | prod_name      |
+---------+----------------+
| ANV01 | .5 ton anvil     |
| ANV02 | 1 ton anvil      |
| ANV03 | 2 ton anvil      |
| FB | Bird seed           |
| FC | Carrots             |
| DTNTR | Detonator        |
| FU1 | Fuses              |
| JP1000 | JetPack 1000    |
| JP2000 | JetPack 2000    |
| OL1 | Oil can            |
| SAFE | Safe              |
| SLING | Sling            |
| TNT1 | TNT (1 stick)     |
| TNT2 | TNT (5 sticks)    |
+---------+----------------+
14 rows in set (0.00 sec)

where子句

SELECT 列名1,.... FROM 表 WHERE 过滤条件;

比较符号:

= != > >= < <=

空 is null 表头下没有数据

非空 is not null 表头下有数据

mysql服务 使用关键字 null 或 NULL 表示表头没有数据

范围匹配:

in (值列表) //在…里

not in (值列表) //不在…里

between 数字1 and 数字2 //在…之间

查看订单表中订单数量为20005的信息

mysql> select *  from orders where order_num = 20005;
+-----------+---------------------+---------+
| order_num | order_date          | cust_id |
+-----------+---------------------+---------+
|     20005 | 2023-09-01 00:00:00 |   10001 |
+-----------+---------------------+---------+
1 row in set (0.00 sec)

查看客户信息中id在10001到10003之间的信息

mysql> select *  from customers where cust_id between 10001 and 10003 ;
+---------+-------------+------------------+-----------+------------+----------+--------------+--------------+---------------------+
| cust_id | cust_name   | cust_address     | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email          |
+---------+-------------+------------------+-----------+------------+----------+--------------+--------------+---------------------+
|   10001 | Coyote Inc. | 200 Maple Lane   | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com     |
|   10002 | Mouse House | 333 Fromage Lane | Columbus  | OH         | 43333    | USA          | Jerry Mouse  | NULL                |
|   10003 | Wascals     | 1 Sunny Place    | Muncie    | IN         | 42222    | USA          | Jim Jones    | rabbit@wascally.com |
+---------+-------------+------------------+-----------+------------+----------+--------------+--------------+---------------------+
3 rows in set (0.01 sec)

模糊匹配

where 字段名 like "表达式";

通配符:

_ 表示 1个字符

% 表示零个或多个字符

查找顾客表中顾客联系人信息为”一个字符[空格]三个字符“的信息

mysql> select *  from customers where cust_contact like "_ ___" ;
+---------+----------------+---------------------+-----------+------------+----------+--------------+--------------+------------------+
| cust_id | cust_name      | cust_address        | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email       |
+---------+----------------+---------------------+-----------+------------+----------+--------------+--------------+------------------+
|   10001 | Coyote Inc.    | 200 Maple Lane      | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com  |
|   10004 | Yosemite Place | 829 Riverside Drive | Phoenix   | AZ         | 88888    | USA          | Y Sam        | sam@yosemite.com |
+---------+----------------+---------------------+-----------+------------+----------+--------------+--------------+------------------+
2 rows in set (0.00 sec)

找顾客名字以字母c开头的(没有空格挨着敲)

mysql> select *  from customers where cust_name like "c%" ;
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+
| cust_id | cust_name   | cust_address   | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email      |
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+
|   10001 | Coyote Inc. | 200 Maple Lane | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com |
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+-----------------+
1 row in set (0.00 sec)

逻辑比较

多个判断条件

逻辑与 and (&&) 多个判断条件必须同时成立

逻辑或  or (||) 多个判断条件其中某个条件成立即可

逻辑非  not (!) 取反

逻辑与and 优先级高于逻辑或 or

查找id为10001或住址在Sunny Place的顾客

mysql> select *  from customers where cust_id = 10001 or cust_address = "1 Sunny Place" ;
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+---------------------+
| cust_id | cust_name   | cust_address   | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email          |
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+---------------------+
|   10001 | Coyote Inc. | 200 Maple Lane | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com     |
|   10003 | Wascals     | 1 Sunny Place  | Muncie    | IN         | 42222    | USA          | Jim Jones    | rabbit@wascally.com |
+---------+-------------+----------------+-----------+------------+----------+--------------+--------------+---------------------+
2 rows in set (0.00 sec)

正则匹配

select 字段名列表 from 库名.表名 where字段名 regexp '正则表达式';

转义字符

回顾shell学过的元字符(正则符号)

^ 匹配行首

$ 匹配行尾

[] 匹配范围内任意一个

* 前边的表达式出现零次或多次

| 或者

. 任意一个字符

匹配cust_zip 中以0~5数字开头的信息

mysql> select *  from customers where cust_zip regexp "^[0-5]";
+---------+-------------+------------------+-----------+------------+----------+--------------+--------------+---------------------+
| cust_id | cust_name   | cust_address     | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email          |
+---------+-------------+------------------+-----------+------------+----------+--------------+--------------+---------------------+
|   10001 | Coyote Inc. | 200 Maple Lane   | Detroit   | MI         | 44444    | USA          | Y Lee        | ylee@coyote.com     |
|   10002 | Mouse House | 333 Fromage Lane | Columbus  | OH         | 43333    | USA          | Jerry Mouse  | NULL                |
|   10003 | Wascals     | 1 Sunny Place    | Muncie    | IN         | 42222    | USA          | Jim Jones    | rabbit@wascally.com |
|   10005 | E Fudd      | 4545 53rd Street | Chicago   | IL         | 54545    | USA          | E Fudd       | NULL                |
+---------+-------------+------------------+-----------+------------+----------+--------------+--------------+---------------------+
4 rows in set (0.00 sec)

别名/合并

定义别名使用   as  或  空格

mysql> select vend_id,vend_name as vname,vend_address as vaddress ,vend_city as
    -> vcity from vendors order by vend_name;
+---------+----------------+-----------------+-------------+
| vend_id | vname          | vaddress        | vcity       |
+---------+----------------+-----------------+-------------+
|    1003 | ACME           | 555 High Street | Los Angeles |
|    1001 | Anvils R Us    | 123 Main Street | Southfield  |
|    1004 | Furball Inc.   | 1000 5th Avenue | New York    |
|    1005 | Jet Set        | 42 Galaxy Road  | London      |
|    1006 | Jouets Et Ours | 1 Rue Amusement | Paris       |
|    1002 | LT Supplies    | 500 Park Street | Anytown     |
+---------+----------------+-----------------+-------------+
6 rows in set (0.01 sec)

拼接   concat()

mysql> select concat(name,"-",uid) as 用户信息 from tarena.user where uid <= 5;
+--------------+
| 用户信息     |
+--------------+
| root-0       |
| bin-1        |
| daemon-2     |
| adm-3        |
| lp-4         |
| sync-5       |
+--------------+
6 rows in set (0.00 sec)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL 索引
MySQL的全文索引查询方法
【8月更文挑战第26天】MySQL的全文索引查询方法
39 0
|
2月前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
40 1
|
2月前
|
自然语言处理 关系型数据库 MySQL
MySQL MATCH 匹配中文 无法查询的问题如何处理?
【8月更文挑战第27天】MySQL MATCH 匹配中文 无法查询的问题如何处理?
141 62
|
21天前
|
SQL 缓存 关系型数据库
MySQL高级篇——关联查询和子查询优化
左外连接:优先右表创建索引,连接字段类型要一致、内连接:驱动表由数据量和索引决定、 join语句原理、子查询优化:拆开查询或优化成连接查询
MySQL高级篇——关联查询和子查询优化
|
24天前
|
SQL 关系型数据库 MySQL
MySQL查询(万字超详细版)
本文详细介绍了数据库中的单表和多表查询方法。首先,单表查询包括全列查询、指定列查询及去重查询,其中应避免使用`*`以提高效率。接着,文章讲解了排序查询,包括升序和降序,并展示了如何通过多个字段进行排序。在多表查询部分,本文解释了内连接、外连接(左外连接和右外连接)以及自连接的概念和用法,提供了丰富的代码示例
24 1
MySQL查询(万字超详细版)
|
6天前
|
存储 关系型数据库 MySQL
MySQL索引失效及避免策略:优化查询性能的关键
MySQL索引失效及避免策略:优化查询性能的关键
23 3
|
8天前
|
关系型数据库 MySQL 数据库
MySQL 表的CRUD与复合查询
【9月更文挑战第26天】本文介绍了数据库操作中的 CRUD(创建、读取、更新、删除)基本操作及复合查询。创建操作使用 `INSERT INTO` 语句插入数据,支持单条和批量插入;读取操作使用 `SELECT` 语句查询数据,可进行基本查询、条件查询和排序查询;更新操作使用 `UPDATE` 语句修改数据;删除操作使用 `DELETE FROM` 语句删除数据。此外,还介绍了复合查询,包括连接查询(如内连接、左连接)和子查询,以及聚合函数与分组查询,并提供了示例代码。
|
11天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
37 4
|
14天前
|
NoSQL 关系型数据库 MySQL
当Redis与MySQL数据一致性校验中Redis数据量小于MySQL时的全量查询处理方法
保持Redis和MySQL之间的数据一致性是一个需要细致规划和持续维护的过程。通过全量数据同步、建立增量更新机制,以及定期执行数据一致性校验,可以有效地管理和维护两者之间的数据一致性。此外,利用现代化的数据同步工具可以进一步提高效率和可靠性。
35 6
|
11天前
|
关系型数据库 MySQL
mysql查询速度慢怎么解决?
mysql查询速度慢怎么解决?
32 2
下一篇
无影云桌面