数组Mysql
2023-03-21 17:59:30 0 举报
AI智能生成
1
作者其他创作
大纲/内容
MySQL
一、引言
1.1 现有存储数据的方式有哪些?
java程序存储数据方式(数组、对象 、集合、变量) ,数据保存在内存中,属于瞬时存储。
文件存储 保存在硬盘中,属于持久状态存储
1.2 以上存储方式有什么缺点?
没有数据类型区分
存储的量级小
没有安全限制
没有备份 恢复机制
数据查询
基本查询
select 查询的字段(列名) FROM 表名
select last_name,salary FROM t_employees;
-- 查询员工的入职日期和 工资 以及姓名
SELECT last_name,salary,hire_Date from t_employees;
-- 查询员工所有信息 *表示所有的列 (在实际开发中不能使用)
SELECT * from t_employees;
-- 查询员工的入职日期和 工资 以及姓名
SELECT last_name,salary,hire_Date from t_employees;
-- 查询员工所有信息 *表示所有的列 (在实际开发中不能使用)
SELECT * from t_employees;
在基本查询中进行运算
-- 1.查询所有员工的年薪 (12 薪)
select last_name,salary*12 FROM t_employees;
-- 2.查询所有员工的月薪(扣除社保800)
select last_name,salary-800 FROM t_employees;
-- 3.查询所有员工的月薪(扣除社保800)+绩效 salary*IFNULL(COMMISSION_PCT,0)
-- IFNULL(判断的字段值,如果结果为null的值)
SELECT last_name,salary*IFNULL(COMMISSION_PCT,0)+salary-800 FROM t_employees;
-- 4.查询所有员工的时薪
SELECT last_name,salary/22/8 from t_employees;
select last_name,salary*12 FROM t_employees;
-- 2.查询所有员工的月薪(扣除社保800)
select last_name,salary-800 FROM t_employees;
-- 3.查询所有员工的月薪(扣除社保800)+绩效 salary*IFNULL(COMMISSION_PCT,0)
-- IFNULL(判断的字段值,如果结果为null的值)
SELECT last_name,salary*IFNULL(COMMISSION_PCT,0)+salary-800 FROM t_employees;
-- 4.查询所有员工的时薪
SELECT last_name,salary/22/8 from t_employees;
别名查询
相当于取小名 1.当列名过长或者字段重复 2.需要用到别名进行查询或者作区分
SELECT first_name '名' ,last_name '姓' FROM t_employees;
SELECT last_name,salary*IFNULL(COMMISSION_PCT,0)+salary-800 as salary FROM t_employees;
排序查询
1.按照员工的工资进行降序排序 DESC 降序 asc 升序 默认不写
select last_name,salary FROM t_employees ORDER BY salary DESC;
select last_name,salary FROM t_employees ORDER BY salary ;
2.按照员工的工资进行降序排序 如果工资相同的话就按照 入职日期进行升序排序
select last_name,salary FROM t_employees ORDER BY salary DESC,hire_Date ;
条件查询
-- 语法:Select * from 表名 where 查询条件
-- 关系条件:
-- > < >= <= != <>
-- 逻辑条件
-- and or not
-- 区间条件
-- between 起始值 and 结束值
-- 枚举条件
-- in(值1,值2...) not in(值1,值2...)
-- 非空条件 sql中的null 不能使用= 或者 != 来进行判断
-- is null is not NULL
-- 关系条件:
-- > < >= <= != <>
-- 逻辑条件
-- and or not
-- 区间条件
-- between 起始值 and 结束值
-- 枚举条件
-- in(值1,值2...) not in(值1,值2...)
-- 非空条件 sql中的null 不能使用= 或者 != 来进行判断
-- is null is not NULL
-- 1.查询工资大于10000 的员工信息
select * FROM t_employees WHERE salary>10000;
-- 2.查询不是销售的员工信息
SELECT * FROM t_employees WHERE JOB_ID !='SA_MAN';
SELECT * FROM t_employees WHERE JOB_ID <>'SA_MAN';
-- 3.查询姓名叫Peter 员工的信息
SELECT * FROM t_employees WHERE FIRST_NAME ="peter";
-- 4.查询1998年以后入职的员工 且 工资大于 8000的员工信息
SELECT * from t_employees WHERE HIRE_DATE> "1998" and SALARY >8000;
-- 5. 查询不是30部门的员工信息
SELECT * FROM t_employees WHERE NOT DEPARTMENT_ID=30
-- 6.查询50 60 90 部门的员工信息
SELECT * FROM t_employees WHERE DEPARTMENT_ID=50 or DEPARTMENT_ID=60 or DEPARTMENT_ID=90;
-- 7.查询员工工资在 8000 12000 的员工信息 between 起始值 and 结束值
SELECT * FROM t_employees WHERE SALARY BETWEEN 8000 and 12000;
SELECT * FROM t_employees WHERE SALARY >=8000 and SALARY <=12000;
-- 8. 查询员工 30 40 70 部门员工信息
SELECT * FROM t_employees WHERE DEPARTMENT_ID IN(30,40,70)
-- 9.查询没有绩效的员工信息
SELECT * FROM t_employees WHERE COMMISSION_PCT = NULL; -- 不要用
SELECT * FROM t_employees WHERE COMMISSION_PCT IS NULL;
select * FROM t_employees WHERE salary>10000;
-- 2.查询不是销售的员工信息
SELECT * FROM t_employees WHERE JOB_ID !='SA_MAN';
SELECT * FROM t_employees WHERE JOB_ID <>'SA_MAN';
-- 3.查询姓名叫Peter 员工的信息
SELECT * FROM t_employees WHERE FIRST_NAME ="peter";
-- 4.查询1998年以后入职的员工 且 工资大于 8000的员工信息
SELECT * from t_employees WHERE HIRE_DATE> "1998" and SALARY >8000;
-- 5. 查询不是30部门的员工信息
SELECT * FROM t_employees WHERE NOT DEPARTMENT_ID=30
-- 6.查询50 60 90 部门的员工信息
SELECT * FROM t_employees WHERE DEPARTMENT_ID=50 or DEPARTMENT_ID=60 or DEPARTMENT_ID=90;
-- 7.查询员工工资在 8000 12000 的员工信息 between 起始值 and 结束值
SELECT * FROM t_employees WHERE SALARY BETWEEN 8000 and 12000;
SELECT * FROM t_employees WHERE SALARY >=8000 and SALARY <=12000;
-- 8. 查询员工 30 40 70 部门员工信息
SELECT * FROM t_employees WHERE DEPARTMENT_ID IN(30,40,70)
-- 9.查询没有绩效的员工信息
SELECT * FROM t_employees WHERE COMMISSION_PCT = NULL; -- 不要用
SELECT * FROM t_employees WHERE COMMISSION_PCT IS NULL;
-- 10. 查询有绩效的员工信息
SELECT * FROM t_employees WHERE COMMISSION_PCT is not Null;
-- 11.查询名字中带有en的员工信息
SELECT * FROM t_employees WHERE LAST_NAME like '%en%'
-- 12.查询last name 中 以la 开头的员工信息
SELECT * from t_employees WHERE LAST_NAME like 'la%'
SELECT * from t_employees WHERE LAST_NAME like '%la'
-- 13.查询last name 中第二个和第三个字符为 in 的员工信息
SELECT * from t_employees WHERE LAST_NAME LIKE '_in%'
-- 14. 查询last name 中 带 'S' 且长度 大于6 的员工信息
SELECT * FROM t_employees WHERE LAST_NAME LIKE '%s%' AND LAST_NAME LIKE '%_______%';
-- 15. 查询last name 中 带 'S' 且长度 大于等于6 的员工信息
SELECT * FROM t_employees WHERE LAST_NAME LIKE '%s%' AND LAST_NAME LIKE '%______%';
子主题
-- 分支查询
-- case
-- when 条件1 then 结果1
-- when 条件2 then 结果2
-- when 条件3 then 结果3
-- else 结果4
-- end
-- 16.查询员工共工资 按照等级来 A B C D E
SELECT
SALARY,
case
WHEN SALARY >12000 THEN 'A类'
WHEN SALARY >8000 THEN 'B类'
WHEN SALARY >5000 THEN 'C类'
WHEN SALARY >3000 THEN 'D类'
ELSE 'E类'
END
FROM t_employees;
时间函数
-- 语法: select 时间函数(参数列表)
-- 获取当前的系统时间
SELECT SYSDATE();
-- 获取当前日期
SELECT NOW()
-- 获取系统当前日期(不包含时间)
SELECT CURDATE()
-- 获取系统的时间
SELECT CURTIME()
-- 获取指定日期中的年份
SELECT YEAR('2023-03-21')
-- 计算指定日期相隔天数
SELECT DATEDIFF('2023-02-27','2023-03-21')
-- 在指定日期基础上添加指定天数
SELECT ADDDATE(NOW(),20)
字符串函数
-- 字符串函数
-- 请将 hello word 拼接在一起
SELECT 'hello' + 'word' ; -- 错误
-- CONCAT(str1,str2,...) 函数 拼接函数
SELECT CONCAT('hello','word')
SELECT CONCAT('%','手机','%')
-- 字符串 替换函数 参数1 原始字符串 参数2 起始位置 参数3 截取位置 参数4 替换的字符串
SELECT INSERT('helloword',6,5,'mysql')
SELECT LOWER('HELLO')
SELECT UPPER('hello')
-- 字符串截取函数 参数1 原始字符串 参数2 起始位置 参数3 截取的长度
SELECT SUBSTRING('hello,java123' ,7,4)
聚合函数
-- 聚合函数
-- select 聚合函数 (列名) from 表名
-- sum 函数求和
SELECT sum(SALARY+SALARY*IFNULL(COMMISSION_PCT,0)) FROM t_employees;
-- max 函数求最大 值
SELECT MAX(SALARY) FROM t_employees;
-- min 函数求最小
SELECT MIN(SALARY) FROM t_employees;
-- avg 求平均值
SELECT AVG(SALARY) FROM t_employees;
-- count函数 求个数 * 表示所有列 函数只会统计不为null 数据
SELECT COUNT(*) from t_employees
SELECT COUNT(1) from t_employees
SELECT COUNT(COMMISSION_PCT) from t_employees
一、数组
1.1 数组的概念
数组在内存当中是一块连续的空间,可以保存相同类型的多个数据容器。
1.2数组的特点
数组中保存的数据必须是相同类型
数组是定长的(数组一旦定义成不能改变长度)
二、数组的创建
2.1 动态初始化
语法1:数据类型[ ] 数组名 =new 数据类型[长度]
public static void main(String[] args) {
//数组的动态初始化
int[] arr=new int[3];
//存数据
arr[0]=11;
arr[1]=22;
arr[2]=33;
//取数据
System.out.println("第一个元素为"+arr[0]);
System.out.println("第二个元素为"+arr[1]);
System.out.println("第三个元素为"+arr[2]);
//获取数组的长度
System.out.println("数组的长度为:"+arr.length);
//ArrayIndexOutOfBoundsException 数组下标越界异常
System.out.println(arr[3]);
}
}
//数组的动态初始化
int[] arr=new int[3];
//存数据
arr[0]=11;
arr[1]=22;
arr[2]=33;
//取数据
System.out.println("第一个元素为"+arr[0]);
System.out.println("第二个元素为"+arr[1]);
System.out.println("第三个元素为"+arr[2]);
//获取数组的长度
System.out.println("数组的长度为:"+arr.length);
//ArrayIndexOutOfBoundsException 数组下标越界异常
System.out.println(arr[3]);
}
}
语法2:数据类型 数组名[ ]=new 数据类型[长度]
2.2静态初始化
语法1:数据类型[ ] 数组名={数据1,数据2。。。}
public static void main(String[] args) {
//创建数组
String[] names=new String[]{"张三","李四","王五","赵六"};
//直接打印出 内存地址 不会的得到
System.out.println(names);
//操作数组
names[0]="cxk";
names[1]="尼古拉斯";
//取数据
System.out.println(names[0]);
System.out.println(names[1]);
System.out.println(names[2]);
System.out.println(names[3]);
//获取数组长度
System.out.println(names.length);
}
}
//创建数组
String[] names=new String[]{"张三","李四","王五","赵六"};
//直接打印出 内存地址 不会的得到
System.out.println(names);
//操作数组
names[0]="cxk";
names[1]="尼古拉斯";
//取数据
System.out.println(names[0]);
System.out.println(names[1]);
System.out.println(names[2]);
System.out.println(names[3]);
//获取数组长度
System.out.println(names.length);
}
}
语法2:数据类型 数组名 [ ] ={数据1 ,数据2.。。。}
数据类型 [ ] 数组名 =new 数据类型[ ] {数据1 数据2 }
2.3 数组的细节
- 数组中的每一个数据数组元素
- 数组中每一个元素都对应一个下标
- 数组中的下标范围0~数组长度-1
- 数组的长度通过数组名.length 获取 返回值是int类型
- 数据长度如果超出边界会报错ArrayIndexOutOfBoundsException 数组下标越界异常
- 数组中每一个元素都对应一个下标
- 数组中的下标范围0~数组长度-1
- 数组的长度通过数组名.length 获取 返回值是int类型
- 数据长度如果超出边界会报错ArrayIndexOutOfBoundsException 数组下标越界异常
三、数组的遍历
Subtopic
Subtopic
自由主题
数据库案例-- 1、 查询Student表中的所有记录的STU_NAME、STU_SEX和CLASSES列。
SELECT stu_name,stu_sex,classes FROM student;
-- 2、 查询教师所有的单位即不重复的DEPART列。
SELECT * FROM teacher;
SELECT distinct depart '单位' FROM teacher;
-- 3、 查询Student表的所有记录。
SELECT * FROM student;
-- 4、 查询Score表中成绩在60到80之间的所有记录。
SELECT * FROM Score WHERE degree BETWEEN 60 AND 80;
-- 5、 查询Score表中成绩为85,86或88的记录。
SELECT * FROM Score WHERE degree in(85,86,88)
-- 6、 查询Student表中“95031”班或性别为“女”的同学记录。
SELECT * FROM student WHERE classes= 95031 OR stu_sex='女';
SELECT * FROM student WHERE stu_sex='女';
SELECT * FROM student WHERE classes='95031'
-- 7、 以CLASSES降序查询Student表的所有记录。
select * FROM student ORDER BY classes DESC;
-- 8、 以COU_ID升序、DEGREE降序查询Score表的所有记录。
select * FROM score ORDER BY cou_id , DEGREE DESC;
-- 9、 查询“95031”班的学生人数。
SELECT COUNT(*) FROM student WHERE CLASSES= 95031;
SELECT stu_name,stu_sex,classes FROM student;
-- 2、 查询教师所有的单位即不重复的DEPART列。
SELECT * FROM teacher;
SELECT distinct depart '单位' FROM teacher;
-- 3、 查询Student表的所有记录。
SELECT * FROM student;
-- 4、 查询Score表中成绩在60到80之间的所有记录。
SELECT * FROM Score WHERE degree BETWEEN 60 AND 80;
-- 5、 查询Score表中成绩为85,86或88的记录。
SELECT * FROM Score WHERE degree in(85,86,88)
-- 6、 查询Student表中“95031”班或性别为“女”的同学记录。
SELECT * FROM student WHERE classes= 95031 OR stu_sex='女';
SELECT * FROM student WHERE stu_sex='女';
SELECT * FROM student WHERE classes='95031'
-- 7、 以CLASSES降序查询Student表的所有记录。
select * FROM student ORDER BY classes DESC;
-- 8、 以COU_ID升序、DEGREE降序查询Score表的所有记录。
select * FROM score ORDER BY cou_id , DEGREE DESC;
-- 9、 查询“95031”班的学生人数。
SELECT COUNT(*) FROM student WHERE CLASSES= 95031;
-- 1.找出奖金高于工资的雇员
SELECT * FROM emp WHERE COMM>sal;
-- 2.找出奖金高于工资60%的雇员
SELECT * FROM emp WHERE COMM>sal*0.6;
-- 3.找出部门10中所有经理和部门20中所有店员的信息
SELECT * FROM emp WHERE (deptno=10 AND job ="manager")OR(deptno=20 AND job="clerk")
-- 4.薪资大于或等于2000的所有员工的信息。
SELECT * FROM emp WHERE sal>=2000;
-- 5.查询没有奖金或者奖金低于100的员工信息
SELECT * FROM emp WHERE COMM is null OR comm < 100;
-- 6.查询姓名不带”R”的员工姓名
SELECT * FROM emp WHERE ename not like '%R%';
SELECT * FROM emp WHERE ename like '%R%';
-- 7.显示员工的姓名和入职时间,根据入职时间,将最老的员工排放在最前面。
SELECT ename,hiredate FROM emp ORDER BY hiredate asc;
-- 8.查询所有员工的月薪(工资+奖金)
SELECT ename,sal+IFNULL(comm,0) FROM emp;
SELECT * FROM emp WHERE COMM>sal;
-- 2.找出奖金高于工资60%的雇员
SELECT * FROM emp WHERE COMM>sal*0.6;
-- 3.找出部门10中所有经理和部门20中所有店员的信息
SELECT * FROM emp WHERE (deptno=10 AND job ="manager")OR(deptno=20 AND job="clerk")
-- 4.薪资大于或等于2000的所有员工的信息。
SELECT * FROM emp WHERE sal>=2000;
-- 5.查询没有奖金或者奖金低于100的员工信息
SELECT * FROM emp WHERE COMM is null OR comm < 100;
-- 6.查询姓名不带”R”的员工姓名
SELECT * FROM emp WHERE ename not like '%R%';
SELECT * FROM emp WHERE ename like '%R%';
-- 7.显示员工的姓名和入职时间,根据入职时间,将最老的员工排放在最前面。
SELECT ename,hiredate FROM emp ORDER BY hiredate asc;
-- 8.查询所有员工的月薪(工资+奖金)
SELECT ename,sal+IFNULL(comm,0) FROM emp;
-- 1.查询学生平均分
SELECT avg(score)FROM stuscore;
-- 2.查询姓名是张三的学生 成绩和
SELECT SNAME,sum(score)from stuscore WHERE SNAME='张三';
-- 3.将学生信息按照 分数倒序
SELECT sname'姓名',SUBJECT'科目',score'分数' FROM stuscore ORDER BY score asc;
-- 4.分别获取学生信息中 分数最低的学生姓名和分数最高的学生姓名
SELECT * FROM stuscore ORDER BY score LIMIT 1;-- 最低
SELECT * FROM stuscore ORDER BY score DESC LIMIT 1; -- 最高
SELECT avg(score)FROM stuscore;
-- 2.查询姓名是张三的学生 成绩和
SELECT SNAME,sum(score)from stuscore WHERE SNAME='张三';
-- 3.将学生信息按照 分数倒序
SELECT sname'姓名',SUBJECT'科目',score'分数' FROM stuscore ORDER BY score asc;
-- 4.分别获取学生信息中 分数最低的学生姓名和分数最高的学生姓名
SELECT * FROM stuscore ORDER BY score LIMIT 1;-- 最低
SELECT * FROM stuscore ORDER BY score DESC LIMIT 1; -- 最高
0 条评论
下一页