JAVA【操作数据表DML】

 

目录

一  创建数据库 DDL  

 二  语法:

 2.1 常用数据类型:

2.2 操作数据表的命令

三 代码命令执行【DML】

 3.1 创建表emp

3.2 向emp表中添加数据

 四. #修改数据

4.1  update 表名 set 字段名1=数据1,字段名2=数据2,...,字段名n=数据n [where 字段名=数据];

4.2  修改数据表

 五. 删除操作(delete from...)

5.1   delete from 表名 [where 字段名=数据]

六 . 查询操作 (select)

6.1  创建一个新数据库 进行多个表的创建

6.2  基础查询

6.3  条件查询

6.4  模糊查询,

6.5  字段控制查询

6.6   排序,【使用order by进行排序,升序ASC】

6.7  函数

6.8   聚合函数:用来进行纵向统计


一  创建数据库 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;

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值