Mysql学习笔记 Day6 0310

Day6

Mysql学习以及回顾。

1、DQL查询数据(最重点)

1.1 DQL

(Data Query LANGUAGE:数据查询语言)

  • 所有的查询操作都用它 select
  • 简单的查询,复杂的查询,它都能做
  • 数据库中最核心的语言,最重要的语句
  • 使用频率最高的语句

school.sql文件内容:

CREATE DATABASE IF NOT EXISTS `school`;
-- 创建一个school数据库
USE `school`;-- 创建学生表
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`(
	`studentno` INT(4) NOT NULL COMMENT '学号',
    `loginpwd` VARCHAR(20) DEFAULT NULL,
    `studentname` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',
    `sex` TINYINT(1) DEFAULT NULL COMMENT '性别,0或1',
    `gradeid` INT(11) DEFAULT NULL COMMENT '年级编号',
    `phone` VARCHAR(50) NOT NULL COMMENT '联系电话,允许为空',
    `address` VARCHAR(255) NOT NULL COMMENT '地址,允许为空',
    `borndate` DATETIME DEFAULT NULL COMMENT '出生时间',
    `email` VARCHAR (50) NOT NULL COMMENT '邮箱账号允许为空',
    `identitycard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
    PRIMARY KEY (`studentno`),
    UNIQUE KEY `identitycard`(`identitycard`),
    KEY `email` (`email`)
)ENGINE=MYISAM DEFAULT CHARSET=utf8;


-- 创建年级表
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade`(
	`gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
    PRIMARY KEY (`gradeid`)
) ENGINE=INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;

-- 创建科目表
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject`(
	`subjectno`INT(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',
    `subjectname` VARCHAR(50) DEFAULT NULL COMMENT '课程名称',
    `classhour` INT(4) DEFAULT NULL COMMENT '学时',
    `gradeid` INT(4) DEFAULT NULL COMMENT '年级编号',
    PRIMARY KEY (`subjectno`)
)ENGINE = INNODB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8;

-- 创建成绩表
DROP TABLE IF EXISTS `result`;
CREATE TABLE `result`(
	`studentno` INT(4) NOT NULL COMMENT '学号',
    `subjectno` INT(4) NOT NULL COMMENT '课程编号',
    `examdate` DATETIME NOT NULL COMMENT '考试日期',
    `studentresult` INT (4) NOT NULL COMMENT '考试成绩',
    KEY `subjectno` (`subjectno`)
)ENGINE = INNODB DEFAULT CHARSET = utf8;

-- 插入学生数据 其余自行添加 这里只添加了2行
INSERT INTO `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`)
VALUES
(1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'),
(1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');

-- 插入成绩数据  这里仅插入了一组,其余自行添加
INSERT INTO `result`(`studentno`,`subjectno`,`examdate`,`studentresult`)
VALUES
(1000,1,'2013-11-11 16:00:00',85),
(1000,2,'2013-11-12 16:00:00',70),
(1000,3,'2013-11-11 09:00:00',68),
(1000,4,'2013-11-13 16:00:00',98),
(1000,5,'2013-11-14 16:00:00',58);

-- 插入年级数据
INSERT INTO `grade` (`gradeid`,`gradename`) VALUES(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');

-- 插入科目数据
INSERT INTO `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)VALUES
(1,'高等数学-1',110,1),
(2,'高等数学-2',110,2),
(3,'高等数学-3',100,3),
(4,'高等数学-4',130,4),
(5,'C语言-1',110,1),
(6,'C语言-2',110,2),
(7,'C语言-3',100,3),
(8,'C语言-4',130,4),
(9,'Java程序设计-1',110,1),
(10,'Java程序设计-2',110,2),
(11,'Java程序设计-3',100,3),
(12,'Java程序设计-4',130,4),
(13,'数据库结构-1',110,1),
(14,'数据库结构-2',110,2),
(15,'数据库结构-3',100,3),
(16,'数据库结构-4',130,4),
(17,'C#基础',130,1);

grade表
在这里插入图片描述
result表:
在这里插入图片描述
student表:
在这里插入图片描述
subject表:
在这里插入图片描述

1.2 指定查询字段

起别名 AS
在这里插入图片描述
在这里插入图片描述

-- 查询全部的学生
SELECT * FROM student;
-- SELECT 字段 FROM 表;

SELECT * FROM result;

-- 查询指定字段
SELECT `studentno`,`studentname` FROM student 

-- 别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名
SELECT `studentno` AS 学号,`studentname` AS 学生姓名 FROM student AS s

-- 函数concat(a,b)
SELECT CONCAT('姓名:',studentname) AS 新名字 FROM student

语法:SELECT 字段... FROM 表
有的时候,列名字不是那么的见名知意,我们起别名 AS
字段名 as 别名 表名 as 别名

去重 distinct
在这里插入图片描述

-- 查询一下有哪些参加了考试,即有成绩
SELECT * FROM result; -- 查询全部的考试成绩
-- 查询有哪些同学参加了考试
SELECT `studentno` FROM result;
-- 发现重复数据,去重
SELECT DISTINCT `studentno` FROM result;

作用:去除SELECT查询出来的结果中重复的数据,只显示一条

数据库的列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

-- 查询系统版本(函数)
SELECT VERSION()
-- 用来计算(表达式)
SELECT 100*3-1 AS 计算结果
-- 查询自增的步长(变量)
SELECT @@auto_increment_increment 
-- 学员考试成绩+1分
SELECT `studentno`,`studentresult` FROM result;
SELECT `studentno`,`studentresult`+1 AS '提分' FROM result;

数据库中的表达式:文本值,列,Null,函数,计算表达式,系统变量…
SELECT 表达式 FROM 表

1.3 WHERE子句

作用:检索数据中符合条件的值

逻辑运算符

运算符语法描述
and &&a and b a&&b逻辑与,两个都为真,结果为真
or ||a or b a||b逻辑或,其中一个为真,则结果为真
not !not a !a逻辑非,真为假,假为真

备注:快捷键 ctrl+S就可以将写的脚本保存成为一个sql文件
在这里插入图片描述

SELECT `studentno`,`studentresult` FROM result;
-- and && --
SELECT `studentno`,`studentresult` FROM result 
WHERE `studentresult`>=95 AND `studentresult`<=100;
-- 模糊查询(区间)--
SELECT `studentno`,`studentresult` FROM result 
WHERE `studentresult` BETWEEN 95 AND 100;
-- 除了1000号学生之外的同学的成绩
SELECT `studentno`,`studentresult` FROM result 
WHERE `studentno` !=1000;
-- != not -- 
SELECT `studentno`,`studentresult` FROM result 
WHERE NOT `studentno` = 1001;

模糊查询 比较运算符

运算符语法描述
IS NULLa is null如果操作符为NULL,结果为真
IS NOT NULLa is not null如果操作符不为null,结果为真
BETWEENa between b and c若a在b和c之间,则结果为真
LIKEa like bSQL匹配,如果a匹配b,则结果为真
-- ====== 模糊查询 =========
-- 查询姓刘的同学
-- like结合 %(代表0到任意个字符) _(代表一个字符) 
SELECT `studentno`,`studentname` FROM `student`
WHERE `studentname` LIKE '刘%';
-- 查询姓刘的同学,名字后面只有一个字
SELECT `studentno`,`studentname` FROM `student`
WHERE `studentname` LIKE '刘_';
-- 查询名字中间有嘉字的同学 %嘉%
SELECT `studentno`,`studentname` FROM `student`
WHERE `studentname` LIKE '%嘉%';
-- ======= in (具体的一个或多个值)==========
-- 查询1001,1002,1003号学员
SELECT `studentno`,`studentname` FROM `student`
WHERE `studentno` IN (1001,1002,1003);
-- 查询 在北京的学生
SELECT `studentno`,`studentname` FROM `student`
WHERE `Address` IN ('安徽','河南洛阳','北京朝阳');

SELECT `studentno`,`studentname` FROM `student`
WHERE `Address` IN ('北京%');

-- ===== null not null ==== --
-- 查询地址为空的学生null 
SELECT `studentno`,`studentname` FROM `student`
WHERE `Address` = '' OR `Address` IS NULL;
-- 查询有出生日期的同学 不为空
SELECT `studentno`,`studentname` FROM `student`
WHERE `BornDate` IS NOT NULL ;
-- 查询有出生日期的同学 为空
SELECT `studentno`,`studentname` FROM `student`
WHERE `BornDate` IS NULL ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值