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

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

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

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

在这里插入图片描述


对了,前面三篇在这里:


查询所有结果

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

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

我们用这条语句查询本文演示所需要用到的所有数据:
在这里插入图片描述

然后,导出的这张表的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;

运行之:
在这里插入图片描述

字段别名

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

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

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

编写SQL语句:

SELECT student_class studentClass,name studentName FROM student;

运行之:
在这里插入图片描述

新的字段

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

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

编写SQL语句:

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

运行之:
在这里插入图片描述


where限制查询

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

基础运算符

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

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

编写SQL

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

运行之:
在这里插入图片描述

NOT

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

NOT用于否定一个命题

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

编写SQL;

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

运行之
在这里插入图片描述

AND

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

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

编写SQL

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

运行之:
在这里插入图片描述

OR

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

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

编写SQL

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

运行之
在这里插入图片描述

IN

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

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

编写SQL

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

运行之:
在这里插入图片描述

BETWEEN AND

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

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

编写SQL

SELECT * FROM student WHERE score BETWEEN 60 AND 80;

在这里插入图片描述

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 '李_';

执行之:
在这里插入图片描述

通配符"%"

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

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

编写SQL

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

在这里插入图片描述


参考资料:

猜你喜欢

转载自blog.csdn.net/wayne_lee_lwc/article/details/106766056