欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

程序员文章站 2022-05-09 09:17:54
...

数据查询语句DQL(Data Query Language)可以说是SQL最让人神魂颠倒的部分了。将它说成数据从数据库以不同需求、不同姿势中取出的一门艺术一点也不过分。它更体现出SQL(structured query language)所谓结构化查询的精髓。

接下来的几篇,我们就来一步步的整理这门获取数据的艺术。

由于本节内容较多,结果排序和聚合函数的内容就放到下一篇了
【传送门】

MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询


对了,前面三篇在这里:


查询所有结果

说到查询,第一个需要掌握的最基础的语句就是查询表中的所有记录。

语句的格式如下SELECT * FROM 表名

我们用这条语句查询本文演示所需要用到的所有数据:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

然后,导出的这张表的SQL语句放在这里:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `student_class` smallint(0) NOT NULL DEFAULT 1,
  `grade` tinyint(0) NOT NULL DEFAULT 1,
  `sex` varchar(3) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `score` double NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `name`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (2, '小刚', 4, 1, '男', 60);
INSERT INTO `student` VALUES (3, '小红', 5, 3, '女', 70);
INSERT INTO `student` VALUES (4, '小丽', 5, 1, '女', 77);
INSERT INTO `student` VALUES (5, '李雷', 3, 5, '男', 89);
INSERT INTO `student` VALUES (6, '小明', 1, 1, '男', 99);
INSERT INTO `student` VALUES (7, '李华', 2, 1, '男', 85);
INSERT INTO `student` VALUES (8, '韩梅梅', 1, 1, '女', 98);
INSERT INTO `student` VALUES (9, '狗剩', 5, 2, '男', 67);
INSERT INTO `student` VALUES (11, '小明', 6, 1, '男', 99);

SET FOREIGN_KEY_CHECKS = 1;

下面就要开始将select语句玩出花咯~~~


控制字段

在刚刚的查询中,使用*代表通配,只能查询所有的字段。而往往,我们有着仅获得部分字段的需求,这就需要手动的选择要查询的字段了。

选择查询字段

选择要查询的字段,只需要将*替换成为要查询的字段名称即可,字段与字段之间使用逗号隔开。结果集中字段的顺序就是语句中的顺序,与表中字段顺序无关。

语句格式为:SELECT 字段1,字段2,... FROM 表名;

例如,查询所有学生的班级和名称:

编写SQL语句:

SELECT student_class,name FROM student;

运行之:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

字段别名

查询某些字段,可能会存在着名称冲突(多表查询),或是命名格式的更换(下划线分隔向驼峰命名等)等情况,这就需要给字段命一个别名,使得查询出来的虽然还是原来的字段,但是显式在虚拟表中的名称确实不一样的。

给字段取别名,只需要在查询字段后用空格隔开直接书写即可,格式如下:SELECT 字段1 别名,字段2 别名..... FROM 表名;

例如,查询所有学生的班级姓名,将班级转成驼峰命名,将姓名转为studentName

编写SQL语句:

SELECT student_class studentClass,name studentName FROM student;

运行之:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

新的字段

除了可以查询表中已有的字段,MySQL还允许使用表中字段的计算表达式创建新的字段。这些表达式的结果可以是数值类型,也可以是布尔类型或是字符串类型。当然,这些新的字段也允许取别名。

例如:查询所有同学年级和班级的和,姓名以“姓名-性别”的形式呈现,并且显示其是否成绩在75分以上
tips:连接字符串需要使用CONCAT函数

编写SQL语句:

SELECT student_class+grade,CONCAT(name,'-',sex) name,score > 75 FROM student;

运行之:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询


where限制查询

刚才的查询,都是查询全部数据,但是在实际应用中,往往需要查询一些特定的数据,也就是说,对数据的范围进行限制。这就要用到我们的where关键字了。where的作用不仅仅在查询上,在删除数据和更新数据的时候也是经常用的。在前面的文章中粗略的介绍了一下,在这里我们更加细致的说明他的用法。

基础运算符

基础运算符包括:= > > = < <= <> != 最后个都是不等于,他们等价

例如,查询所有性别不是男性的同学

编写SQL

SELECT * FROM student WHERE sex <> '男';

运行之:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

NOT

可以说,where后面跟着的,是一个布尔表达式,而提到布尔运算,就不得不提基础的逻辑运算“与或非了”

NOT用于否定一个命题

例如,使用not查询所有性别不为男性的同学

编写SQL;

SELECT * FROM student WHERE NOT sex = '男';

运行之
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

AND

AND用于以“且”的逻辑连接两个命题

例如,查询性别为女且分数为77分的同学

编写SQL

SELECT * FROM student WHERE sex = '女' AND score = 77;

运行之:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

OR

OR用于以“或”的逻辑连接两个命题

例如:查询年级为1或者为2的同学

编写SQL

SELECT * FROM student WHERE grade = 1 OR grade = 2;

运行之
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

IN

IN语句不同于与或非算符,它用于判断目标字段的取值是否位于一个集合中。换句话说,IN用于查询一个集合中的元素。
它的结构如下:字段 IN (元素1,元素2......)

例如,查询分数为67,77,99分的同学

编写SQL

SELECT * FROM student WHERE score IN (67,77,99);

运行之:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

BETWEEN AND

使用 BETWEEN AND 可以查询一个区间内的信息,它的格式为:字段 BETWEEN 下限 AND 上限;
值得注意的是,这个区间是闭区间。

例如,查询所有分数在区间[60,80]分的同学

编写SQL

SELECT * FROM student WHERE score BETWEEN 60 AND 80;

MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

IS NULL & IS NOT NULL

对于空值(null)我们无法使用他们与任何的值进行比较,如果想要找到他们就可以使用IS NULL。寻找所有非空值可以使用IS NOT NULL

他们的格式是:字段 IS NULL 字段 IS NOT NULL

模糊查询

模糊查询主要针对字符串。在使用=判断条件时,字符串的内容必须一模一样。而模糊查询则提供了一种更宽松的查询政策,使得可以使用模糊的条件利用通配符对于字符串的特点进行查询。

他需要使用关键字LIKE 作为运算符,格式是:字段名 LIKE 模糊字符串;

使用模糊查询,主要需要掌握使用两种通配符_%组成模糊字符串。

通配符"_"

通配符_在字符串中占据一个字符的位置,这个位置可以替换做任意一个字符。使用它通常用于查询长度比较清晰,内容模糊的字符串、

例如,查询所有名字长度为二,且姓李的同学

编写SQL

SELECT * FROM student WHERE name LIKE '李_';

执行之:
MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询

通配符"%"

通配符%可以占据任意长的位置(可以为零),常用于长度和内容和都模糊的查询。它比_更加模糊,可以用来根据字符串中的关键字查询。

例如,查询姓名中带有“梅”字的同学

编写SQL

SELECT * FROM student WHERE name LIKE '%梅%';

MySQL数据库基础 数据查询语句DQL(一)字段控制,where限制查询


参考资料: