MySQL基础语句(查询)
students表
id | class_id | name | gender | score |
---|---|---|---|---|
1 | 1 | 小明 | M | 90 |
2 | 1 | 小红 | F | 95 |
3 | 1 | 小军 | M | 88 |
4 | 1 | 小米 | F | 73 |
5 | 2 | 小白 | F | 81 |
6 | 2 | 小兵 | M | 55 |
7 | 2 | 小林 | M | 85 |
8 | 3 | 小新 | F | 91 |
9 | 3 | 小王 | M | 89 |
10 | 3 | 小丽 | F | 88 |
classes表
id | name |
---|---|
1 | 一班 |
2 | 二班 |
3 | 三班 |
4 | 四班 |
①基本查询
SELECT * FROM students;
SELECT * FROM classes;
查询出students
表,classes表的所有数据。注意:查询结果也是一个二维表,它包含列名和每一行的数据。
②条件查询
常用的条件表达式
条件 | 表达式举例1 | 表达式举例2 | 说明 |
---|---|---|---|
使用=判断相等 | score = 80 | name = 'abc' | 字符串需要用单引号括起来 |
使用>判断大于 | score > 80 | name > 'abc' | 字符串比较根据ASCII码,中文字符比较根据数据库设置 |
使用>=判断大于或相等 | score >= 80 | name >= 'abc' | |
使用<判断小于 | score < 80 | name <= 'abc' | |
使用<=判断小于或相等 | score <= 80 | name <= 'abc' | |
使用<>判断不相等 | score <> 80 | name <> 'abc' | |
使用LIKE判断相似 | name LIKE 'ab%' | name LIKE '%bc%' | %表示任意字符,例如'ab%'将匹配'ab','abc','abcd' |
SELECT * FROM students WHERE score >= 80 AND gender = 'M';
查询出students
表符合条件“分数在80分或以上”,并且还符合条件“男生”
SELECT * FROM students WHERE NOT class_id = 2;
查询出students
表“不是2班的学生”
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';
查询出students
表分数在80以下或者90以上,并且是男生
③投影查询
SELECT id, score points, name FROM students;
从students
表中返回id
、score
和name
这三列,列名score
重命名为points
,而id
和name
列名保持不变
④排序
SELECT id, name, gender, score FROM students ORDER BY score;
查询出students
表按照成绩从低到高进行排序,加上DESC
表示“倒序”
SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;
查询出students
表使用ORDER BY score DESC, gender
表示先按score
列倒序,如果有相同分数的,再按gender
列排序
SELECT id, name, gender, score FROM students WHERE class_id = 1 ORDER BY score DESC;
查询出students
表有WHERE
子句,那么ORDER BY
子句要放到WHERE
子句后面。例如,查询一班的学生成绩,并按照倒序排序
⑤分页查询
SELECT id, name, gender, score FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;
查询出students
表把结果集分页,每页3条记录。要获取第1页的记录,可以使用LIMIT 3 OFFSET 0
可见,分页查询的关键在于,首先要确定每页需要显示的结果数量pageSize
(这里是3),然后根据当前页的索引pageIndex
(从1开始),确定LIMIT
和OFFSET
应该设定的值:
LIMIT
总是设定为pageSize
;OFFSET
计算公式为pageSize * (pageIndex - 1)
。
这样就能正确查询出第N页的记录集。
⑥聚合查询
SELECT COUNT(*) num FROM students;
查询students
表一共有多少条记录
SELECT AVG(score) average FROM students WHERE gender = 'M';
查询students
表统计男生的平均成绩
SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender;
查询students
表各班的男生和女生人数
SELECT class_id,AVG(score) point FROM students GROUP BY class_id;
查询查出每个班级的平均分
SELECT class_id,gender,AVG(score) FROM students GROUP BY class_id,gender;
查询查出每个班级男生和女生的平均分
聚合查询的WHERE
条件没有匹配到任何行,COUNT()
会返回0,而SUM()
、AVG()
、MAX()
和MIN()
会返回NULL
⑦连接查询
假设我们希望结果集同时包含所在班级的名称,上面的结果集只有class_id
列,缺少对应班级的name
列。
现在问题来了,存放班级名称的name
列存储在classes
表中,只有根据students
表的class_id
,找到classes
表对应的行,再取出name
列,就可以获得班级名称。
这时,连接查询就派上了用场。我们先使用最常用的一种内连接——INNER JOIN来实现
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;
查询查出students
表的所有学生信息包含所在班级的名称
INNER JOIN查询的写法是:
- 先确定主表,仍然使用
FROM <表1>
的语法; - 再确定需要连接的表,使用
INNER JOIN <表2>
的语法; - 然后确定连接条件,使用
ON <条件...>
,这里的条件是s.class_id = c.id
,表示students
表的class_id
列与classes
表的id
列相同的行需要连接; - 可选:加上
WHERE
子句、ORDER BY
等子句。
多数内容转载自廖雪峰老师文章,仅供学习参考使用
最新文章
- HTML5网页录音和压缩,边猜边做..(附源码)
- 分享一个漂亮的ASP.NET MVC界面框架
- TortoiseSVN使用简介(转)
- RH的NFS配置--简单OK
- Cocos2d-Java安装和配置跨平台游戏引擎以及相关的开发工具
- Nginx+IIS+Redis 处理Session共享问题 1
- sizeof(void)有什么用
- JDBC操作MySQL数据
- 慢阻肺疾病管理APP——第一次迭代心得
- [转帖]关于CPU Cache -- 程序猿需要知道的那些事
- browserify运行原理分析
- ssh整合not found class 异常总结
- 【maven】之使用import scope解决maven继承(单)问题
- kubernetes国内镜像拉取
- 未能加载文件或程序集“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。
- php 换行 PHP_EOL
- Web开发工具箱
- js取整、四舍五入等数学函数
- Java演示手机发送短信验证码功能实现
- JDBC小常识
热门文章
- YbtOJ#791-子集最值【三维偏序】
- 基于 Vuex 的时移操作(撤回/恢复)实现
- 《集体智慧编程学习笔记》——Chapter2:提供推荐
- bootstrap inputfile 使用-上传,回显
- asp.net core 中配合响应 html5 的音视频播放流,以及文件下载
- 自然语言处理标注工具——Brat(安装、测试、使用)
- java 从零开始手写 RPC (05) reflect 反射实现通用调用之服务端
- 手机淘宝轻店业务 Serverless 研发模式升级实践
- Unity——AssetBundle打包工具
- 题解 [APIO2013]道路费用