千锋逆战班,学习MYSQL数据库

学习MySQL数据库的第一天和第二天

主要我们学习了数据库的创建,删除,修改数据库字符集等
然后主要学习了对数据库中数据的查询

下面是sql代码:

#创建一个为compar数据库
CREATE DATABASE compar;
#查询数据库中t_employees表中所有列名
SELECT * FROM t_employees;
#查询表中的制定的列名
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL FROM t_employees;
#查询员工表中所有员工的编号,姓名,年薪(月薪*12),as为每一个列名起了一个别名,对原表没有影响
SELECT EMPLOYEE_ID AS '编号',FIRST_NAME AS '姓',LAST_NAME AS '名',SALARY*12 AS '年薪' FROM t_employees;
#查询员工所有经理的编号,去掉重复的
SELECT DISTINCT MANAGER_ID FROM t_employees;
#查询员工表中算有工资(去掉重复的)
SELECT DISTINCT SALARY FROM t_employees;
#--------------------------------排序-------------------------------------------
#排序 select 列名 from 表名 Order by 排序的列名 Asc/Desc(asc升序,desc降序)
#查询员工的编号,名字,薪资,按照工资进行升序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees ORDER BY SALARY ASC;

#查询员工的编号,名字,薪资,按照姓名进行升序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees ORDER BY FIRST_NAME DESC;

#查询员工的编号,名字,薪资,按照工资进行降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees ORDER BY SALARY DESC;

#查询员工编号,名字,薪资,按照工资进行升序排序,如果工资相等,按照编号降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
ORDER BY SALARY ASC,EMPLOYEE_ID DESC;

#查询员工编号,名字,薪资,按照工资进行升序排序,如果工资相等,按照姓名降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
ORDER BY SALARY ASC,FIRST_NAME DESC;

#--------------------------------------条件查询---------------------------------

#select 列名 from 表名 where 条件
#查询工资为2500的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees WHERE SALARY = 2500;
#查询姓为Steven的
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees WHERE FIRST_NAME = 'Steven';

#查询员工工资大于6000的员工的信息,并且按照工资升序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE SALARY >= 6000 ORDER BY SALARY ASC;

#查询员工工资不等于2500的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE SALARY <> 2500; # !=跟<> 作用一样的

#逻辑判断(and、or、not)

#查询员工工资在6000~10000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
WHERE SALARY >= 6000 AND SALARY <= 10000 ORDER BY SALARY ASC;


#查询工资是10000的或者是9000的员工信息

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE SALARY = 10000 OR SALARY = 9000;


#查询除了工资是10000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
WHERE NOT SALARY = 10000;

# 区间判断(between and)
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
WHERE SALARY BETWEEN 6000 AND 10000;



# NULL值判断(IS NULL、IS NOT NULL)
#IS NUll 是null的 IS NOT NUll 是非空的

##查询出没有经理编号的员工 IS NULL(条件为经理编号为空)
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE MANAGER_ID IS NULL;


#查询出 没有经理编号以外的员工信息

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
WHERE MANAGER_ID IS NOT NULL;#经理编号为非空的


#查询出 没有经理编号以外的员工信息(此处NOT为取反。两个结果)

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
WHERE NOT MANAGER_ID IS NULL;#两个条件,先执行,找出经理编号为空的,然后非经理编号为空(找出编号非空的)



SELECT EMPLOYEE_ID,FIRST_NAME,SALARY,
	CASE
		WHEN salary > 10000 THEN 'A'
		ELSE 'E'
	END
FROM t_employees;






# 枚举查询 IN (值1,值2,值n...)
#查询部门编号为70,80,90的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY,DEPARTMENT_ID FROM t_employees 
WHERE DEPARTMENT_ID IN(70,80,90);

#枚举查询  查询经理编号为 124 和100的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,MANAGER_ID FROM t_employees
WHERE MANAGER_ID IN(124,100);


#模糊查询,查询姓氏以S开头且长度为6的员工信息

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
WHERE FIRST_NAME LIKE 'S_____';

#模糊查询,查询姓氏以S开头任意长度的所有员工信息
SELECT EMPLOYEE_ID,FIRST_NAME FROM t_employees
WHERE FIRST_NAME LIKE 'S%'


#分支结构查询员工信息(编号、名字、薪资、薪资级别<条件表达式>)

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY,
	CASE
		WHEN SALARY >= 10000 THEN 'A'
		WHEN SALARY <10000 AND SALARY >= 8000 THEN 'B'
		WHEN SALARY <8000 AND SALARY >= 6000 THEN 'C'
		ELSE 'E'
	END AS '薪资级别'
FROM t_employees;

#时间查询
#1.当前系统时间
SELECT SYSDATE();
#2.获取当前日期
SELECT CURDATE();
#3.获取当前时间
SELECT CURTIME();
#4.根据指定日期获取的当前为该年第几周
SELECT WEEK(CURDATE());
#5.获取指定日期中的年份
SELECT YEAR(SYSDATE());
#6.获取指定日期中的月份
SELECT MONTH(SYSDATE());

#7.获取指定日期中的天
SELECT DAY(SYSDATE());
#8.获取指定时间中的小时
SELECT HOUR(SYSDATE());
#9.获取指定时间中的分钟
SELECT MINUTE(SYSDATE());
#10.获取指定时间中的秒数
SELECT SECOND(CURTIME());

#11.获取Date1和Date2之间相隔的天数
SELECT DATEDIFF(CURDATE(),'2019-03-26');
#12.在指定日期之上加N天后的日期
SELECT ADDDATE('2020-02-02',5);



#字符串查询
#1.连接将多个字符串连接在一起
SELECT CONCAT('a','b','c','d');
#2.插入替换(下标从1开始)
SELECT INSERT('我和你',2,1,'爱');

#3.将指定字符串转成小写
SELECT LOWER('ABCDEFG');
#4.将指定字符串转化为大写
SELECT UPPER('abcdefg');

#5.截取,从下标5开始截,长度为4的字符串
SELECT SUBSTRING('love you',5,4);

#聚合函数
#1.查询员工一共多少人,假如查的里中某行为null,他不会记录到列中的总行数
SELECT COUNT(EMPLOYEE_ID) FROM t_employees;
SELECT COUNT(MANAGER_ID) FROM t_employees;
#2.查询员工每个月工资的总和
SELECT SUM(SALARY) FROM t_employees;

#3.查询员工每个月工资的平均工资
SELECT AVG(SALARY) FROM t_employees;

#4.查询月薪最高的
SELECT MAX(SALARY) FROM t_employees;

#5.查询月薪最低的
SELECT MIN(SALARY) FROM t_employees;


#分组查询
#查询各部门的总人数
#思路:
#1.先按照部门编号分组(分组依据是:department_id)
#2.再针对各部门的人数进行统计(count),
SELECT DEPARTMENT_ID,COUNT(EMPLOYEE_ID) FROM t_employees
GROUP BY DEPARTMENT_ID;


#查询各部门的平均工资
#思路:
#1.先按照部门编号分组(分组依据是:department_id)
#2.再针对各部门的工资进行平均计算(AVG())
SELECT DEPARTMENT_ID,AVG(SALARY) FROM t_employees
GROUP BY DEPARTMENT_ID;

#查询各个部门、各个岗位的人数

SELECT DEPARTMENT_ID AS '部门',JOB_ID AS '岗位',COUNT(EMPLOYEE_ID) FROM t_employees
GROUP BY DEPARTMENT_ID,JOB_ID; 

#查询各个部门的id、总人数、first_name
#这是一个错误的示范,我们只能查找跟分组规则相关联的列,而员工姓不跟分组规则相关联
SELECT DEPARTMENT_ID,COUNT(EMPLOYEE_ID),FIRST_NAME FROM t_employees
GROUP BY DEPARTMENT_ID;


#分组过滤查询,是对分组后的数据进行过滤

#统计部门编号为60、70、80的部门最高工资
#思路:
#1.确定分组依据  department_id
#2.对分组后的数据进行过滤  过滤规则为 60 70 80部门编号
#3.分组过滤后的数据,做max()函数处理

SELECT DEPARTMENT_ID,MAX(SALARY) FROM t_employees
GROUP BY DEPARTMENT_ID HAVING DEPARTMENT_ID IN(60,70,80);


#限定查询
#查询员工表中前5名员工

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE EMPLOYEE_ID LIMIT 0,5;

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE EMPLOYEE_ID LIMIT 5,5;

SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE EMPLOYEE_ID LIMIT 10,5;

#子查询(作为条件判断)

#思路
#1.先查询到Bruce的工资(一行一列)
SELECT SALARY FROM t_employees
WHERE FIRST_NAME = 'Bruce';
#2.查询大于Bruce工资的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees WHERE SALARY>6000;

#3.将1 、2 整合为一条语句
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE SALARY > (SELECT SALARY FROM t_employees WHERE FIRST_NAME='Bruce');


#子查询(作为枚举查询的条件)
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees 
WHERE SALARY IN(SELECT SALARY FROM t_employees WHERE FIRST_NAME = 'Steven');

#查询名字为King的所在部门内的所有员工信息
SELECT EMPLOYEE_ID,DEPARTMENT_ID,FIRST_NAME,SALARY FROM t_employees
WHERE DEPARTMENT_ID IN(SELECT DEPARTMENT_ID FROM t_employees WHERE last_NAME='King');

#工资高于60部门的所有人的信息
#1.先查60部门的工资
SELECT SALARY FROM t_employees
WHERE DEPARTMENT_ID=60;

#查询高于60部门工资所有人信息(高于所有人,相当于比60部门最高工资高的人)
SELECT EMPLOYEE_ID,SALARY,FIRST_NAME FROM t_employees
WHERE SALARY > ALL
 (SELECT SALARY FROM t_employees WHERE DEPARTMENT_ID =60); 
 
 #查询高于60部门工资所有人信息(高于部分人就相当于比60部门最低工资高的人)

SELECT EMPLOYEE_ID,SALARY,FIRST_NAME FROM t_employees
WHERE SALARY > ANY
 (SELECT SALARY FROM t_employees WHERE DEPARTMENT_ID =60); 


#子查询(作为一张表)

#查询表中部分列的信息,获得工资大于15000的
#思路
#1.先查询部分列的信息作为一张临时表
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees;
#2.将子查询得到的临时表作为外部查询的表,这里的临时表要写个别名(不能带引号的)
SELECT EMPLOYEE_ID,SALARY FROM (SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees) AS temp
WHERE SALARY > 15000;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值