3. SQL--数据库基础查询操作


在进行基础查询学习之前,我们首先新建一个数据库和表格,如下代码:

-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `课程号` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `课程名称` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `教师号` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`课程号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('0001', '语文', '0002');
INSERT INTO `course` VALUES ('0002', '数学', '0001');
INSERT INTO `course` VALUES ('0003', '英语', '0003');

-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `学号` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `课程号` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `成绩` float(3,0) NOT NULL,
  PRIMARY KEY (`学号`,`课程号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('0001', '0001', '80');
INSERT INTO `score` VALUES ('0001', '0002', '90');
INSERT INTO `score` VALUES ('0001', '0003', '99');
INSERT INTO `score` VALUES ('0002', '0002', '60');
INSERT INTO `score` VALUES ('0002', '0003', '80');
INSERT INTO `score` VALUES ('0003', '0001', '80');
INSERT INTO `score` VALUES ('0003', '0002', '80');
INSERT INTO `score` VALUES ('0003', '0003', '80');

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `学号` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `姓名` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `出生日期` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `性别` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`学号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('0001', '张三', '1989-01-01', '男');
INSERT INTO `student` VALUES ('0002', '张三', '1990-12-21', '女');
INSERT INTO `student` VALUES ('0003', '李四', '1991-12-21', '男');
INSERT INTO `student` VALUES ('0004', '王五', '1993-05-20', '男');

-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `教师号` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `教师姓名` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`教师号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('0001', '孟扎扎');
INSERT INTO `teacher` VALUES ('0002', '马化腾');
INSERT INTO `teacher` VALUES ('0003', null);
INSERT INTO `teacher` VALUES ('0004', '');

可以将上述代码保存为文件test.sql,然后再mysql环境中执行:

SOURCE test.sql;

也可以在navicat的数据库中,新建查询执行。

以下查询,我们都按场景来实现具体操作。

1. 基本查询语句

  SELECT FROM语句是SQL中最常用的语句,如下代码中SELECT FROM 本质上是两条子语句

SELECT 字段1,字段2  ---SELECT 子语句
FROM <name>;  --FROM 子语句

  通过以上两个子语句可以完成在某个表中,查询全部或者某几列。
如下图执行结果:

2. 语句执行顺序

  SQL 语句执行顺序是能够读写SQL代码的关键中的关键,也是我们分析问题并将其分步解决的关键,每个子语句完成一个任务,然后拼接到一起,就能够得到最终的查询结果。

记住一句话:SELECT子句最后执行,其他子句按照书写顺序执行。

3. 去重查询

使用DISTINCT关键词来实现,如下代码:

SELECT DISTINCT 字段1 FROM <name>;  --作用于一列,表示该列字段去重,只保留不重复的
SELECT DISTINCT 字段1,字段2 FROM <name>; --作用于多列,表示只有两列字段都相同才算做重复

注意:DISTINCT 必须出现在列名之前,否则会报错
如下图,可以看到两者执行的区别。

4. 重命名查询

别名查询用AS实现:

SELECT 字段1 as 别名1, 字段2 as 别名2 FROM <name>;

如下图,

5. 条件限定查询

条件限定查询,就是在基本查询基础上加入 WHERE 判断条件,如下代码:

SELECT * FROM <name> WHERE <条件>

这时候SQL语句的执行顺序如下图所示:

简化为:

6. 运算符

基本运算符和意义如下图所示:

6.1 算数运算

算术运算符作用可以作用在列上,如下代码:

SELECT 列名/100 AS <字段名> FROM <name> WHERE  <条件>;

将成绩一列除100,查询结果如下图:

6.2 比较运算符

比较运算符可以使得WHERE的条件限定更加丰富,数字按照大小比较,字符串按照字典序比较。

SELECT * FROM <name> WHERE  <比较运算>;

查询成绩大于80的学生学号,如下图:

查询教师姓名不是null的教师,如下图:

6.3 逻辑运算符

简言之,逻辑运算符就是将比较运算符结合起来,组成更加复杂的判定条件。

SELECT * FROM <name> WHERE  <逻辑运算>;

查询男性并且名字是张三或者李四的人,如下图:

7. LIKE 模糊匹配

类似正则表达式,相对简单。
% 表示,任意多个字符_ 表示,任意一个字符或者数字

  1. %李四:以李四结尾的所有字符串。
  2. 李四%:以李四开头的所有字符串。
  3. %李四%:包含李四的所有字符串。
  4. 王_:王某
  5. 王__:王某某

查询张姓学生,如下图:

8. 常量查询

 SELECT *, '常量名' AS <字段名> FROM student WHERE  <条件>;

常量名必须用单引号包裹起来,否则会被认为是字段名。
比如将成绩等于80的人归为优秀一列,如下图:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值