小白学Java23:MySQL常用关键字和常用函数和各种约束

MySQL关键字, 常用函数和各种约束

  • 常用关键字
    • DQL:数据查询语言
      • 基础查询 SELECT _ FROM _
        • AS: 给列自定义名称
        • DISTINCT: 查询结果去重
      • 排序查询:ORDER BY
      • 条件查询:WHERE
        • BETWEEN _ AND _ : 区间查询
        • IS NOT NULL 和 IS NULL
        • IN(_ ,_ , _): 枚举查询
        • LIKE : 模糊查询
        • CARE WHEN _ THEN _ :分支条件查询
      • 分组查询:GROUP BY
        • HAVING: 分组过滤查询
      • 限定查询:LIMIT(分页查询)
      • 合并查询:UNION
      • 表连接查询
        • INNER JOIN _ ON _ :内连接查询
        • LEFT JOIN _ ON _ :左外连接查询
        • RIGHT JOIN _ ON _ : 右外连接
    • DDL:数据定义语言
      • 创建数据表:CREATE
      • 修改数据表: ALTER
        • ADD:向表中添加列
        • MODIFY :修改表中的列
        • DROP :删除表中的列
        • CHANGE :修改列名
        • RENAME :修改表名
      • 删除数据表:DROP
    • DML:数据操作语言
      • 新增:INSERT
      • 修改:UPDATE
      • 删除:DELETE
        • TRUNCATE :清空整个表的数据
    • TPL:事务处理语言
      • 事务的开启
      • 事务的结束
        • 提交:COMMIT;
        • 回滚:ROLLBACK;
    • DCL:数据控制语言
      • 创建用户
      • 删除用户
      • 给用户授权
      • 撤销权限
  • 常用函数
    • 时间函数
    • 字符串函数
    • 聚合函数
  • 各种约束关键字
    • 实体完整性约束
      • 主键约束:PRIMARY KEY
      • 唯一约束: UNIQUE
      • 自动增长列:AUTO_INCREMENT
    • 域完整性约束
      • 非空约束:NOT NULL
      • 默认值约束:DEFAULT
      • 外键约束:FOREIGN KEY

常用关键字

DQL:数据查询语言

基础查询 SELECT _ FROM _

SELECT 列名 FROM 表名;

# 查询表t1中的所有信息
SELECT *  FROM t1;

# 查询表t1中的部分信息
SELECT id,name,age,phone FROM t1; 

AS: 给列自定义名称

SELECT 原列名 AS 自定义列名 FROM 表名;

# 给ID 自定义别名
SELECT ID AS '编号' FROM t1;

DISTINCT: 查询结果去重

SELECT DISTINCT 列名 FROM 表名;

# 查询去重后t1表中的所有数据
SELECT DISTINCT * FROM t1;

排序查询:ORDER BY

SELECT 列名 FROM 表名 ORDER BY 排序列 排序依据

  • 排列依据
    • ASC :升序排列
    • DESC :降序排列
# 查询表t1 的所有数据,并按照id的 升序排列
select * from t1 order by id ASC;

# 查询表t1 的所有数据,并按照id的 降序排列
select * from t1 order by id DESC;

# 先根据班级名称升序,如果同名,则根据年龄降序
select * from t1 order by classname ASC ,age DESC;

条件查询:WHERE

SELECT 列名 FROM 表名 WHERE 条件;

# 查询表 t1中ID = 1 的数据
SELECT * FROM T1 WHERE ID = 1;

# 查询表t1中,姓名 = 张三 且 年龄 = 18的数据
SELECT * FROM T1 WHERE NAME = '张三' And age = 13 ;

BETWEEN _ AND _ : 区间查询

SELECT 列名 FROM 表名 WHERE 列名 BETWEEN 小值 AND 大值;

# 查询id范围在1到3之间的数据
SELECT * FROM t1 WHERE id BETWEEN 1 AND 3;

IS NOT NULL 和 IS NULL

SELECT 列名 FROM 表名 WHERE 列名 IS NULL / IS NOT NULL;

# 查询ID不为空的数据
SELECT * FROM t1 WHERE ID IS NOT NULL;

IN(_ ,_ , _): 枚举查询

SELECT 列名 FROM 表名 WHERE 列名 IN(值1,值2,值3);

# 枚举查询ID为1和3 的数据
select * from t1 WHere id in (1,3);

LIKE : 模糊查询

SELECT 列名 FROM 表名 WHERE 列名 LIKE ‘模糊查询条件’;

  • 模糊查询条件
    • _ : 占位符, 表示一个任意字符
    • %: 占位符,表示任意长度的任意字符
SELECT * FROM 测试表 WHERE NAME LIKE '张_';# 模糊查询所有姓名为张某的数据

CARE WHEN _ THEN _ :分支条件查询

SELECT 列名 ,CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
WHEN 条件3 THEN 结果3
ELSE 结果4
END

FROM 表名;

# 根据ID 生成 一个列叫等级
SELECT * ,CASE
WHEN id = 1 THEN 'A'
WHEN id = 2 THEN 'B'
WHEN id = 3 THEN 'C'
WHEN id = 4 THEN 'D'
ELSE 'E'
END AS '等级'
FROM 测试表;

分组查询:GROUP BY

SELECT 列名 FROM 表名 GROUP BY 分组列名;

  • 一般都是用于做统计,所以一般跟聚合函数一起使用
# 查询以班级名称分组,每个班级各有多少人
SELECT class,COUNT(id)AS '人数' FROM 测试表 GROUP BY class;

HAVING: 分组过滤查询

SELECT 列名 FROM 表名 GROUP BY 分组列名 HAVING 过滤条件;

#查询以班级名称分组,每个班级各有多少人,过滤规则,年龄>10;
SELECT classname,COUNT(id)AS '人数', age FROM 测试表 GROUP BY class having age > 10;

限定查询:LIMIT(分页查询)

SELECT 列名 FROM 表名 LIMIT 起始行,查询行数;

# 分页,一页10行
SELECT * FROM 测试表 LIMIT 0,10;
SELECT * FROM 测试表 LIMIT 10,10;

合并查询:UNION

SELECT 列名 FROM 表名1 UNION SELECT 列名 FROM 表名2( 去除重复数据)
SELECT 列名 FROM 表名1 UNION ALL SELECT 列名 FROM 表名2(保留重复数据)

#合并查询两张表,去除重复记录
SELECT * FORM t1 UNION SELECT * FORM t2;

#合并查询两张表,保留重复记录
SELECT * FORM t1 UNION ALL SELECT * FORM t2;

表连接查询

INNER JOIN _ ON _ :内连接查询

SELECT 列名 FROM 表1 INNER JOIN 表2 ON 连接条件;

# 连接表2,连接条件是t1的ID等于t2的ID
SELECT t1.name,t1.class FROM t1 
INNER JOIN t2 ON t1.id = t2.id;

SELECT 列名 FROM 表1 , 表2 WHERE 连接条件

  • 一个小技巧,如果一个表是分类表,里面有分类条件,分类项目
  • 可以使用多表查询实现快捷分类
# 一个小技巧
# 表1为分数,表2 为等级判定

#分数表
CREATE TABLE SCORE (
SNO VARCHAR(3) NOT NULL COMMENT '学生编号', 
CNO VARCHAR(5) NOT NULL COMMENT '课程编号', 
DEGREE FLOAT(10, 1) NOT NULL COMMENT '分数'
);
#插入分数数据
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('103','3-245',86);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('105','3-245',75);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('109','3-245',68);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('103','3-105',92);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('105','3-105',88);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('109','3-105',76);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('101','3-105',64);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('107','3-105',91);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('108','3-105',78);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('101','6-166',85);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('107','6-106',79);
INSERT INTO SCORE(SNO,CNO,DEGREE)  VALUES ('108','6-166',81);

#创建成绩分类表
CREATE TABLE grade1(
low FLOAT(3,0),
upp INT(3),
lever VARCHAR(10)
);
#插入成绩分类数据
INSERT INTO grade1 VALUES(90,100,'A');
     INSERT INTO grade1 VALUES(80,89,'B');
     INSERT INTO grade1 VALUES(70,79,'C');
     INSERT INTO grade1 VALUES(60,69,'D');
     INSERT INTO grade1 VALUES(0,59,'E');


# 查询代码
SELECT sno ,cno, lever FROM score,grade1 WHERE degree BETWEEN low AND upp;# 方式1

# 方式2
SELECT sno,cno,lever FROM score 
INNER JOIN grade1 
ON degree BETWEEN low AND upp;

LEFT JOIN _ ON _ :左外连接查询

SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 连接条件;

  • 以左表为主表,依次匹配右表
SELECT t1.id,t1.name FROM t1
left join t2 on t1.id =t2.`id`; 

RIGHT JOIN _ ON _ : 右外连接

SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 连接条件;

  • 以右表为主表,依次匹配左表
SELECT t1.id,t1.name FROM t1
RIGHT JOIN t2 ON t1.id =t2.`id`; 

DDL:数据定义语言

创建数据表:CREATE

CREATE TBALE 表名(
列名 数据类型 [约束],
列名 数据类型 [约束]
)CHARSET = 字符集编码
;

CREATE TABLE t1 (
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10)
)CHARSET = UTF8;

修改数据表: ALTER

ALTER TABLE 表名 操作;

ADD:向表中添加列

ALTER TABLE 表名 ADD 列名 数据类型 [约束];

# 添加性别列;
ALTER TABLE T1 ADD gender VARCHAR(2);

MODIFY :修改表中的列

ALTER TABLE 表名 MODIFY 列名 数据类型 [约束];

  • 修改列的时候,也要写全 列的名字,数据类型,约束
ALTER TABLE t1 MODIFY age VARCHAR(2);

DROP :删除表中的列

ALTER TABLE 表名 DROP 列名;

# 删除表中的性别列;
ALTER TABLE T1 DROP gender;

CHANGE :修改列名

ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型 [约束];

# 修改列名age 为 年龄
ALTER TABLE t1 CHANGE age 年龄 VARCHAR(2);

RENAME :修改表名

ALTER TABLE 旧表名 RENAME 新表名;

# 把表T1 改名为 T2;
ALTER TABLE T1 RENAME T2;

删除数据表:DROP

DROP TABLE 表名;

# 删除表t1;
DROP TABLE T1 ;

DML:数据操作语言

新增:INSERT

INSERT INTO 表名(列1,列2,列3) VALUES(值1,值2,值3);

# 添加1条数据
INSERT INTO t1(id,NAME ,class ,age) VALUES(5,'测试','测试',18);
INSERT INTO t1 VALUES(5,'测试','测试',18);

# 添加多条数据
INSERT INTO t1(id,NAME ,class ,age) VALUES(5,'测试','测试',18),(6,'测试','测试',19);

修改:UPDATE

UPDATE 表名 SET 列1 = 值1 ,列2 = 值2 WHERE 条件;

  • 绝大多数情况下应该加修改条件,否则会全部修改
# 修改ID为3的数据,name 为哈哈嘿嘿;
UPDATE t1 SET NAME = '哈哈嘿嘿' WHERE id = 3;

# 修改所有数据的name为哈哈嘿嘿;
UPDATE t1 SET NAME = '哈哈嘿嘿';

删除:DELETE

DELETE FROM 表名 WHERE 条件;

# 删除一条数据
DELETE FROM t1 WHERE ID = 1 ;

# 删除表中所有的数据
DELETE FROM t1;

TRUNCATE :清空整个表的数据

TRUECATE TBALE 表名;

# 先销毁表,然后按照原表的列新建一张表
TRUECATE TABLE T1;

TPL:事务处理语言

事务的开启

==START TRANSACTION ==;
BEGIN

事务的结束

提交:COMMIT;

回滚:ROLLBACK;

DCL:数据控制语言

创建用户

CREATE USER 用户名 IDENTIFINED BY 密码;

CREATE USER 'zhang' IDENTIFIED BY '123';

删除用户

DROP USER 用户名;

DROP USER 'zhang';

给用户授权

GRANT ALL ON 数据库.表 ==TO ==用户名;

GRANT ALL ON test.* TO 'zhang';

撤销权限

REVOKE ALL ON 数据库.表名 FROM 用户名;

REVOKE ALL IN test.* FROM 'zhang';

常用函数

时间函数

SYSDATE(); #当前系统时间(日月年,时分秒)

CURDATE();#获取当前日期(日月年)

CURTIME();#获取当前时间(时分秒)

WEEK(DATE);#获取指定日期为一年中的第几周)

YEAR(DATE);#获取指定日期的年份

HOUR(TIME);#获取指定时间的小时值

MINUTE(TIME);#获取指定时间的分钟值

DATEDIFF(DATE1,DATE2);#获取date1于date2之间相隔的天数

ADDDATE(DATE,N):#计算date加上N天后的日期

字符串函数

CONCAT(STR1,STR2,STR3...);#字符串的拼接

INSERT(旧字符串,位置,长度,新字符串):#字符串的替换

LOWER(STR)#转成小写

UPPER(STR)#转成大写

SUBSTRING(字符串,位置,长度)#截取字符串

聚合函数

SUM(); #求和

AVG();#求平均值

MAX();#求最大值

MIN();#求最小值

COUNT();求总行数

各种约束关键字

实体完整性约束

主键约束:PRIMARY KEY

  • 主键必须包含唯一的值。

  • 主键列不能包含 NULL 值。

  • 每个表都应该有一个主键,并且每个表只能有一个主键。

# 创建时定义主键约束方式1
create table test( 
id int primary key);

#创建时定义主键约束方式2
create table test(
id int,
primary key(id)
);

#定义联合主键约束
create table test(
id int,
name varchar(10),
primary key(id,name)
);

#为列添加主键约束
alter table test add primary key (列名);

# 撤销主键约束(撤销主键后,原主键的列还是非空约束中)
alter table test drop primary key;

唯一约束: UNIQUE

  • 表示此列中的数据,唯一不可重复
# 创建时定义唯一约束方式1
create table test( 
id int primary key);

#创建时定义唯一约束方式2
create table test(
id int,
primary key(id)
);

#定义联合唯一约束
create table test(
id int,
name varchar(10),
primary key(id,name)
);

# 为列添加唯一约束
alter table test add unique (id);

#撤销唯一约束
ALTER TABLE test DROP INDEX id;

自动增长列:AUTO_INCREMENT

  • 注:使用自动增长列,会导致插入数据的时候,无论是否插入成功,都将+!
  • 被自动增长列约束的列,必须要有键约束(唯一,主键,外键,联合主键)
  • 自动增长列约束的列,必须是数字类型
create table test(
id int AUTO_INCREMENT,
name varchar(10),
primary key(id)
);

#撤销自动增长列方法
ALTER TABLE test MODIFY id INT;
#方法2
ALTER TABLE test CHANGE id id INT;

域完整性约束

非空约束:NOT NULL

-非空,此列的值不能为空

# 创建时添加非空约束
CREATE TABLE test(
id INT NOT NULL,
NAME VARCHAR(10) NOT NULL
);

# 创建后,为某列添加非空约束
ALTER TABLE test MODIFY id INT NOT NULL;
ALTER TABLE test CHANGE NAME NAME INT NOT NULL;

# 删除非空约束
alter table test modify id int;
alter table test change id id int;

默认值约束:DEFAULT

  • 给列设定一个默认值,未赋值的情况下,使用默认值填充
# 创建时添加默认约束
CREATE TABLE test(
id INT DEFAULT 1,
NAME VARCHAR(10) DEFAULT '默认'
);

# 删除默认值约束
alter table test modify id int;
alter table test change name name varchar(10);

外键约束:FOREIGN KEY

CONSTRAINT 引用名 FOREIGN KEY (列名) REFERENCES 被引用表名(列名)

  • 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY
  • 就是说,这个表中的被外键约束的这个列中的值,只能是被引用的表的这个列的值之一,用以增强表的关联性
# 在新建是定义外键约束方式1
CREATE TABLE test(
id INT,
NAME VARCHAR(10),
FOREIGN KEY (id)REFERENCES t1(id)
);

# 在新建是定义外键约束方式2
CREATE TABLE test(
id INT,
NAME VARCHAR(10),
CONSTRAINT ID关键外键约束 FOREIGN KEY (id) REFERENCES t1(id)
);

# 为列新增外键约束
alter table test add foreign key(id) references t1(id);

你可能感兴趣的:(学习笔记,小白学Java)