========================================================================
| TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
| :-: | — | — | — | — |
| SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
| MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
| INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
| BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
| FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
| DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
| DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| — | — | — | — | — |
| TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901/2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
| CHAR | 0-255 bytes | 定长字符串 |
| — | — | — |
| VARCHAR | 0-65535 bytes | 变长字符串 |
| TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
| TINYTEXT | 0-255 bytes | 短文本字符串 |
| BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
| TEXT | 0-65 535 bytes | 长文本数据 |
| MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
| LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
============================================================================
– CREATE TABLE table_name (column_name column_type);
CREATE TABLE user
(
id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键ID’,
name
varchar(30) DEFAULT NULL COMMENT ‘姓名’,
age
int(11) DEFAULT NULL COMMENT ‘年龄’,
email
varchar(50) DEFAULT NULL COMMENT ‘邮箱’,
version
int(10) NOT NULL DEFAULT ‘1’ COMMENT ‘版本’,
gmt_create
datetime DEFAULT NULL COMMENT ‘创建时间’,
gmt_update
datetime DEFAULT NULL COMMENT ‘修改时间’,
is_delete
int(1) DEFAULT NULL COMMENT ‘伪删除’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-
如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
-
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
-
PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
-
ENGINE 设置存储引擎,CHARSET 设置编码,COLLATE排序规则
=======================================================================
– DROP TABLE table_name
DROP TABLE user
;
=====================================================================
–INSERT INTO table_name (field1, field2, field3…) VALUES (values1, values2, values2…);
– 字段与value一一对应
INSERT INTO user
(name, age, email, version, gmt_create, gmt_update, is_delete) VALUES (‘李子捌’, ‘18’, ‘1057301174@qq.com’, 1, NOW(), NOW(), 1);
– 没有字段名则需要顺序一致
INSERT INTO user
VALUES (8, ‘李子捌’, 18, ‘1057301174@qq.com’, 1, NOW(), NOW(), 1);
INSERT INTO user
SET name = ‘李子捌’, age = 18;
=====================================================================
–SELECT column_name,column_nameFROM table_name[WHERE Clause][LIMIT N][ OFFSET M]
select * from user
;
-
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
-
SELECT 命令可以读取一条或者多条记录。
-
可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
-
可以使用 WHERE 语句来包含任何条件。
-
可以使用 LIMIT 属性来设定返回的记录数。
-
可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
===============================================================================
–SELECT field1, field2,…fieldN FROM table_name1, table_name2…[WHERE condition1 [AND [OR]] condition2…
SELECT name, age FROM user
WHERE name = ‘李子捌’ or age = 18;
-
可以在 WHERE 子句中指定任何条件。
-
可以使用 AND 或者 OR 指定一个或多个条件。
================================================================================
– UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
UPDATE user
SET age = 3 WHERE name = ‘李子捌’ AND email = ‘1057301174@qq.com’;
-
可以同时更新一个或多个字段。
-
可以在 WHERE 子句中指定任何条件。
-
可以在一个单独表中同时更新数据。
================================================================================
– DELETE FROM table_name [WHERE Clause]
DELETE FROM user
WHERE name = ‘李子捌’;
-
如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
-
可以在 WHERE 子句中指定任何条件
==============================================================================
– SELECT field1, field2,…fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = ‘somevalue’
SELECT name, age, email FROM user
WHERE name LIKE ‘%捌’;
– 百分号可在左边、右边、两边
– ‘%捌’ ‘捌%’ ‘%捌%’
– 以捌结尾 以捌开头 包含捌
https://blog.csdn.net/daemon329/article/details/106170743
=======================================================================
DQL(Data Query Language数据查询语言)
-
查询数据库数据,如select语句
-
简单的单表查询或者夺标的复杂查询和嵌套查询
-
是数据库语言中最核心,最重要的语言
-
使用的频率最高的语言
SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,…]}
FROM table_name [as table_alias]
[left | right | inner join table_name2] – 联合查询
[WHERE …] – 指定满足结果的条件
[GROUP BY …] – 指定结果按照那些字段来分组
[HAVING] – 过滤分组必须满足的次要条件
[ORDER BY …] – 指定查询记录按照一个或者多个条件排序
[LIMIT {[offset,]row_count | row_countOFFSET offset}]; – 指定查询记录从哪条到哪条
注意: []代表可选,{}代表必选
– 查询所有的学生信息(速度慢不推荐使用)
SELECT * FROM student;
– 查询指定列(学号,姓名)
SELECT studentno,studentname FROM student;
使用AS 子句作为别名
作用:
-
可以给数据列取一个新的别名
-
可以给表取一个新的别名
-
可以把计算后的结果用一个别名代替
– 为列取一个别名
SELECT studentno AS 学号, studentname AS 姓名 FROM student;
– 为表取一个别名
SELECT studentno AS 学号, studentname AS 姓名 FROM student AS s;
– 使用AS为查询的结果取一个名字 CONCAT()函数字符串拼接,在studentname数据前面拼接 姓名:
SELECT CONCAT(‘姓名:’, studentname) AS 新姓名 FROM student;
DISTINCT 关键字的使用
作用:
- 去掉SELECT查询的记录中重复的记录
– 查看哪些同学参加了考试(学号) 去除重复项
– 查询成绩表
SELECT * FROM result;
– 查询成绩表中的学号,及查询哪些同学参加了考试(有成绩的学生)
SELECT studentno FROM result;
– 根据学号去重
SELECT DISTINCT studentno FROM result;
使用表达式的列
数据库中的表达式:一般由文本、列值、null、函数和操作符组成
应用场景:
-
SELECT语句中返回结果列中使用
-
SELECT语句中ORDER BY ,HAVING等子句使用
-
DML语句中的where条件语句中使用的表达式
– selcet查询中可以使用表达式
SELECT @@auto_increment_increment; – 查询自增步长
SELECT VERSION(); – 查询版本号
SELECT 88*3-1 AS 计算结果; – 表达式
– 学员考试成绩集体提分一分查看
SELECT studentno,studentresult+1 AS ‘分数加1’ FROM result;
作用:
- 用于检索数据表中符合条件的记录
搜索的条件可以由一个或者多个逻辑表达式组成,结果一般为真或假
逻辑操作符
| 运算符号 | 作用 |
| :-- | :-- |
| NOT 或 ! | 逻辑非 |
| AND | 逻辑与 |
| OR | 逻辑或 |
| XOR | 逻辑异或 |
– 指定字段全表
SELECT Studentno,StudentResult FROM result;
– 查询成绩在95-100之间的 ADN 也可以写成 &&
SELECT studentno,studentresult
FROM result
WHERE studentresult >=95 AND studentresult <=100;
– 模糊查询(对应的词:精确查询)
SELECT studentno,studentresult
FROM result
WHERE studentresult BETWEEN 95 AND 100;
– 除了888号同学,要其他同学的成绩
SELECT studentno,studentresult
FROM result
WHERE studentno != 888
– 除了888号同学,要其他同学的成绩 使用not
SELECT studentno,studentresult
FROM result
WHERE NOT studentno = 888
算术运算符
| 运算符 | 作用 |
| :-- | :-- |
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / 或 DIV | 除法 |
| % 或 MOD | 取余 |
比较操作符
| | | |
| :-- | :-- | :-- |
| 符号 | 描述 | 备注 |
| = | 等于 | |
| <>, != | 不等于 | |
| > | 大于 | |
| < | 小于 | |
| <= | 小于等于 | |
| >= | 大于等于 | |
| BETWEEN | 在两值之间 | >=min&&<=max |
| NOT BETWEEN | 不在两值之间 | |
| IN | 在集合中 | |
| NOT IN | 不在集合中 | |
| <=> | 严格比较两个NULL值是否相等 | 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0 |
| LIKE | 模糊匹配 | |
| REGEXP 或 RLIKE | 正则式匹配 | |
| IS NULL | 为空 | |
| IS NOT NULL | 不为空 | |
注意:
-
数值类型之间才能使用算术运算符
-
相同的数据类型之间才能比较
– 模糊查询 between and \ like \ in \ null
– LIKE
– 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 ‘%捌%’;
– 查询姓名中含有特殊字符的需要使用转义符号 ‘’
– 自定义转义符关键字: ESCAPE ‘:’
– IN
– 查询学号为1000,1001,1002的学生姓名
SELECT studentno,studentname FROM student
WHERE studentno IN (1000,1001,1002);
– 查询地址在深圳,长沙,娄底的学生
SELECT studentno,studentname,address FROM student
WHERE address IN (‘深圳’,‘长沙’,‘娄底’);
– NULL
– 查询出生日期没有填写的同学
– 不能直接写=NULL , 这是代表错误的 , 用 is null
SELECT studentname FROM student
WHERE BornDate IS NULL;
– 查询出生日期填写的同学
SELECT studentname FROM student
WHERE BornDate IS NOT NULL;
– 查询没有写家庭住址的同学(空字符串不等于null)
SELECT studentname FROM student
WHERE Address=‘’ OR Address IS NULL;
| 操作符名称 | 描述 |
| — | — |
| INNER JOIN | 如果表中至少一个匹配,则返回 |
| LEFT JOIN | 返回左表的所有行,右表匹配行 |
| RIGHT JOIN | 返回右表的所有行,左表匹配行 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQR1TnC2-1622729395022)(C:\Users\Leon Plious\Desktop\u=813688978,869557195&fm=15&gp=0.jpg)]
/*
连接查询
如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询
内连接 inner join
查询两个表中的结果集中的交集
外连接 outer join
左外连接 left join
(以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充)
右外连接 right join
(以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充)
等值连接和非等值连接
自连接
*/
– 查询参加了考试的同学信息(学号,学生姓名,科目编号,分数)
SELECT * FROM student;
SELECT * FROM result;
/*思路:
(1):分析需求,确定查询的列来源于两个类,student result,连接查询
(2):确定使用哪种连接查询?(内连接)
*/
SELECT s.studentno, studentname, subjectno, studentresult
FROM student s
INNER JOIN result r
ON s.studentno = r.studentno;
– 右连接实现
SELECT s.studentno, studentname, subjectno, studentresult
FROM student s
RIGHT JOIN result r
ON s.studentno = r.studentno;
– 左连接(注意左表为student,没有成绩的学生信息也会被查出)
SELECT s.studentno, studentname, subjectno, studentresult
FROM student s
LEFT JOIN result r
ON s.studentno = r.studentno;
– 等值连接
SELECT s.studentno, studentname, subjectno, studentresult
FROM student s, result r
WHERE s.studentno = r.studentno;
– 查一下缺考的同学(左连接应用场景)
SELECT s.studentno, studentname, subjectno, studentresult
FROM student s
LEFT JOIN result r
ON s.studentno = r.studentno
WHERE studentresult IS NULL;
– 查询参加了考试的同学信息(学号,学生姓名,科目名,分数)
SELECT s.studentno, studentname, subjectno, subjectname, studentresult
FROM student s
INNER JOIN result r
ON s.studentno = r.studentnos
INNER JOIN subject
sub
ON sub.subjectno = r.subjectno
自连接
/*
自连接
数据表与自身进行连接
需求:从一个包含栏目ID , 栏目名称和父栏目ID的表中
查询父栏目名称和其他子栏目名称
*/
– 创建一个表
CREATE TABLE category
(
categoryid
INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘主题id’,
pid
INT(10) NOT NULL COMMENT ‘父id’,
categoryName
VARCHAR(50) NOT NULL COMMENT ‘主题名字’,
PRIMARY KEY (categoryid
)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
– 插入数据
INSERT INTO category
(categoryid
, pid
, categoryName
)
VALUES(‘2’,‘1’,‘信息技术’),
(‘3’,‘1’,‘软件开发’),
(‘4’,‘3’,‘数据库’),
(‘5’,‘1’,‘美术设计’),
(‘6’,‘3’,‘web开发’),
(‘7’,‘5’,‘ps技术’),
(‘8’,‘2’,‘办公信息’);
– 编写SQL语句,将栏目的父子关系呈现出来 (父栏目名称,子栏目名称)
– 核心思想:把一张表看成两张一模一样的表,然后将这两张表连接查询(自连接)
SELECT a.categoryName AS ‘父栏目’, b.categoryName AS ‘子栏目’
FROM category AS a, category AS b
WHERE a.categoryid = b.pid
– 排序
/**
语法 : ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照ASC升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
*/
– 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩)
– 按成绩降序排序
SELECT s.sudentno, studentname, subjectname, sudentresult
FROM student s
INNER JOIN result r
ON r.sudentno = s.sudentno
INNER JOIN subject sub
ON sub.subjectno = r.subjectno
WHERE subjectname = ’ 数据库结构-1’
ORDER BY sudentresult DESC;
– 分页
/**
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
pageNo pageSize
LIMIT (pageNo - 1)*pageSize, pageSize
*/
– 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩)
– 按成绩降序排序
– 每页显示100条数据
SELECT s.sudentno, studentname, subjectname, sudentresult
FROM student s
INNER JOIN result r
ON r.sudentno = s.sudentno
INNER JOIN subject sub
ON sub.subjectno = r.subjectno
WHERE subjectname = ’ 数据库结构-1’
ORDER BY sudentresult DESC
LIMIT 0, 100;
/*============== 子查询 ================
什么是子查询?
在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句
嵌套查询可由多个子查询组成,求解的方式是由里及外;
子查询返回的结果一般都是集合,故而建议使用IN关键字;
*/
– 查询 数据库结构-1 的所有考试结果(学号,科目编号,成绩),并且成绩降序排列
SELECT studentno, subjectno, studentresult
FROM result
WHERE subjectno=(
SELECT subjectno FROM subjct
WHERE subjectname = ‘数据库结构-1’
) ORDER BY studentresult DESC;
– 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名
SELECT studentno, studentname
FROM student
WHERE studentno IN(
SELECT studentno
FROM result
WHERE studentresult >=80 AND subjectno = (
SELECT subjectno
FROM subjct
WHERE subjectname = ‘高等数学-2’
)
)
=========================================================================
/* 取绝对值 */
SELECT ABS(-10);
/* 向上取整 */
SELECT CEILING(9.1);
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
,并且成绩降序排列
SELECT studentno, subjectno, studentresult
FROM result
WHERE subjectno=(
SELECT subjectno FROM subjct
WHERE subjectname = ‘数据库结构-1’
) ORDER BY studentresult DESC;
– 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名
SELECT studentno, studentname
FROM student
WHERE studentno IN(
SELECT studentno
FROM result
WHERE studentresult >=80 AND subjectno = (
SELECT subjectno
FROM subjct
WHERE subjectname = ‘高等数学-2’
)
)
=========================================================================
/* 取绝对值 */
SELECT ABS(-10);
/* 向上取整 */
SELECT CEILING(9.1);
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-1CdespVI-1710835589985)]
[外链图片转存中…(img-M4H7XfsF-1710835589985)]
[外链图片转存中…(img-FAJDOgta-1710835589986)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-l1qsR1pH-1710835589986)]