目录
4.1 update 表名 set 字段名1=数据1,字段名2=数据2,...,字段名n=数据n [where 字段名=数据];
5.1 delete from 表名 [where 字段名=数据]
一 创建数据库 DDL
其中 下图表数据中数据用 DML操作数据表实现;
二 语法:
create table 表名(
字段1 字段类型,
字段2 字段类型,
...
字段n 字段类型
);
2.1 常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型; char(10) 'aaa ' 占10位
varchar:可变长度字符串类型; varchar(10) 'aaa' 占3为
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
2.2 操作数据表的命令
当前数据库中的所有表
SHOW TABLES;
查看表的字段信息
DESC employee;
在上面员工表的基本上增加一个image列。
ALTER TABLE employee ADD image blob;
修改job列,使其长度为60。
ALTER TABLE employee MODIFY job varchar(60);
删除image列,一次只能删一列。
ALTER TABLE employee DROP image;
表名改为user。
RENAME TABLE employee TO user;
查看表格的创建细节
SHOW CREATE TABLE user;
修改表的字符集为gbk
ALTER TABLE user CHARACTER SET gbk;
列名name修改为username
ALTER TABLE user CHANGE name username varchar(100);
删除表
DROP TABLE user ;
三 代码命令执行【DML】
3.1 创建表emp
CREATE TABLE `emp`(
`id` INT,
`name` VARCHAR(100),
`gender` VARCHAR(10),
`birthday` DATE,
`salary` FLOAT(10,2),
`entry_date` DATE,
`resume` TEXT
);
3.2 向emp表中添加数据
3.2.1插入数据语法 insert into 表名(字段名1,字段名2,...,字段名n)values(数据1,数据2,...,数据n);
INSERT INTO emp(id,NAME,gender,birthday,salary,entry_date,RESUME)
VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','good girl');
INSERT INTO emp(id,NAME,gender,birthday,salary,entry_date,RESUME)
VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');
INSERT INTO emp(id,NAME,gender,birthday,salary,entry_date,RESUME)
VALUES(3,'你好','male','1995-5-10',10000,'2015-5-5','good boy');
3.2.2 如果给表的所有字段都插入数据,那么字段名的列表可以省略不写,如果只给表中的某些字段插入数据,那么这些字段名不能省略
#insert into 表名 values(数据1,数据2,...,数据n);
INSERT INTO emp VALUES(4,'wangwu','male','1998-9-9',12500,'2022-3-4','very good');
3.2.3 可以批量的向表中插入多条数据
#insert into 表名 values(数据1,数据2,...,数据n),(数据1,数据2,...,数据n),...,(数据1,数据2,...,数据n);
INSERT INTO emp
VALUES
(5,'wangwu','male','1998-9-9',12500,'2022-3-4','very good'),
(6,'wangwuer','male','1998-9-2',12500,'2022-3-4','very good'),
(7,'wangwusan','male','1998-11-9',12500,'2022-3-4','very good'),
(8,'wangwusi','male','1998-6-9',12500,'2022-3-4','very good');
四. #修改数据
(where ----->筛选器)
4.1 update 表名 set 字段名1=数据1,字段名2=数据2,...,字段名n=数据n [where 字段名=数据];
UPDATE emp SET salary=15000;
-------->针对salary一列的数据修改
UPDATE emp SET salary=18000 WHERE id=2 ;
------->针对列中的第二行修改数据
4.2 修改数据表
给表中所有的男性员工工资+200
UPDATE emp SET salary =salary+200 WHERE gender='male';
#将表中名叫wangwu的员工性别修改为female,薪水修改为15500
UPDATE emp SET gender='female',salary=15500 WHERE `name`='wangwu';
-------->name 加`name` 反撇号
五. 删除操作(delete from...)
5.1 delete from 表名 [where 字段名=数据]
#如果不加where进行过滤,会将表中所有的数据删除
#DELETE FROM emp;
#删除名称叫“你好”的记录
DELETE FROM emp WHERE `name`='你好';
六 . 查询操作 (select)
select 字段名1,字段名2,...,字段名n from 表名 [where...group by...having...order by...limit...];
6.1 创建一个新数据库 进行多个表的创建
CREATE DATABASE IF NOT EXISTS `java221804`;
CREATE TABLE `stu` (
`sid` CHAR(6),
`sname` VARCHAR(50),
`age` INT,
`gender` VARCHAR(50)
);
INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
CREATE TABLE `emp`(
`empno` INT,
`ename` VARCHAR(50),
`job` VARCHAR(50),
`mgr` INT,
`hiredate`DATE,
`sal` DECIMAL(7,2),
`comm` DECIMAL(7,2),
`deptno` INT
);
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
CREATE TABLE `dept`(
`deptno` INT,
`dname` VARCHAR(14),
`loc` VARCHAR(13)
);
INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO dept VALUES(40, 'OPERATIONS', 'BOSTON');
6.2 基础查询
#查询stu表中sid字段和sname字段
SELECT sid,sname FROM stu;
#查询stu表中sid字段、sname字段和age字段
SELECT sid,sname,age FROM stu;
#查询stu表中所有的字段信息
SELECT sid,sname,age,gender FROM stu;
***当你要查询表中所有的字段信息时,你可以使用*表示所有的字段
SELECT * FROM stu;
6.3 条件查询
#查询性别为女,并且年龄大于50的记录
SELECT * FROM stu WHERE gender='female' AND age>50;
#查询学号为S_1001,或者姓名为liSi的记录
SELECT * FROM stu WHERE sid='S_1001' OR sname='liSi';
#查询学号为S_1001,S_1002,S_1003的记录
SELECT * FROM stu WHERE sid='S_1001' OR sid='S_1002' OR sid='S_1003';
SELECT * FROM stu WHERE sid IN('S_1001','S_1002','S_1003');
#查询学号不是S_1001,S_1002,S_1003的记录
SELECT * FROM stu WHERE sid!='S_1001'AND sid!='S_1002' AND sid!='S_1003';
SELECT * FROM stu WHERE sid NOT IN('S_1001','S_1002','S_1003');
#查询年龄为null的记录
SELECT * FROM stu WHERE age IS NULL;
#查询年龄在20到40之间的学生记录
SELECT * FROM stu WHERE age>=20 AND age<=40;
SELECT * FROM stu WHERE age BETWEEN 20 AND 40;
#between x and y 是包含x和y这两个值
#查询性别非男的学生记录
SELECT * FROM stu WHERE gender='female';
SELECT * FROM stu WHERE gender!='male';
SELECT * FROM stu WHERE gender<>'male';
SELECT * FROM stu WHERE NOT gender ='male';#not写在字段名的前面
#查询姓名不为null的学生记录
SELECT * FROM stu WHERE NOT sname IS NULL;
SELECT * FROM stu WHERE sname IS NOT NULL
6.4 模糊查询,
【使用关键字like来实现,搭配2个通配符,_表示任意一个字符,%表示任意0-n个字符】
#查询姓名由5个字母构成的学生记录
SELECT * FROM stu WHERE sname LIKE '_____';
#查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '____i';
#查询姓名以“z”开头的学生记录
SELECT * FROM stu WHERE sname LIKE 'z%';
#查询姓名中第2个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '_i%';
#查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE '%a%';
6.5 字段控制查询
#去除重复记录DISTINCT
#查询emp表中的薪水,相同的数据也会显示
SELECT sal FROM emp;
#查询emp表中的薪水,去除重复数据
SELECT DISTINCT sal FROM emp;
查看雇员的月薪与佣金之和
#一个数与null进行算术运算,结果为null,可以使用函数将null值转换为0
SELECT *, sal+comm FROM emp;
#ifnull(字段名,数据):使用函数ifnull来判断字段是否为null,如果字段为null,转换为指定的数据,如果字段不为null,不做转换,直接使用字段的值
SELECT *,sal+IFNULL(comm,0) FROM emp;
#给列名添加别名
SELECT *,sal+IFNULL(comm,0) AS '月薪和佣金之和' FROM emp;
SELECT empno AS '员工编号',ename AS '员工姓名' FROM emp;
#as可以省略不写
SELECT empno '员工编号',ename '员工姓名' FROM emp;
6.6 排序,【使用order by进行排序,升序ASC】
默认排序方式,可以不写,降序DESC
#查询所有学生记录,按年龄升序排序
SELECT * FROM stu ORDER BY age ASC;
SELECT * FROM stu ORDER BY age;
#查询所有学生记录,按年龄降序排序
SELECT * FROM stu ORDER BY age DESC;
#查询所有雇员,按月薪降序排序,如果月薪相同时,按编号降序排序
SELECT * FROM emp ORDER BY sal DESC,empno DESC;
6.7 函数
#获取当前系统的时间
SELECT CURTIME();
SELECT TIMESTAMPDIFF(DAY,'2000-01-22','2022-10-18') AS '宁宏已经出生天数';
6.8 聚合函数:用来进行纵向统计
#count():统计指定列不为NULL的记录行数;
#查询emp表中记录数
SELECT COUNT(*) AS '表中数据数量' FROM emp;
#查询emp表中有佣金的人数:
SELECT COUNT(comm) FROM emp;
SELECT comm FROM emp WHERE comm IS NOT NULL;
#查询emp表中月薪大于2500的人数
SELECT COUNT(*) AS '月薪大于2500的人数' FROM emp WHERE sal>2500;
#统计月薪与佣金之和大于2500元的人数
SELECT COUNT(*) AS '月薪与佣金之和大于2500元的人数' FROM emp WHERE sal+IFNULL(comm,0)>2500;
#查询有佣金的人数,以及有领导的人数
SELECT COUNT(comm) AS '有佣金的人数',COUNT(mgr) AS '有领导的人数' FROM emp;
#SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
#AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
#查询所有雇员月薪和
SELECT SUM(sal) AS '所有雇员月薪和' FROM emp;
#查询所有雇员月薪和,以及所有雇员佣金和
SELECT SUM(sal) AS '所有雇员月薪和',SUM(comm) FROM emp;
#查询所有雇员月薪+佣金和
SELECT SUM(sal+IFNULL(comm,0)) AS '所有雇员月薪+佣金和' FROM emp;
#统计所有员工平均工资
SELECT AVG(sal) AS '所有员工平均工资' FROM emp;
#MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
#MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
#查询最高工资和最低工资
SELECT MAX(sal) '最高工资' FROM emp;
SELECT MIN(sal) '最低工资' FROM emp;