
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
发布日期:2025-04-15 07:35:20
浏览次数:5
分类:精选文章
本文共 3699 字,大约阅读时间需要 12 分钟。
MySQL 查询优化指南
1. 基本查询操作
在MySQL中,SELECT
语句是用来查询数据库中的数据。基本语法格式如下:
SELECT <字段1,字段2,…> FROM <表名> WHERE <表达式>表达式> 表名> 字段1,字段2,…>
1.1 查询表中所有数据
要查询表中所有数据,可以使用 *
来表示所有字段。以下是两种常见查询方式:
进入指定数据库查询:
首先进入目标数据库(这里以linzhongniaoDatabase
为例):mysql> use linzhongniaoDatabase
然后执行查询:
mysql> select * from test;
直接查询库下的表:
如果已知数据库和表名,可以直接查询:mysql> select * from linzhongniao.test;
1.2 根据指定条件查询表的部分数据
要根据条件查询数据,可以在 WHERE
子句中添加条件。
查看表中前2行数据:
使用LIMIT
关键字指定返回的行数:mysql> select * from linzhongniao.test limit 2;
查询指定字段:
仅查询某一字段的数据:mysql> select name from linzhongniao.test;
根据条件查询数据:
使用WHERE
子句添加查询条件:mysql> select * from linzhongniao.test where id='1';
注意:在字符串值周围使用单引号,否则可能会导致错误。
示例错误:
mysql> select * from linzhongniao.test where name=wwn1314;ERROR 1054 (42S22): Unknown column 'wwn1314' in 'where clause'
示例正确:
mysql> select * from linzhongniao.test where name='wwn1314';
多个条件可以使用 AND
或 OR
连接:
mysql> select * from linzhongniao.test where id='2' and name='linzhongiao';
或者:
mysql> select * from linzhongniao.test where id='2' or name='linzhongiao';
1.3 指定固定条件范围查询
可以通过 WHERE
子句指定字段的范围。
多个条件 AND 取交集:
例如,查询id
在 2 到 4 之间的数据:mysql> select * from linzhongniao.test where id>2 and id<4;
多个条件 OR 取并集:
例如,查询id
大于 2 或小于 4 的数据:mysql> select * from linzhongniao.test where id>2 or id<4;
1.4 排序查询
可以通过 ORDER BY
关键字对结果进行排序。
按升序查询:
例如,按id
升序查询:mysql> select * from linzhongniao.test order by id desc;
结果会从大到小返回:
示例输出:
+----+-------------+| id | name |+----+-------------+| 5 | xiaozhang || 4 | woshishei || 3 | lisi || 2 | wwn1314 || 1 | linzhogniao |+----+-------------+
按降序查询:
例如,按id
降序查询:mysql> select id,name from test order by id desc;
2. 多表查询
2.1 创建关联表
以下是创建多表关系的示例:
学生表:
mysql> CREATE TABLE student ( -> Sno int(10) NOT NULL COMMENT '学号', -> Sname varchar(16) NOT NULL COMMENT '姓名', -> Ssex char(2) NOT NULL COMMENT '性别', -> Sage tinyint(2) NOT NULL DEFAULT '0' COMMENT '年龄', -> Sdept varchar(16) DEFAULT NULL COMMENT '系别', -> PRIMARY KEY (Sno), -> KEY index_Sname (Sname) -> );
课程表:
mysql> CREATE TABLE course ( -> Cno int(10) NOT NULL COMMENT '课程号', -> Cname varchar(64) NOT NULL COMMENT '课程名', -> Ccredit tinyint(2) NOT NULL COMMENT '学分', -> PRIMARY KEY (Cno) -> );
选课表:
mysql> CREATE TABLE SC ( -> SCid int(12) NOT NULL AUTO_INCREMENT COMMENT '主键', -> Cno int(10) NOT NULL COMMENT '课程号', -> Sno int(10) NOT NULL COMMENT '学号', -> Grade tinyint(2) NOT NULL COMMENT '成绩', -> PRIMARY KEY (SCid) -> );
2.2 插入数据
学生表插入数据:
mysql> insert into student values('0001','张三','男','22','计算机网络');
课程表插入数据:
mysql> insert into course values(1001,'linux中高级运维','3');
选课表插入数据:
mysql> insert into SC(Sno,Cno,Grade) values(0001,1001,3);
2.3 查询数据
联合查询:
查询学生成绩和课程名,可以使用联合查询:mysql> select student.Sno,student.Sname,SC.Grade,course.Cname from student,course,SC where student.Sno=SC.Sno and course.Cno=SC.Cno;
按学号排序:
mysql> select student.Sno,student.Sname,SC.Grade,course.Cname from student,course,SC where student.Sno=SC.Sno and course.Cno=SC.Cno order by Sno;
3. 查询性能优化
3.1 使用 explain 获取执行计划
EXPLAIN
语句用于分析查询性能,帮助优化 SQL 语句。
表中没有索引:
mysql> explain select * from test where name='nimei'\G
输出示例:
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: testtype: ALLpossible_keys: NULLkey: NULLkey_len: NULLref: NULLrows: 5Extra: Using where
为 name
列创建索引:
mysql> create index index_name on test(name);
优化后的查询:
mysql> explain select * from test where name='nimei'\G
输出示例:
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: testtype: refpossible_keys: index_namekey: index_namekey_len: 20ref: constrows: 1Extra: Using where
通过索引优化,可以显著提升查询性能。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年05月08日 04时30分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ms sql server 2008 sp2更新异常
2025-04-15
MS SQL查询库、表、列数据结构信息汇总
2025-04-15
MS UC 2013-0-Prepare Tool
2025-04-15
MSBuild 教程(2)
2025-04-15
msbuild发布web应用程序
2025-04-15
MSB与LSB
2025-04-15
MSCRM调用外部JS文件
2025-04-15
MSCRM调用外部JS文件
2025-04-15
MsEdgeTTS开源项目使用教程
2025-04-15
msf
2025-04-15
MSFT Outlook VBA处理新邮件的方法
2025-04-15
MSN 协议分析
2025-04-15
MSN错误代码(error coed)解决大全
2025-04-15
MSP430F149学习之路——SPI
2025-04-15
msp430入门编程45
2025-04-15
MSP借助五招让中小企业签约云计算服务
2025-04-15
MSSQL数据库查询优化(一)
2025-04-15
MSSQL数据库迁移到Oracle(二)
2025-04-15
MSSQL日期格式转换函数(使用CONVERT)
2025-04-15