当前位置:网站首页>MySQL数据指令
MySQL数据指令
2022-08-09 17:14:00 【InfoQ】
数据指令
增删改查
mysql> INSERT INTO student
-> (ID,name,grade)
-> VALUES(755,'王东浩',80);Copy to clipboardErrorCopied
mysql> REPLACE INTO student
-> (ID,name,grade)
-> VALUES(755,'王东浩',80);Copy to clipboardErrorCopied
mysql> UPDATE student
-> SET name='孙鹏',grade=60
-> WHERE id=753;Copy to clipboardErrorCopied
mysql> DELETE FROM student
-> WHERE id=754;Copy to clipboardErrorCopied
mysql> SELECT id,name FROM student -- 按条件查询数据
-> WHERE id BETWEEN 753 and 755;
mysql> SELECT * FROM student; -- 查询全部数据Copy to clipboardErrorCopied
条件语句
- DISTINCT 关键字用于对查询结果去重,必须放于所有字段前。只有多个字段全部相等才会被去重。
mysql> SELECT DINTINCE age,sex FROM student; -- 查询数据并去重Copy to clipboardErrorCopied
- WHERE 语句用于指定 更新/删除/查询 的操作范围,如果不设定范围将对全部数据进行操作。
mysql> SELECT * FROM student WHERE id = 100;
mysql> SELECT * FROM student WHERE id != 100;
mysql> SELECT * FROM student WHERE id [NOT] BETWEEN 30 AND 50;
mysql> SELECT * FROM student WHERE id [NOT] IN (30, 35 ,50);
mysql> SELECT * FROM student WHERE grade IS [NOT] NULL;Copy to clipboardErrorCopied
- LIKE 语句用于对字符串进行模糊匹配:
%代表任意多个字符 _代表一个字符 /代表转义
mysql> SELECT * FROM student WHERE name LIKE 'Tom%';Copy to clipboardErrorCopied
分组排序
数据分组
- GROUP 语句指定数据的分组方式,如果不含则默认把全部数据合并为一条数据。(本质是生成临时表)
- AS 关键字为表或者列起别名,可省略。
- HAVING 语句对分组后的结果进行筛选。
-- 查询班级总数
mysql> SELECT COUNT(*) FROM class; -- 全部合并
-- 查询各年级人数
mysql> SELECT grade, SUM(class.student_num) AS nums
-> FROM class
-> GROUP BY grade -- 各班数据按年级合并
-> HAVING SUM(class.student_num) > 200; -- 筛选人数大于 200 的年级Copy to clipboardErrorCopied
数据排序
- ORDER 语句指定数据显示顺序,ASC 为升序 / DESC 为降序。
- LIMIT 语句对排序后的数据进行筛选,指定起始序号和总数量。
-- 查询学生信息
mysql> SELECT *
-> FROM student
-> ORDER BY grade DESC, ID ASC -- 按成绩降序排列,若相同按学号升序排列
-> LIMIT 10,20; -- 筛选第 11 - 30 名Copy to clipboardErrorCopied
多表查询
嵌套查询
- FROM 型:子语句返回一个表,且必须给子查询结果取别名。
- WHERE 型:子语句返回一个值,不能用于 UPDATE。
-- FROM 型
mysql> SELECT *
-> FROM (SELECT * FROM tb WHERE id > 0) AS subfrom
-> WHERE id > 1;
-- WHERE 型
mysql> SELECT *
-> FROM tb
-> WHERE money = (SELECT max(money) FROM tb);Copy to clipboardErrorCopied
合并查询
- 默认为 DISTINCT 形式,不同表查询到的相同数据只展示一个。
- 设置为 ALL 则不同表查询到的相同结果重复展示。
-- DISTINCT 形式
mysql> (SELECT * FROM student WHERE id < 10)
-> UNION
-> (SELECT * FROM student WHERE id > 20);
-- ALL 形式
mysql> (SELECT * FROM student1)
-> UNION ALL
-> (SELECT * FROM student2);Copy to clipboardErrorCopied
连表查询
- 内连接 INNER JOIN:(默认)未指定连接条件时,自动查找相同字段名匹配连接条件。
mysql> SELECT s.id,s.name,c.name
-> FROM student s JOIN class c
-> ON e.cid = c.id;
mysql> SELECT *
-> FROM student s, class c
-> WHERE s.id = c.id; Copy to clipboardErrorCopied
- 交叉连接 CROSS JOIN:未指定连接条件时,视为无连接条件。
mysql> SELECT *
-> FROM boy CROSS JOIN girl; -- 显示所有交配可能
mysql> SELECT *
-> FROM boy, girl; -- 等价写法Copy to clipboardErrorCopied
- 外连接 OUTER JOIN:如果数据不存在,也会出现在连接结果中。
- LEFT JOIN:左表数据一定显示,没有匹配右表数据用 null 填充。
- RIGHT JOIN:右表数据一定显示,没有匹配左表数据用 null 填充。
- FULL JOIN:两表数据一定显示,没有匹配数据用 null 填充。
mysql> SELECT s.id,s.name,c.name -- 显示学生的班级信息
-> FROM student s LEFT JOIN class c -- 没有班级的学生也会显示
-> ON s.cid = c.id;
-- 先筛选再连接(效率等价,但如果有大量重复值提前筛选可以提高效率)
mysql> SELECT s.id,s.name,c.name
-> FROM student s LEFT JOIN (SELECT DINTINCT id, name FROM class) c
-> ON s.cid = c.id;边栏推荐
猜你喜欢

How to choose a good SaaS knowledge base tool?

JVM内存模型和结构详解(五大模型图解)

What are some good open source automation testing frameworks to recommend?

动态RDLC报表(一)

动态RDLC报表(七)

有什么好的开源自动化测试框架可以推荐?
![[Pycharm easy to use function]](/img/f8/4c131516033286ba8bcb511d395462.png)
[Pycharm easy to use function]

Discuz! Forum program installation + template configuration tutorial

Volatile: JVM I warn you, my people don't move

EPIC是什么平台?
随机推荐
AlphaControls 控件 TsPanel TsGroupBox 块与组的结合
一文深入了解 Hybrid 的实现原理
InfluxDB语法
低代码平台和专业开发人员——完美搭档?
Metasploit——辅助模块(Auxiliary)
EPIC是什么平台?
OpenCV 轮廓 —— 轮廓匹配
SSM框架练手项目,高企必备的管理系统—CRM管理系统
不是吧,连公司里的卷王写代码都复制粘贴,这合理?
动手学深度学习_全卷积网络 FCN
【Pycharm好用功能】
神秘的程序员(20-30)
学长告诉我,大厂MySQL都是通过SSH连接的
动态RDLC报表(七)
学长告诉我,大厂MySQL都是通过SSH连接的
动态RDLC报表(四)
[极客大挑战 2019]HardSQL
What is test development and why is it so popular now?
为什么修补应用程序漏洞并不容易
The most complete architect knowledge map in history