一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
写在前面👀
DQL(Data Query Language),数据查询语言,用来查询表中的记录。关键字:
SELECT,WHERE等
一、准备工作👓
1️⃣Navicat安装
一款可视化的数据库管理软件
2️⃣建一个学生信息表📋
CREATE TABLE `stu_info` (
id int NOT NULL AUTO_INCREMENT, # 学号,自动递增
name varchar(10), # 姓名
age int, # 年龄
gender tinyint, # 性别 0代表男生,1代表女生
math float(4,1), # 数学分数
english float(4,1), # 英语分数
hometown varchar(10), # 家乡
PRIMARY KEY (id) # 将id设置为主键
);
3️⃣为表添加一些数据📜
INSERT INTO stu_info (name,age,gender,math,english,hometown) VALUES
('大角牛',17,0,null,null,'衢州'),
('倔强的牛角',17,0,60,60,'沈阳'),
('牛丫丫',16,1,99.9,99.9,'衢州'),
('牛秀珠',16,1,88.8,88.8,'绍兴'),
('李子涵',19,0,100,100,'杭州'),
('许祥宇',18,0,78,9,'长春');
- 创建结果如下👇
二、基础查询🥽
关键字:
SELECT
1️⃣查询所有字段👞
- 用星号
*代表所有字段
/* 语法 */
SELECT * FROM 表名;
/* 示例 */
SELECT * FROM stu_info; # 查询学生信息表的所有字段
2️⃣查询指定字段👟
/* 语法 */
SELECT 字段名1,字段名2... FROM 表名;
/* 示例 */
SELECT name,age FROM stu_info; # 查询 stu_info 表中的 name 和 age 列
3️⃣去重🥾
- 关键字:
DISTINCT
/* 语法 */
SELECT DISTINCT 字段名 FROM 表名;
/* 示例 */
-- 查询学生来自于哪些城市
SELECT hometown FROM stu_info;
-- 去掉重复的记录
SELECT DISTINCT hometown FROM stu_info;
4️⃣计算🥿
查询结果也可以参与运算,但并不会修改原来的数据值
注意:参与运算的字段类型必须是数值类型,如 int 、double等
1. 某列数据和固定值运算🥝
/* 语法 */
SELECT 列名+固定值 FROM 表名; # 加号也可以替换成其他运算符
/* 示例 */
-- 给所有学生的数学减1分
SELECT name ,math,math-1 FROM stu_info;
-
可以看到,大角牛由于未参加考试,分数理应0分,显示为null显然不合理
-
故推荐一个
IFNULL(参数1,参数2)函数 -
参数可以是数值,可以是文字,也可以是表达式、字段名等等
-
如果参数1为null,则返回参数2的值
-
如果参数1不为null,则返回参数1的值
-
2.某列数据和其他列数据参与运算🥥
/* 语法 */
SELECT 列名1 + 列名2 FROM 表名;
/* 示例 */
-- 查询数学与英语的总分
SELECT name, IFNULL(math,0),IFNULL(english,0),IFNULL(math+english,0) FROM stu_info;
5️⃣别名👠
查询结果显示的是新名字,但并不会修改表的结构
- 关键字:
AS,当然其实不用AS也行 - 表使用别名可以用于多表查询
/* 语法 */
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名 AS 表别名;
/* 示例 */
SELECT name AS 姓名, IFNULL(math,0) AS 数学,IFNULL(english,0) AS 英语,IFNULL(math+english,0) AS 总分 FROM stu_info AS stu;
三、条件查询👓
关键字:
WHERE,如果没有查询条件,则每次查询所有的行。用条件查询,可以对记录进行过滤
1️⃣基本语法👡
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
SELECT 字段名 FROM 表名 WHERE 条件;
2️⃣比较运算符👢
MySQL 允许用户对表达式的两侧的操作数进行比较。如果比较的结果为真,则返回 1;结果为假,则返回 0。若比较结果不确定,则返回 NULL,NULL 不能用于比较,会直接返回 NULL
| 符号 | 描述 | 备注 |
|---|---|---|
| = | 等于 | |
| <>, != | 不等于 | |
| 大于 | ||
| < | 小于 | |
| <= | 小于等于 | |
| >= | 大于等于 | |
| BETWEEN a AND b | 在a,b之间 | 相当于[a,b] |
| NOT BETWEEN a AND b | 不在a,b两值之间 | 相当于(-∞,a)U(b,+∞) |
| IN(集合) | 在集合中 | 集合表示多个值,使用逗号分隔 |
| NOT IN | 不在集合中 | |
| <=> | 严格比较两个NULL值是否相等 | 两个操作数均为NULL时,其所得值为1;而当一个操作数为NULL时,其所得值为0 |
| LIKE | 模糊匹配 | 通配符 :%匹配多个字符串;_匹配一个字符串 |
| REGEXP 或 RLIKE | 正则式匹配 | |
| IS NULL或ISNULL | 判断一个值是否为空 | |
| IS NOT NULL | 判断一个值是否不为空 | |
3️⃣逻辑运算符🩰
在SQL推荐使用前者,因为后者并不通用
| 符号 | 含义 |
|---|---|
| NOT 或 ! | 逻辑非 |
| AND 或 && | 逻辑与 |
| OR 或 || | 逻辑或 |
| XOR | 逻辑异或 |
4️⃣查询示例🧦
1.多条件查询🍈
-- 查询 age 大于 17 且性别为男的学生(两个条件同时满足)
SELECT * FROM stu_info WHERE age>17 AND gender=0;
-- 查询 age 大于 17 或性别为男的学生(两个条件其中一个满足)
SELECT * FROM stu_info WHERE age>17 OR gender=0;
-- 查询 id 是 1 或 3 或 5 的学生
SELECT * FROM stu_info WHERE id=1 OR id=3 OR id=5;
- 查询结果演示👇
- 查询 age 大于 17 且性别为男的学生(两个条件同时满足)
- 查询 age 大于 17 或性别为男的学生(两个条件其中一个满足)
- 查询 id 是 1 或 3 或 5 的学生
- 查询 age 大于 17 且性别为男的学生(两个条件同时满足)
2.集合查询🍉
- 关键字:
IN
/* 语法 */
SELECT 字段名 FROM 表名 WHERE 字段 IN (数据 1, 数据 2...);
/* 示例 */
-- 查询 id 是 1 或 3 或 5 的学生
SELECT * FROM stu_info WHERE id IN(1,3,5); # 相当于WHERE id=1 OR id=3 OR id=5;
-- 查询 id 不是 1 或 3 或 5 的学生
SELECT * FROM stu_info WHERE id NOT IN(1,3,5);
- 查询结果演示👇
- 查询 id 是 1 或 3 或 5 的学生
- id 不是 1 或 3 或 5 的学生
- 查询 id 是 1 或 3 或 5 的学生
3.范围查询🍊
- 关键字:
BETWEEN AND
/* 语法 */
SELECT 字段名 FROM 表名 WHERE 字段 BETWEEN 值 1 AND 值 2
/* 示例 */
-- 查询数学成绩大于等于80,且小于等于90的学生
SELECT * FROM stu_info WHERE math BETWEEN 80 AND 90; # 相当于math>=80 && math<=90
- 查询结果演示👇
- 查询数学成绩大于等于80,且小于等于90的学生
- 查询数学成绩大于等于80,且小于等于90的学生
4.模糊查询🍋
- 关键字:
LIKE - 通配符:
%(匹配多个字符串);_(匹配单个字符)
/* 语法 */
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
/* 示例 */
-- 查询叫‘牛’的学生
SELECT * FROM stu_info WHERE name LIKE '牛'; # 显然没有叫牛的学生,所以查询结果返回null
-- 查询姓‘牛’的学生
SELECT * FROM stu_info WHERE name LIKE '牛%';
-- 查询姓名中包含'牛'字的学生
SELECT * FROM stu_info WHERE name LIKE '%牛%';
-- 查询姓名有三个字,且第三个字是'牛'的学生
SELECT * FROM stu_info WHERE name LIKE '__牛'
- 查询结果演示👇
- 查询叫'牛'的学生
- 查询姓'牛'的学生
- 查询姓名中包含'牛'字的学生
- 查询姓名有三个字,且第三个字是'牛'的学生
- 查询叫'牛'的学生
写在后面🍻
感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗