目录
一、基础的增删改
表:t_mysql_employees
下面展示表的数据
增加
** INSERT into t_mysql_employees(first_name,last_name,email,phone_number,salary,commission_pct,manager_id,hiredate)**
修改
update t_mysql_employees set last_name = ‘cheng’ where phone_number=‘17374314552’
删除
delete from t_mysql_employees where phone_number=‘17374314552’
二、过滤查询
1、按条件表达式筛选
案例:
①、查询工资>12000的员工信息
select * from t_mysql_employees where salary >12000
②、查询部门编号不等于90号的员工名和部门编号
select last_name,department_id from t_mysql_employees where department_id <> 90
2、按逻辑表达式筛选
案例:
①、查询工资z在10000到20000之间的员工名、工资以及奖金
SELECT last_name,salary,commission_pct from t_mysql_employees where salary BETWEEN 10000 and 20000
②、查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT * FROM t_mysql_employees WHERE not(department_id BETWEEN 90 and 110) or salary > 15000
三、模糊查询
1、like
案例1:查询员工名中包含字符a的员工信息
select * from t_mysql_employees where last_name like '%a%'
案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select * from t_mysql_employees where last_name like '_e_a%'
案例3:查询员工名中第二个字符为_的员工名
select * from t_mysql_employees where last_name like '_$_%' ESCAPE '$'
2、between and
案例1:查询员工编号在100到120之间的员工信息
select * from t_mysql_employees where employee_id BETWEEN 100 and 120
3、In
案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
select * from t_mysql_employees where job_id in('IT_PROG','AD_VP','AD_PRES')
3、Is null
案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct from t_mysql_employees where commission_pct is null
select last_name,commission_pct from t_mysql_employees where commission_pct <=> null
4、安全等于 <=>
案例2:查询工资为12000的员工信息
SELECT * FROM t_mysql_employees where salary <=> 12000;
is null 和 <=>的区别
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
四、order by
1、按单个字段排序
案例:按员工表薪资排序
SELECT * FROM t_mysql_employees ORDER BY salary
2、添加筛选条件再排序
案例:查询部门编号>=90的员工信息,并按员工编号降序
SELECT * FROM t_mysql_employees where department_id >=90 ORDER BY employee_id desc
3、按表达式排序
案例:查询员工信息 按年薪降序
SELECT em.salary*12*(1+IFNULL(commission_pct,0)),em.* FROM t_mysql_employees em ORDER BY em.salary*12*(1+IFNULL(commission_pct,0)) desc
4、按别名排序
案例:查询员工信息 按年薪升序
SELECT em.salary*12*(1+IFNULL(commission_pct,0)),em.* FROM t_mysql_employees em ORDER BY em.salary*12*(1+IFNULL(commission_pct,0))
5、按函数排序
案例:查询员工名,并且按名字的长度降序
SELECT COUNT(first_name,last_name),LENGTH(COUNT(first_name,last_name)) FROM t_mysql_employees ORDER BY LENGTH(COUNT(first_name,last_name)) DESC
6、按多个字段排序
案例:查询员工信息,要求先按工资降序,再按employee_id升序
SELECT * FROM t_mysql_employees ORDER BY salary desc,employee_id asc;
7、排序练习
1.查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
select last_name,job_id,salary*12*(1+IFNULL(commission_pct,0)) from t_mysql_employees order by salary*12*(1+IFNULL(commission_pct,0)) DESC , last_name ASC
2.选择工资不在8000到17000的员工的姓名和工资,按工资降序
select last_name,salary from t_mysql_employees where not (salary between 8000 and 17000) ORDER BY salary DESC
3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
select * from t_mysql_employees where email LIKE '%e%' ORDER BY department_id asc,LENGTH(email) desc
五、案例
t_student学生表
t_teacher老师表
t_score成绩表
t_coures 课程表
1、查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数
select a.*,b.score,c.score from t_student a,t_score b,t_score c where a.sid=b.sid and a.sid=c.sid and b.cid='01' and c.cid='02' and b.score>c.score
2、查询同时存在" 01 “课程和” 02 "课程的情况
select a.*,b.cid,c.cid from t_student a,t_score b,t_score c where a.sid=b.sid and a.sid=c.sid and b.cid='01' and c.cid='02'
3、查询存在" 01 “课程但可能不存在” 02 "课程的情况(不存在时显示为 null )
select a.sname,b.cid,c.cid from t_student a,t_score b,t_score c where a.sid=b.sid and a.sid=c.sid and b.cid='01' and c.cid NOT in('2')
4、查询不存在" 01 “课程但存在” 02 "课程的情况
SELECT * FROM t_score a,t_score b where a.cid=b.cid AND a.cid NOT in('1') and b.cid='2'
5、查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
select a.sid,a.sname,AVG(b.score) from t_student a,t_score b where a.sid = b.sid GROUP BY b.sid HAVING AVG(b.score)>=60
6、查询在t_score表存在成绩的学生信息
SELECT DISTINCT(b.sid),a.* FROM t_student a,t_score b WHERE a.sid=b.sid AND b.score is NOT NULL
7、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
select sum(a.score),b.sname,b.sid,COUNT(a.cid) from t_score as a,t_student as b where a.sid= b.sid GROUP BY a.sid
8、查询「李」姓老师的数量
select count(*) from t_teacher where tname like '%李%'
9、查询学过「张三」老师授课的同学的信息
SELECT DISTINCT(a.sid),a.* FROM t_student a,t_score b,t_teacher c WHERE a.sid = b.sid and c.tname='张三'
10、查询没有学全所有课程的同学的信息
select * from t_student where sid in( select sid from t_score GROUP BY sid HAVING count(*)>=3 )
13、检索" 01 "课程分数小于 60,按分数降序排列的学生信息
SELECT a.* FROM t_student a,t_score b where a.sid=b.sid and b.cid='1' and b.score<60 ORDER BY b.score DESC
14、按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
SELECT a.*,AVG(b.score) FROM t_student a,t_score b where a.sid=b.sid GROUP BY b.sid