mysql 查询
2023-03-21 17:58:55 2 举报
AI智能生成
mysql 查询
作者其他创作
大纲/内容
分支主题
语法:case
-- when 条件1 then 结果1
-- when 条件2 then 结果2
-- when 条件3 then 结果3
-- else 结果4
-- end
-- when 条件1 then 结果1
-- when 条件2 then 结果2
-- when 条件3 then 结果3
-- else 结果4
-- end
例题
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;
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;
字符串函数
例题
请你将 hello word 拼接在一起
SELECT 'hello' + 'word'; -- 这是错的
-- CONCAT(str1,str2,...) 这就是拼接函数
SELECT CONCAT('hello','word');
SELECT CONCAT('%','手机','%');
-- 字符串 替换函数 INSERT(str,pos,len,newstr)参数1 是原始字符串 参数2 是起始位置 参数3是截取位置 参数4 替换的字符
SELECT INSERT('helloworld',6,0,'mysql')
-- 大小写函数
SELECT LOWER('HWDADASD');
SELECT UPPER('sdasda');
-- 字符串截取函数
SELECT SUBSTRING('hello,java123',7,4)
SELECT 'hello' + 'word'; -- 这是错的
-- CONCAT(str1,str2,...) 这就是拼接函数
SELECT CONCAT('hello','word');
SELECT CONCAT('%','手机','%');
-- 字符串 替换函数 INSERT(str,pos,len,newstr)参数1 是原始字符串 参数2 是起始位置 参数3是截取位置 参数4 替换的字符
SELECT INSERT('helloworld',6,0,'mysql')
-- 大小写函数
SELECT LOWER('HWDADASD');
SELECT UPPER('sdasda');
-- 字符串截取函数
SELECT SUBSTRING('hello,java123',7,4)
条件查询
语法:select *from 表名 where 查询条件
-- 关系条件
-- -> < >= <= != <>
-- 逻辑条件
-- -and or not
-- 区间条件
-- between 起始值 and 结束值
-- 枚 举条件
-- in(值1,值2) not in(值1,值2)
-- 非空条件 sql中的null不能使用=或者!=来进行判断
-- is null in not null
-- 模糊查询
-- like not like
-- 占位符:
-- %: 表示0个或者多个字符
-- _:表示一个字符
-- -> < >= <= != <>
-- 逻辑条件
-- -and or not
-- 区间条件
-- between 起始值 and 结束值
-- 枚 举条件
-- in(值1,值2) not in(值1,值2)
-- 非空条件 sql中的null不能使用=或者!=来进行判断
-- is null in not null
-- 模糊查询
-- like not like
-- 占位符:
-- %: 表示0个或者多个字符
-- _:表示一个字符
例题
-- 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' or LAST_NAME='peter';
-- 4.查询1998年以后入职的员工 且工资大于8000的员工信息
SELECT *FROM t_employees WHERE HIRE_DATE >1998 and SALARY>8000;
-- 5.查询不是30部门的员工信息
SELECT *FROM t_employees WHERE DEPARTMENT_ID>30 or DEPARTMENT_ID<30;
SELECT *FROM t_employees WHERE not DEPARTMENT_ID=30;
-- 6.查询 50 30 90 部分的信息
SELECT *FROM t_employees WHERE DEPARTMENT_ID=50 or DEPARTMENT_ID=30 OR DEPARTMENT_ID=90;
-- 7.查询员工工资在8000 到12000的员工信息
SELECT *FROM t_employees WHERE SALARY BETWEEN 8000 and 12000 ;
-- 8.查询员工 30 40 70部分信息 枚举用法
SELECT *FROM t_employees WHERE DEPARTMENT_ID in(30,40,70);
-- 9.查询没有绩效的员工信息
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.查询lastname 中 以la 开头的员工信息
SELECT * FROM t_employees WHERE LAST_NAME like 'la%';
-- 13查询lastname中 第二个和第三个字符为 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 LENGTH(LAST_NAME)>=6;
-- 查询Student表中的所有记录的STU_NAME、STU_SEX和CLASSES列
SELECT stu_name,stu_sex,classes FROM student;
-- 查询教师所有的单位即不重复的DEPART列
SELECT DISTINCT DEPART FROM teacher;
-- 查询Student表的所有记录
SELECT * FROM student;
-- 查询Score表中成绩在60到80之间的所有记录
SELECT * FROM score WHERE DEGREE BETWEEN 60 and 80;
-- 查询Score表中成绩为85,86或88的记录
SELECT * FROM score WHERE DEGREE IN(85,86,88);
-- 查询Student表中“95031”班或性别为“女”的同学记录
SELECT * FROM student WHERE CLASSES=95031 or STU_SEX = '女';
-- 以CLASSES降序查询Student表的所有记录
SELECT *FROM student ORDER BY CLASSES DESC;
-- 以COU_ID升序、DEGREE降序查询Score表的所有记录
SELECT *FROM score ORDER BY COU_ID;
SELECT *FROM score ORDER BY DEGREE desc;
-- 查询“95031”班的学生人数
SELECT count(CLASSES) '人数' FROM student WHERE CLASSES =95031;
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' or LAST_NAME='peter';
-- 4.查询1998年以后入职的员工 且工资大于8000的员工信息
SELECT *FROM t_employees WHERE HIRE_DATE >1998 and SALARY>8000;
-- 5.查询不是30部门的员工信息
SELECT *FROM t_employees WHERE DEPARTMENT_ID>30 or DEPARTMENT_ID<30;
SELECT *FROM t_employees WHERE not DEPARTMENT_ID=30;
-- 6.查询 50 30 90 部分的信息
SELECT *FROM t_employees WHERE DEPARTMENT_ID=50 or DEPARTMENT_ID=30 OR DEPARTMENT_ID=90;
-- 7.查询员工工资在8000 到12000的员工信息
SELECT *FROM t_employees WHERE SALARY BETWEEN 8000 and 12000 ;
-- 8.查询员工 30 40 70部分信息 枚举用法
SELECT *FROM t_employees WHERE DEPARTMENT_ID in(30,40,70);
-- 9.查询没有绩效的员工信息
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.查询lastname 中 以la 开头的员工信息
SELECT * FROM t_employees WHERE LAST_NAME like 'la%';
-- 13查询lastname中 第二个和第三个字符为 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 LENGTH(LAST_NAME)>=6;
-- 查询Student表中的所有记录的STU_NAME、STU_SEX和CLASSES列
SELECT stu_name,stu_sex,classes FROM student;
-- 查询教师所有的单位即不重复的DEPART列
SELECT DISTINCT DEPART FROM teacher;
-- 查询Student表的所有记录
SELECT * FROM student;
-- 查询Score表中成绩在60到80之间的所有记录
SELECT * FROM score WHERE DEGREE BETWEEN 60 and 80;
-- 查询Score表中成绩为85,86或88的记录
SELECT * FROM score WHERE DEGREE IN(85,86,88);
-- 查询Student表中“95031”班或性别为“女”的同学记录
SELECT * FROM student WHERE CLASSES=95031 or STU_SEX = '女';
-- 以CLASSES降序查询Student表的所有记录
SELECT *FROM student ORDER BY CLASSES DESC;
-- 以COU_ID升序、DEGREE降序查询Score表的所有记录
SELECT *FROM score ORDER BY COU_ID;
SELECT *FROM score ORDER BY DEGREE desc;
-- 查询“95031”班的学生人数
SELECT count(CLASSES) '人数' FROM student WHERE CLASSES =95031;
时间函数
语法:select 时间函数(参数列表)
例题
-- 获取当前的系统时间
SELECT SYSDATE();
-- 获取当前日期
SELECT NOW();
-- 获取系统当前日期(不包含时间)
SELECT CURDATE();
-- 获取系统的时间
SELECT CURTIME();
-- 获取指定日期中的年份
SELECT YEAR('2023-03-21');
-- 计算指定日期相隔天数
SELECT DATEDIFF('2022-1-23','2023-3-21')
-- 在指定日期基础上添加指定天数
SELECT ADDDATE(NOW(),20);
SELECT SYSDATE();
-- 获取当前日期
SELECT NOW();
-- 获取系统当前日期(不包含时间)
SELECT CURDATE();
-- 获取系统的时间
SELECT CURTIME();
-- 获取指定日期中的年份
SELECT YEAR('2023-03-21');
-- 计算指定日期相隔天数
SELECT DATEDIFF('2022-1-23','2023-3-21')
-- 在指定日期基础上添加指定天数
SELECT ADDDATE(NOW(),20);
聚合函数
语法: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;-- 为null的不统计
-- 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<100 OR comm IS NULL;
-- 6.查询姓名不带”R”的员工姓名
SELECT *FROM emp WHERE ename NOT LIKE '%r%';
-- 7.显示员工的姓名和入职时间,根据入职时间,将最老的员工排放在最前面。
SELECT ename,hiredate FROM emp ORDER BY hiredate;
-- 8.查询所有员工的月薪(工资+奖金)
SELECT ename,(sal+IFNULL(comm,0)) as '月薪' FROM emp ;
-- 1.查询学生平均分
SELECT AVG(score)FROM stuscore;
-- 2.查询姓名是张三的学生 成绩和
SELECT SUM(score)FROM stuscore WHERE sname = '张三';
-- 3.将学生信息按照 分数倒序
SELECT * FROM stuscore ORDER BY score;
-- 4.分别获取学生信息中 分数最低的学生姓名和分数最高的学生姓名
select sname,score as '最高分' from stuscore where score =(select max(score) from stuscore);
SELECT sname,score FROM stuscore ORDER BY score DESC LIMIT 1;
select sname,score as '最低分' from stuscore where score =(select min(score) from stuscore);
SELECT sname,score FROM stuscore ORDER BY score LIMIT 1;
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;-- 为null的不统计
-- 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<100 OR comm IS NULL;
-- 6.查询姓名不带”R”的员工姓名
SELECT *FROM emp WHERE ename NOT LIKE '%r%';
-- 7.显示员工的姓名和入职时间,根据入职时间,将最老的员工排放在最前面。
SELECT ename,hiredate FROM emp ORDER BY hiredate;
-- 8.查询所有员工的月薪(工资+奖金)
SELECT ename,(sal+IFNULL(comm,0)) as '月薪' FROM emp ;
-- 1.查询学生平均分
SELECT AVG(score)FROM stuscore;
-- 2.查询姓名是张三的学生 成绩和
SELECT SUM(score)FROM stuscore WHERE sname = '张三';
-- 3.将学生信息按照 分数倒序
SELECT * FROM stuscore ORDER BY score;
-- 4.分别获取学生信息中 分数最低的学生姓名和分数最高的学生姓名
select sname,score as '最高分' from stuscore where score =(select max(score) from stuscore);
SELECT sname,score FROM stuscore ORDER BY score DESC LIMIT 1;
select sname,score as '最低分' from stuscore where score =(select min(score) from stuscore);
SELECT sname,score FROM stuscore ORDER BY score LIMIT 1;
0 条评论
下一页