I LOVE MYSQL day02

目录

回顾

3.1,外键  

3.2,DML语言

1. 添加 insert

2. 修改 update

3. 删除 delete

4,DQL查询数据

4.1,基础查询

4.2,条件查询​​​​​​​


回顾

进入数据库:

查看数据库

选择数据库

创建表

 查看表

3.1,外键  

  • 我们想使用多张表的数据,使用外键,用程序去实现
/*
    1. 定义外键key
    2. 给外键添加约束(执行引用)references 引用
*/

create table if not exists `student`(
    `id` int(4)    not null auto_increment comment '学号',
    `name` varchar(30) not null default '匿名' comment '姓名',
    `pwd` varchar(20) not null default '123456' comment '密码',
    `sex` varchar(2) not null default '女' comment '性别',
    `birthday` detetime default null comment '出生日期',
    `address` varchar(100) default null comment '家庭住址',
    `email` varchar(50) default null comment '邮箱',
    primary key (`id`)
     `gradeid` int(10) not null comment '学生的年级',
    primary key (`id`),
    key `fk_gradeid` (`gradeid`), //定义外键
    const raint `fk_gradeid` foreign key (`gradeid`) references `grade`(`gradeid`) // 引用外键,添加关联

)engine=innodb default charset=utf8

-- 创建年级表
create table `grade`(
    `gradeid` int(10) not null comment '年级id',
    `gradename` VARCHAR(50) NOT NULL COMMENT '年纪名称',
    primary key (`gradeid`)

)engine=innodb default charset=utf8
  • 删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

 

3.2,DML语言

1. 添加 insert

语法

insert into 表名([字段1,字段2..])values('值1','值2'..),[('值1','值2'..)..];

-- 普通用法
insert into `student`(`name`) values ('zsr');

-- 插入多条数据
insert into `student`(`name`,`pwd`,`sex`) values ('zsr','200024','男'),('gcc','000421','女');

-- 省略字段
insert into `student` values (5,'Bareth','123456','男','2000-02-04','武汉','1412@qq.com',1); 

注意:

  • 表名和字段最好用``包括
  • values的值必须用'' 包括
  • 字段和字段之间使用英文逗号隔开
  • 字段是可以省略的,但是值必须完整且一一对应
  • 可以同时插入多条数据,VALUES后面的值需要使用逗号隔开

2. 修改 update

语法

 update 表名 set 字段1=值1,[字段2=值2...] where 条件[];

-- 修改学员名字,指定条件
update `student` set `name`='zsr204' where id=1;

-- 不指定条件的情况,会改动所有表
update `student` set `name`='zsr204';

-- 修改多个属性
update `student` set `name`='zsr',`address`='湖北' where id=1;

-- 通过多个条件定位数据
update  `student` set `name`='zsr204' where `name`='zsr' AND `pwd`='200024';

 

关于where条件语句(可小写) 

 

3. 删除 delete

语法:

delete from 表名 [where 条件] 

-- 删除数据(避免这样写,会全部删除)
delete from `student`;

-- 删除指定数据
delete from `student` where id=1;

 语法:

truncate [table] table_name;

  • 用于完全清空表数据,但表结构,索引,约束等不变;

truncate grade

4,DQL查询数据​​​​​​​

  • 查询数据库数据 , 如SELECT语句
  • 简单的单表查询或多表的复杂查询和嵌套查询
  • 是数据库语言中最核心,最重要的语句
  • 使用频率最高的语句

先建立一个数据库

-- 创建学校数据库
CREATE DATABASE IF NOT EXISTS `school`;

-- 用school数据库
USE `school`;

-- 创建年级表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;

-- 给grade表插入数据
INSERT INTO `grade`(`GradeID`,`GradeName`) 
VALUES (1,'大一'),(2,'大二'),(3,'大三'),(4,'大四');

-- 创建成绩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;

-- 给result表插入数据
INSERT INTO `result`(`StudentNo`,`SubjectNo`,`ExamDate`,`StudentResult`) 
VALUES (1000,1,'2019-10-21 16:00:00',97),(1001,1,'2019-10-21 16:00:00',96),
(1000,2,'2019-10-21 16:00:00',87),(1001,3,'2019-10-21 16:00:00',98);

-- 创建学生表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 '联系电话,允许为空,即可选输入',
	`Adress` 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;

-- 给学生表插入数据
INSERT INTO `student`(`StudentNo`,`LoginPwd`,`StudentName`,`Sex`,`GradeID`,`Phone`,`Adress`,`BornDate`,`Email`,`IdentityCard`) 
VALUES (1000,'1241','dsaf',1,2,'24357','unknow','2000-09-16 00:00:00','1231@qq.com','809809'),
(1001,'1321','dfdj',0,2,'89900','unknow','2000-10-16 00:00:00','5971@qq.com','908697');

-- 创建科目表
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=18 DEFAULT CHARSET=utf8;

-- 给科目表subject插入数据
INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeID`) 
VALUES(1,'高数','96',2),(2,'大物','112',2),(3,'程序设计',64,3);

SELECT 字段 FROM 表;

4.1,基础查询

语法:

select 查询列表 from 表名;

  • 查询列表可以是:表中的(一个或多个)字段,常量,变量,表达式,函数
  • 查询结果是一个虚拟的表格
-- 查询全部学生
SELECT * FROM student;

-- 查询指定的字段
SELECT `LoginPwd`,`StudentName` FROM student;

-- 别名 AS(可以给字段起别名,也可以给表起别名)
SELECT `StudentNo` AS 学号,`StudentName` AS 学生姓名 FROM student AS 学生表;

-- 函数 CONCAT(str1,str2,...)
SELECT CONCAT('姓名',`StudentName`) AS 新名字 FROM student;

-- 查询系统版本(函数)
SELECT VERSION();

-- 用来计算(计算表达式)
SELECT 100*53-90 AS 计算结果;

-- 查询自增步长(变量)
SELECT @@auto_increment_increment;

-- 查询有哪写同学参加了考试,重复数据要去重
SELECT DISTINCT `StudentNo` FROM result;
  • distinct用于返回唯一不同的值,重复的去掉 

 4.2,条件查询

where 条件字句:检索数据中符合条件的值

语法

select 查询列表 from 表名 where 筛选条件;

  •  简单条件运算符

  • 逻辑运算符

  

  • 模糊查询

 

-- 查询考试成绩在95~100之间的
SELECT `StudentNo`,`StudentResult` FROM result
WHERE `StudentResult`>=95 AND `StudentResult`<=100;
-- &&
SELECT `StudentNo`,`StudentResult` FROM result
WHERE `StudentResult`>=95 && `StudentResult`<=100;
-- BETWEEN AND
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`=1000;

-- 查询名字含d的同学
SELECT `StudentNo`,`StudentName` FROM student
WHERE `StudentName` LIKE '%d%';

-- 查询名字倒数第二个为d的同学
SELECT `StudentNo`,`StudentName` FROM student
WHERE `StudentName` LIKE '%d_';

-- 查询1000,1001学员
SELECT `StudentNo`,`StudentName` FROM student
WHERE `StudentNo` IN (1000,1001);

  

 

​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值