MySQL自学

1,初识数据库

3,MySQL数据管理

3.1 外键(了解即可)

3.2 DML语言(全部记住)

3.3添加

CREATE TABLE IF NOT EXISTS `grade`(
`gradeid` INT(10)  NOT NULL AUTO_INCREMENT COMMENT '年纪id',
`gradename` VARCHAR (50) NOT NULL COMMENT '年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE =INNODB DEFAULT CHARSET=utf8
​
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` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
PRIMARY KEY(`id`)
)ENGINE =INNODB DEFAULT CHARSET=utf8
​
ALTER TABLE `test`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCE `grade`(`gradeid`);
​
INSERT INTO `grade` (`gradename`) VALUES ('大四')

3.4修改

操作符含义范围结果
=等于5=6false

语法:update 表名 set column_name =value ,[colnum_name =vlaue,....] where [条件]

注意:

  • colnum_name 是数据库的列,尽量带上``

  • 条件,筛选的条件,如果没有指定,则会改变所有的列

3.5删除

delete 命令

语法:delete from 表名【where 条件】

--  删除数据()
DELETE FROM `student` WHERE id =123;

TRUNCATE 命令

作用:完全清空一个数据库表

TRUNCATE `student`

delete和cruncate 区别

  • 相同点:都能删除数据,都不会删除表结构

  • 不同:

    • TRUNCATE 重新设置 自增列 计数器会归零

    • TRUNCATE 不会影响事务

    -- 测试delete 和 truncate 区别
    ​
    CREATE TABLE `test`(
    `id` INT(4) NOT NULL AUTO_INCREMENT,
    `coll` VARCHAR(20) NOT NULL,
    PRIMARY KEY (`id`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    ​
    INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3')
    ​
    DELETE FROM `test` -- 不会影响自增
    ​
    TRUNCATE TABLE `test` -- 自增会归零
    ​

4,DQL查询数据(最重点)

4.1,DQL

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

  • 所有的查询操作都用它 Select

  • 简单的查询,复杂的查询它都能做

  • 数据库中最核心的语言

  • 使用频率最高的语言

4.2,查询指定字段

-- 查询  SELECT 字段 FROM 表
​
-- 查询指定字段  such as
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 VERSION()  --查询系统版本(函数)
SELECT 100*3-1 AS 计算结果 -- 用来计算(表达式)
SELECT @@auto_increment_increment --查询自增的步长(变量)
-- 学员考试成绩+1 分 查看
SELECT `StudentNo`,`StudentResult`+1 AS '提分后' FROM result

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

select 表达式 from 表

4.3,where条件子句

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

逻辑运算符

运算符语法结果
and &&a and b a&&b逻辑与
or ||a or b a||b逻辑或
Not !=not a !a逻辑非
-- 查询考试成绩在95分到100分之间
SELECT `StduentNo`,`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 NOT StudentNo = 1000
​
SELECT `StudentNo`,`StudentResult` FROM result
WHERE  StudentNo <>= 1000

模糊查询:比较运算符

运算符 语法  描述
I S NULL    a is null   如果操作符为null 结果为真
IS NOT NULL a is not null   如果操作符为not null 结果为真
BETWEEN a between b and c   若a在b 和c之间则为真
LIKE    a like b    SQL匹配,如果a 匹配到b 则为真
IN  a in (a1,a2,a3…)    假设a 在 a1,a2,a3其中的某一个中,为真
————————————————
--  查询姓刘的同学
-- 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 '刘__';
​
-- 查询名字中间有嘉字的同学 %嘉%
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentName LIKE '%嘉%';
​
​
​
===================IN(具体的一个或者多个值)===========================
-- 查询1001 1002 1003 学员信息
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentNo = 1001
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentNo = 1002
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentNo = 1003
​
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentNo IN (1001,1002,1003);
​
-- 查询在北京的学生
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;
​

4.4 联表查询

JOIN 对比

img

在这里插入图片描述

======================联表查询 join ==============================
-- 查询参加考试的同学 (学号,姓名,考试编号,分数)
​
SELECT * FROM student 
SELECT * FROM result
​
/*
1. 分析需求,分析查询的字段来自哪些表
2.确定使用哪种连接查询?7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件: 学生表中 studentNo = 成绩表中 studentNo 
​
*/
​
-- JION(表) ON (判断的条件)连接查询
-- where 等值查询
SELECT studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
WHERE s.studentNo=r.studentNo
​
--Right Join
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
RIGHT JOIN result AS r
ON s.studentNo = r.studentNo
​
--LEFT Join
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
LEFT JOIN result AS r
ON s.studentNo = r.studentNo
操作描述
Inner join如果表中至少有一个匹配,就返回行
left join即使左表中没有匹配,也会从左表中返回所有的值
right jion即使右表中没有匹配,也会从右表中返回所有的值
-- 查询考的同学
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
LEFT JOIN result AS r
ON s.studentNo = r.studentNo
WHERE StudentResult IS NULL
​
-- 查询了参加考试同学的信息:学号:学生姓名:科目名:分数
SELECT s.`studentNo`,`studentName`,`SubjectName`,`studentResult`
FROM student s
RIGHT JOIN result r
ON r.studentNo=s.studentNo
INNER JOIN `subject` sub
ON r.SubjectNo=sub.SubjectNo
​
-- 我要查询哪些数据 SELECT ....
-- 从哪几个表中查 FROM 表 xxx JOIN 连接的表 ON 交叉条件
-- 假设存在一中多张表查询,先查询两章表,然后再慢慢增加
​
--FROM a LEFT JOIN b   左为准
--FROM a RIGHT JOIN b   右为准
​
个人总结:
跟着狂神说学SQL已经学了一半,有很多语法在上课的时候学到过
下载了typora界面十分的简洁,是一款非常好用的轻文本标记语言
每天多学一点尽快结束掉吧,下学期数据结构用的是c++,考研还有很多知识点没有复习到
最近这段时间学习状态还有待提高,
寒假规划
1利用墨墨背单词寒假希望能坚持打卡
2跟着汤家凤的高数视频提前预习一遍
3提前学习c++的知识,减轻下学期的压力
​
​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值