DML(数据操作语言):用于操作数据库对象中所包含的数据
DML包括:
#给某个表中添加单行数据
INSERT INTO GRADE (GRADEID,GRADENAME) VALUES (1,'预科');
#插入多行数据(批量插入)
INSERT INTO STUDENT VALUES
(10001, 'password123', '张宇', '男', 1, '13812345678', '北京市朝阳区', '2000-03-15', 'zhangyu@email.com', '110101200003154321'),
(10002, 'pass456', '李欣', '女', 2, '13998765432', '上海市浦东新区', '1999-07-20', 'lixin@email.com', '310115199907201234'),
(10003, 'abc123', '王浩', '男', 1, '13787654321', '广州市天河区', '2001-01-10', 'wanghao@email.com', '440106200101102345'),
(10004, 'pass789', '赵雨菲', '女', 3, '13611112222', '深圳市南山区', '2003-05-25', 'zhaoyufei@email.com', '440305200305252678'),
(10005, 'qwerty', '陈嘉琪', '男', 2, '13544445555', '成都市武侯区', '2002-11-05', 'chenjiaqi@email.com', '510107200211053456');
#按照一定条件修改数据(修改张三手机号,条件是手机号是13812345678)
UPDATE STUDENT SET PHONE = '123' WHERE PHONE = '13812345678';
#按照一定条件修改一行中的多条数据(修改李四的手机号和地址,条件是手机号是13998765432)
UPDATE STUDENT SET PHONE = '321' , ADDRESS = '河南省郑州市' WHERE PHONE = '13998765432';
运算符 | 含义 |
+ | 加法运算,求两个数或表达式相加的和 |
- | 减法运算,求两个数或表达式相减的差 |
* | 乘法运算,求两个数或表达式相乘的积 |
/ | 除法运算,求两个数或表达式相除的商 |
% | 取模运算,求两个数或表达式相除的余数 |
= | 把一个数或变量或表达式赋值给另一个变量 |
运算符 | 含义 | 范例 | 结果 |
= | 等于 | 5 = 6 | false |
<> 或 != | 不等于 | 5 != 6 | true |
> | 大于 | 5 > 6 | false |
< | 小于 | 5 < 6 | true |
>= | 大于等于 | 5 >= 6 | false |
<= | 小于等于 | 5 <= 6 | true |
BETWEEN | 在某个范围之间(包含两边) | BETWEEN 5 AND 10 | - |
运算符 | 含义 | 范例 | 结果 |
AND | 并且 | 5>1 AND 1>2 | false |
OR | 或 | 5>1 OR 1>2 | true |
NOT | 取反 | NOT 1>2 | true |
#切换到......
USE myschool;
#展示表
SHOW TABLES;
#查看表结构
DESC GRADE;
#给GRADE表添加数据
#给某个表中添加数据
INSERT INTO GRADE (GRADEID,GRADENAME) VALUES (1,'预科');
#从某个表中删除指定数据
DELETE FROM GRADE WHERE GRADEID=1;
#从某个表中查询数据
SELECT * FROM GRADE;
DESC STUDENT;
#给学生表批量添加数据
INSERT INTO STUDENT VALUES
(10001, 'password123', '张三', '男', 1, '13812345678', '北京市朝阳区', '2000-03-15', 'zhangsan@email.com', '110101200003154321'),
(10002, 'pass456', '李四', '女', 2, '13998765432', '上海市浦东新区', '1999-07-20', 'lisi@email.com', '310115199907201234'),
(10003, 'abc123', '王五', '男', 1, '13787654321', '广州市天河区', '2001-01-10', 'wangwu@email.com', '440106200101102345'),
(10004, 'pass789', '赵六', '女', 3, '13611112222', '深圳市南山区', '2003-05-25', 'zhaoliu@email.com', '440305200305252678'),
(10005, 'qwerty', '陈七', '男', 2, '13544445555', '成都市武侯区', '2002-11-05', 'chenqi@email.com', '510107200211053456'),
(10006, 'pass789', '刘八', '女', 2, '13755556666', '重庆市渝中区', '2000-09-18', 'liuba@email.com', '500103200009183210'),
(10007, 'abcd1234', '张九', '男', 1, '13987654321', '杭州市西湖区', '1998-12-02', 'zhangjiu@email.com', '330106199812021234'),
(10008, 'pass123', '王十', '女', 3, '13899998888', '南京市鼓楼区', '2004-02-28', 'wangshi@email.com', '320106200402283456'),
(10009, 'password', '赵十一', '男', 2, '13698761234', '武汉市洪山区', '2003-07-15', 'zhaoshiyi@email.com', '420111200307152345'),
(10010, 'qwerty123', '李十二', '女', 1, '13567894567', '成都市锦江区', '2001-04-30', 'lishier@email.com', '510104200104303210'),
(10011, 'pass987', '陈十三', '男', 3, '13733334444', '广州市海珠区', '2002-08-12', 'chensanshier@email.com', '440105200208123210'),
(10012, 'pass456', '李十四', '女', 1, '13922221111', '深圳市福田区', '2000-01-25', 'lishisi@email.com', '440304200001253456');
#按照一定条件修改数据(修改张三手机号,条件是手机号是13812345678)
UPDATE STUDENT SET PHONE = '123' WHERE PHONE = '13812345678';
#按照一定条件修改一行中的多条数据(修改李四的手机号和地址,条件是手机号是13998765432)
UPDATE STUDENT SET PHONE = '321' , ADDRESS = '河南省郑州市' WHERE PHONE = '13998765432';
#批量给成绩表添加数据
INSERT INTO RESULT VALUES
(10001, 1, '2023-05-20', 85),
(10002, 1, '2023-05-20', 92),
(10003, 1, '2023-05-20', 21),
(10004, 1, '2023-05-20', 89),
(10005, 1, '2023-05-20', 94),
(10006, 1, '2023-05-20', 80),
(10007, 1, '2023-05-20', 88),
(10008, 1, '2023-05-20', 60),
(10009, 1, '2023-05-20', 83),
(10010, 1, '2023-05-20', 55),
(10011, 1, '2023-05-20', 76),
(10012, 1, '2023-05-20', 30);
#按照条件修改数据
#修改学生表中,身份证号不为空的学生密码为111111
UPDATE STUDENT SET LOGINPWD = '111111'
WHERE IDENTITYCARD IS NOT NULL;
#将课程编号为1的所有不及格的学生的成绩修改为60分
UPDATE RESULT SET STUDENTRESULT = 60
WHERE SUBJECTNO = 1 AND STUDENTRESULT < 60;
#将课程编号为1的所有 大于等于80分 且 小于等于90分 的学生的成绩加5分
UPDATE RESULT SET STUDENTRESULT = STUDENTRESULT + 5
WHERE SUBJECTNO = 1 AND STUDENTRESULT >= 80 AND STUDENTRESULT <= 90;
DQL(Data Query Language数据查询语言):用于查询数据库对象中所包含的数据
DQL语言主要的语句:SELECT语句
DQL语言是数据库语言中最核心、最重要的语句,也是使用频率最高的语句
查询的主要类型:简单的单表查询或多表的复杂查询和子查询
#查询学生表中所有学生的所有信息
SELECT * FROM STUDENT;
#查询学生表中所有学生的学号、姓名、性别、电话、地址
SELECT STUDENTNO,STUDENTNAME,SEX,PHONE,ADDRESS FROM STUDENT;
#将上一个查询结果的字段名用中文表示(AS可以不写,但是必须加空格)
SELECT
STUDENTNO AS '学号',
STUDENTNAME '姓名',
SEX '性别',
PHONE '联系电话',
ADDRESS '家庭住址'
FROM STUDENT;
在WHERE字句总,使用LIKE关键字进行模糊查询
#LIKE模糊查询
#查询姓赵的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '赵%';
#查询以“雨”结尾的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '%雨';
#查询名字中包含“雨”的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '%雨%';
#查询姓张,名字为两个字的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '张_';
#查询姓赵,名字为三个字的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '赵__';
MySQL中的函数将一些常用的处理数据的操作封装起来,这样大大简化了程序员的工作,提高了开发效率
MySQL中常用的函数:
函数名 | 作用 |
AVG() | 返回某字段的平均值 |
COUNT() | 返回某字段的行数 |
MAX() | 返回某字段的最大值 |
MIN() | 返回某字段的最小值 |
SUM() | 返回某字段的和 |
#聚合函数
#查询编号10001的历次平均考试成绩
SELECT AVG(STUDENTRESULT)
FROM RESULT WHERE STUDENTNO = 10001;
#查询编号10001的考试次数
SELECT COUNT(1)
FROM RESULT WHERE STUDENTNO = 10001;
#查询学生表中一共有多少个学生
SELECT COUNT(*) FROM STUDENT;
#查询学生表中是2年级的学生个数
SELECT COUNT(*) FROM STUDENT WHERE GRADEID = 2;
#查询编号10001的考试最高分、最低分和总分
SELECT MAX(STUDENTRESULT),
MIN(STUDENTRESULT),
SUM(STUDENTRESULT)
FROM RESULT WHERE STUDENTNO = 10001;
函数名 | 作用 | 举例 |
CEIL(x) | 返回大于或等于数值x的最小整数 | SELECT CEIL(2.3) 返回:3 |
FLOOR(x) | 返回小于或等于数值x的最大整数 | SELECT FLOOR(2.3) 返回:2 |
RAND() | 返回0~1之间的随机数 | SELECT RAND() 返回:0.55254685838708134 |
函数名 | 作用 | 举例 |
CONCAT(str1,str2...strn) | 字符串连接 | SELECT CONCAT('My','S','QL'); 返回:MySQL |
INSERT(str,pos,len,newstr) | 字符串替换 | SELECT INSERT( ? ? ? ? '这是SQL Server数据库', ? ? ? ? 3,10,'MySQL'); 返回:这是MySQL数据库 |
LOWER(str) | 将字符串转为小写 | SELECT LOWER('MySQL'); 返回:mysql |
UPPER(str) | 将字符串转为大写 | SELECT UPPER('MySQL'); 返回:MYSQL |
SUBSTRING(str,num,len) | 字符串截取 | SELECT SUBSTRING( ? ? ? ? 'JavaMySQLOracle',5,5); 返回:MySQL |
#字符串函数
#查询学生信息的邮箱前五位
SELECT SUBSTRING(EMAIL,1,5) FROM STUDENT;
#生成一个唯一序列
SELECT UUID() FROM DUAL;
#生成一个唯一序列并去掉这个唯一序列中的-
SELECT REPLACE(UUID(),'-','') FROM DUAL;
函数名 | 作用 | 举例(结果与当前时间有关) |
CURDATE() | 获取当前日期 | SELECT CURDATE(); 返回:2024-01-04 |
CURTIME() | 获取当前时间 | SELECT CURTIME(); 返回:16:14:16 |
NOW() | 获取当前日期和时间 | SELECT NOW(); 返回:2024-01-04 16:14:53 |
WEEK(date) | 返回日期date为一年中的第几周 | SELECT WEEK(NOW()); 返回:1 |
YEAR(date) | 返回日期date的年份 | SELECT YEAR(NOW()); 返回:2024 |
HOUR(time) | 返回时间time的小时值 | SELECT HOUR(NOW()); 返回:9 |
MINUTE(time) | 返回时间time的分钟值 | SELECT MINUTE(NOW()); 返回:43 |
DATEDIFF(date1,date2) | 返回日期参数date1和date2之间 相隔的天数 | SELECT DATEDIFF(NOW(),'2008-8-8'); 返回:5627 |
ADDDATE(date,n) | 计算日期参数date加上n天后的日期 | SELECT ADDDATE(NOW(),5); 返回:2024-01-09 16:27:07 |
#日期时间函数
#获取系统当前时间
SELECT NOW() FROM DUAL;
#获取系统当前时间若干天后的时间
SELECT ADDDATE(NOW(),30) FROM DUAL;
#切换到......
USE myschool;
#查询学生表中所有学生的所有信息
SELECT * FROM STUDENT;
#查询学生表中所有学生的学号、姓名、性别、电话、地址
SELECT STUDENTNO,STUDENTNAME,SEX,PHONE,ADDRESS FROM STUDENT;
#将上一个查询结果的字段名用中文表示(AS可以不写,但是必须加空格)
SELECT
STUDENTNO AS '学号',
STUDENTNAME '姓名',
SEX '性别',
PHONE '联系电话',
ADDRESS '家庭住址'
FROM STUDENT;
#查询成绩表中,成绩大于85的信息
SELECT * FROM RESULT WHERE STUDENTRESULT > 85;
#查询成绩表中,成绩不是85分的信息
SELECT * FROM RESULT WHERE STUDENTRESULT != 85;
#LIKE模糊查询
#查询姓赵的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '赵%';
#查询以“雨”结尾的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '%雨';
#查询名字中包含“雨”的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '%雨%';
#查询姓张,名字为两个字的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '张_';
#查询姓赵,名字为三个字的学生信息
SELECT * FROM STUDENT WHERE STUDENTNAME LIKE '赵__';
#聚合函数
#查询编号10001的历次平均考试成绩
SELECT AVG(STUDENTRESULT)
FROM RESULT WHERE STUDENTNO = 10001;
#查询编号10001的考试次数
SELECT COUNT(1)
FROM RESULT WHERE STUDENTNO = 10001;
#查询学生表中一共有多少个学生
SELECT COUNT(*) FROM STUDENT;
#查询学生表中是2年级的学生个数
SELECT COUNT(*) FROM STUDENT WHERE GRADEID = 2;
#查询编号10001的考试最高分、最低分和总分
SELECT MAX(STUDENTRESULT),
MIN(STUDENTRESULT),
SUM(STUDENTRESULT)
FROM RESULT WHERE STUDENTNO = 10001;
#字符串函数
#查询学生信息的邮箱前五位
SELECT SUBSTRING(EMAIL,1,5) FROM STUDENT;
#生成一个唯一序列
SELECT UUID() FROM DUAL;
#生成一个唯一序列并去掉这个唯一序列中的-
SELECT REPLACE(UUID(),'-','') FROM DUAL;
#日期时间函数
#获取系统当前时间
SELECT NOW() FROM DUAL;
#获取系统当前时间若干天后的时间
SELECT ADDDATE(NOW(),30) FROM DUAL;