广告
返回顶部
首页 > 资讯 > 数据库 >MySQL入门学习
  • 769
分享到

MySQL入门学习

MySQL入门学习 2015-02-25 14:02:01 769人浏览 才女
摘要

MySQL入门学习

数据库的好处

    1.持久存到本地  
    2.可以实现结构化查询,方便管理

数据库相关概念

    1.DB:数据库,保存一组有组织的数据的融通器  
    2.DBMS:数据库管理系统,又称数据库软件(产品),用于管理DB中的数据    
    3.sql结构化查询语言,用于和DBMS通信的语言

数据库存储数据的特点

    1、将数据放到表中,表再放到库中
	2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
	3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。
	4、表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”
	5、表中的数据是按行存储的,每一行类似于java中的“对象”。

Mysql服务的启动和停止

    方式一:计算机——右击管理——服务
	方式二:通过管理员身份运行
	net start 服务名(启动服务)
	net stop 服务名(停止服务)

mysql服务的登录和退出

    方式一:通过mysql自带的客户端
	只限于root用户

	方式二:通过windows自带的客户端
	登录:
	mysql 【-h主机名 -P端口号 】-u用户名 -p密码

	退出:
	exit或ctrl+C

MySQL的常见命令

    1.查看当前所有的数据库
	show databases;
	
    2.打开指定的库
	use 库名
	
    3.查看当前库的所有表
	show tables;
	
    4.查看其它库的所有表
	show tables from 库名;
	5.创建表
	create table 表名(

		列名 列类型,
		列名 列类型,
		。。。
	);
    6.查看表结构
	desc 表名;


    7.查看服务器的版本
	方式一:登录到mysql服务端
	select version();
	方式二:没有登录到mysql服务端
	mysql --version
	或
	mysql --V

MySQL的语法规范

    1.不区分大小写,但建议关键字大写,表名、列名小写
	2.每条命令最好用分号结尾
	3.每条命令根据需要,可以进行缩进 或换行
	4.注释
		单行注释:#注释文字
		单行注释:-- 注释文字
		多行注释:

SQL的语言分类

`DQL(Data Query Language):数据查询语言
		select 
	DML(Data Manipulate Language):数据操作语言
		insert 、update、delete
	DDL(Data Define Languge):数据定义语言
		create、drop、alter
	TCL(Transaction Control Language):事务控制语言
		commit、rollback

SQL的常见命令

    show databases; 查看所有的数据库
	use 库名; 打开指定 的库
	show tables ; 显示库中的所有表
	show tables from 库名;显示指定库中的所有表
	create table 表名(
		字段名 字段类型,	
		字段名 字段类型
	); 创建表

	desc 表名; 查看指定表的结构
	select * from 表名;显示表中的所有数据

DQL语言的学习

进阶1:基础查询

语法:
	SELECT 要查询的东西
	【FROM 表名】;

	类似于Java中 :System.out.println(要打印的东西);
	特点:
	①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
	② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数

进阶2:条件查询

条件查询:根据条件过滤原始表的数据,查询到想要的数据
	语法:
	select 
		要查询的字段|表达式|常量值|函数
	from 
		表
	where 
		条件 ;

	分类:
	一、条件表达式
		示例:salary>10000
		条件运算符:
		> < >= <= = != <>
	
	二、逻辑表达式
	示例:salary>10000 && salary<20000
	
	逻辑运算符:

		and(&&):两个条件如果同时成立,结果为true,否则为false
		or(||):两个条件只要有一个成立,结果为true,否则为false
		not(!):如果条件成立,则not后为false,否则为true

	三、模糊查询
	示例:last_name like "a%"

进阶3:排序查询

语法:
	select
		要查询的东西
	from
		表
	where 
		条件
	
	order by 排序的字段|表达式|函数|别名 【asc|desc】

进阶4:常见函数

一、单行函数
	1、字符函数
		concat拼接
		substr截取子串
		upper转换成大写
		lower转换成小写
		trim去前后指定的空格和字符
		ltrim去左边空格
		rtrim去右边空格
		replace替换
		lpad左填充
		rpad右填充
		instr返回子串第一次出现的索引
		length 获取字节个数
		
	2、数学函数
		round 四舍五入
		rand 随机数
		floor向下取整
		ceil向上取整
		mod取余
		truncate截断
	3、日期函数
		now当前系统日期+时间
		curdate当前系统日期
		curtime当前系统时间
		str_to_date 将字符转换成日期
		date_fORMat将日期转换成字符
	4、流程控制函数
		if 处理双分支
		case语句 处理多分支
			情况1:处理等值判断
			情况2:处理条件判断
		
	5、其他函数
		version版本
		database当前库
		user当前连接用户



	


二、分组函数


		sum 求和
		max 最大值
		min 最小值
		avg 平均值
		count 计数
	
		特点:
		1、以上五个分组函数都忽略null值,除了count(*)
		2、sum和avg一般用于处理数值型
			max、min、count可以处理任何数据类型
	    3、都可以搭配distinct使用,用于统计去重后的结果
		4、count的参数可以支持:
			字段、*、常量值,一般放1
	
		   建议使用 count(*)

代码笔记

进阶一:基础查询

-- 进阶一:基础查询


-- 1.查询表中的单个字段
select email from employees;

-- 2.查询表中的多个字段
select last_name,first_name from employees;

-- 3.查询表中的所有字段
select * from employees;
 
-- 起别名:①便于理解 ②如果查询的字段有重名的情况,起别名可以解决
	-- 方式一:使用AS
	select email AS 邮箱 from employees;

	-- 方式二:使用空格
	select email 邮箱 from employees;
	
-- 去重
-- 案例:查询员工表中涉及到的所有部门编号
select DISTINCT department_id from employees;


-- 加号的作用  : 只有一个功能  运算符
-- 如果两个操作数都为数值,则做加法运算
select 110 + 110;  
-- 只要一方为字符型,试图将字符数值转换成数值型,如果转换成功,则继续加法运算,如果转换失败,则将字符数值转换成0
select "123" + 123; 
select "Tom" + 123; 
-- 只要其中一方为null ,则结果肯定为null
select null + 10;

-- mysql 中的拼接使用函数 concat
select CONCAT(last_name,first_name) AS 姓名  from employees;

进阶二:条件查询

-- 进阶二:条件查询



-- 按条件表达式查询
 
-- 案例1: 查询工资大于12000的员工信息
select * from employees where salary >12000

-- 案例2:查询部门编号不等于90号的员工名和部门编号
select last_name,department_id from employees where department_id !=90;
select last_name,department_id from employees where department_id <>90;


-- 按逻辑表达式筛选

-- 案例1:查询工资在10000到20000之间的员工名,工资以及奖金
select last_name,salary,commission_pct from employees where salary >=10000  and salary <= 20000;
select last_name,salary,commission_pct from employees where not(salary < 10000 or salary >20000);

-- 案例2:查询部门编号不是在90到110之间或者工资高于15000的员工信息
select * from employees where department_id < 90 or department_id > 110 or salary >15000;
select * from employees where not(department_id >=90 and department_id <=110 and salary <=15000);
select * from employees where  not(department_id >=90 and department_id <=110 ) or salary >15000;


-- 模糊查询
-- 案例1:查询员工名包含字符a的员工信息
select * from employees where last_name like "%a%";

-- 案例2:查询员工名中年第三个字符为n,第五个字符为l的员工名和工资
select last_name,salary from employees where last_name like "__n_l%";

-- 案例3:查询员工名中第二个字符为_的员工名
select * from employees where last_name like "_\_%";  -- 转义字符
select * from employees where last_name like "_@_%" escape "@"; -- 转义关键字  可以是任意字符

-- between and 使用
-- 案例1:插叙员工编号在100 到120之间的员工信息
select * from employees where department_id >=100 and department_id <= 120;
select * from employees where department_id between 100 and 120;

-- in 的使用
-- 案例1:查询员工的工种编号是 IT_PRCG,AD_VP,AD_PRES中的一个员工名和工种编号
select last_name,job_id from employees where job_id ="IT_PRCG" or job_id ="AD_VP" or job_id ="AD_PRES";
select last_name,job_id from employees where job_id in("IT_PRCG","AD_VP","AD_PRES");

-- is null的使用
-- 案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is null;

-- 案例2;查询有奖金的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is not null;

进阶三:排序

-- 进阶三:排序----------------------------------------


-- 案例1; 查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;

-- 案例2:查询部门编号>=90的员工信息,按入职时间的先后顺序排序【添加筛选条件】
select * from employees where department_id >=90  order by hiredate;

-- 案例3:按年薪的高低显示员工的信息【按表达式排序】
select * from employees order by salary * 12 * (IFNULL(commission_pct,0)+1);

-- 案例4:按年薪的高低显示员工的信息和年薪【按别名排序】
select *,salary * 12 * (IFNULL(commission_pct,0)+1) as  年薪 from employees order by 年薪;

-- 案例5:按姓名的长度显示员工的姓和工资【按函数排序】
select length(last_name),first_name,salary from employees order by length(last_name);

-- 案例6:查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
select * from employees order by salary,department_id desc;

进阶四:常见函数

-- 进阶四:常见函数----------------------------------------



-- 单行函数
-- 1.length  获取字节长度
select length("张三123");

-- 2.concat  字符串拼接
select CONCAT(last_name,"_",first_name) 姓名 from employees;

-- 3.upper、lower 大小写转换
select UPPER("tom");
select LOWER("TOM");
-- 实例:将姓变大写,名变小写,然后拼接
select concat(upper(last_name),"_",lower(first_name)) from employees

-- 4.substr[或substring] 字符串截取
-- 截取从指定索引开始处后面所有字符
select substr("张三爱上了李四",3) out_pu; 

-- 截取从指定所有开始指定字符长度的字符
select substr("张三爱上了李四",1,4);

-- 案例:姓名中首字母大写,其它字符小写
select concat(CONCAT(upper(substr(last_name,1,1)),lower(substr(last_name,2))),"_"   ,CONCAT(UPPER(substr(first_name,1,1)),LOWER(substr(first_name,2)))) 姓名 from employees;


-- 5.instr 返回子串第一次出现的索引,如果找不到返回0
 select instr("张三爱上李四","李四");
 

-- 6.trim 去除两边空格
select trim("  aa   张三  aa  ");
select trim("a" from "aaaaaa张aaaaa三aaaaa");

-- 7.lpad 用指定的字符实现左填充指定长度
select lpad("张三",4,"*");
 
 -- 8.rpad 用指定的字符实现右填充指定长度
select rpad("张三",4,"*");
 
--  9.replace 替换
select replace("张三张三爱上了李四","张三","小红");
 
 
-- 数学函数
-- 1.round 四舍五入
select round(1.61);
select round(1.41);

-- 2.ceil 向上取整,返回>=该参数的最小整数
select ceil(1.01);
select ceil(1.0);

-- 3.floor 向下取整,返回<=该参数的最大整数
select floor(1.1);
select floor(2.0);

--  4.truncate 截断
select truncate(1.222,2);

-- 5.mod  取余
select mod(10,3);


-- 日期函数
-- 1.now 返回当前系统日期+时间
select now();
 
--  2.curdate 返回当前系统日期,不包含时间
select curdate();

-- 3.curtime 返回当前时间,不包含日期
select curtime();

-- 4.可以获取指定的不分:年、月、日、小时、分钟、秒
select year(now())  年; 
select month(now()) 月;
select date(now()) 日;
select hour(now())  小时;
select minute(now()) 分钟;
select second(now()) 秒;


-- 5.str_to_date 将字符通过指定的格式转换成日期
select STR_TO_DATE("1998-3-2","%Y-%c-%d") oup_put;


-- 6.date_fomart 将指定日期转换成字符串
select date_format(now(),"%y年%m月%d日");


-- 其它函数
select version();
select database();
select user();




-- 流程控制函数
-- 1.if函数
select if(10>5,"大","小");

-- 案例:
select last_name,commission_pct,if(commission_pct is null ,"没奖金","有奖金") 备注 from employees;


-- 2.case函数的使用一


-- 案例:查询员工的工资要求 
-- 部门号= 30,显示的工资为1.1倍
-- 部门号= 40,显示的工资为1.2倍
-- 部门号= 50,显示的工资为1.3倍
-- 其它部门,显示的工资为元工资

select salary 原工资,department_id, 
case department_id
when 30 then salary * 1.1
when 40 then salary * 1.2
when 50 then salary * 1.3
else salary  
end 新工资
from employees;



-- 2.case函数的使用二

-- 案例:查询员工的工资情况
-- 如果工资>20000,显示A级别
-- 如果工资>15000,显示B级别
-- 如果工资>10000,显示C级别
-- 否则显示D级别
select salary,
case
when salary >20000 then "A"
when salary >15000 then "B"
when salary >10000 then "C"
else "D"
end 工资等级
from employees;



-- 分组函数
-- 分类: sun求和、  avg平均值、   max最大值、  min 最小值 count计算个数
-- 1.简单实用
select sum(salary) from employees;
select avg(salary) from employees;
select max(salary) from employees;
select min(salary) from employees;
select count(salary) from employees;

进阶五:分组查询

-- 进阶五:分组查询----------------------------------------


-- 简单的分组查询
-- 案例1:查询每个工种的最高工资
select MAX(salary),job_id from employees
group by job_id;

-- 案例2:查询每个位置上的部门个数
select count(*), location_id from departments
group by location_id;

-- 案例3:查询邮箱中包含a字符的,每个部门的平均工资
select  avg(salary),department_id from employees
where email like "%a%"
group by department_id;


-- 案例4:查询有奖金的每个领导手下员工的最高工资
select max(salary),manager_id from employees
where commission_pct is not null
group by manager_id;

-- 案例5:哪个部门的员工个数>2
select count(*),department_id from employees
group by department_id
having count(*)>2;

-- 案例6:查询每个工种有奖金的员工最高工资>12000的工种编号和最高工资
select max(salary),job_id from  employees
where commission_pct is not null
group by job_id
having max(salary) >12000;

-- 案例7:查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资
 select manager_id ,min(salary) from employees
 where manager_id >102
 group by manager_id
 having min(salary) > 5000;

进阶六:连接查询

-- 进阶六:连接查询----------------------------------------
 
 
--  一、sql92标准--------------
--  1、等值连接

 
--  案例1:查询员工名和对应的部门名
 
 select last_name,department_name from employees ,departments 
 where employees.employee_id = departments.department_id;
 
 
--  为表起别名: ①提高了语句的简介度 ②区分多个重名字段
-- 		注意:如果为表起了别名,则查询的字段就补鞥呢使用原来的表名去限定
--  案例2:查询员工名、工种号、工种名
select last_name,e.job_id,job_title from employees e,jobs j
where e.job_id = j.job_id;

 
--  案例3:查询有奖金的员工名,部门名【加筛选】
select last_name ,e.commission_pct,d.department_name from  employees e,departments d
where e.department_id = e.department_id  
and e.commission_pct is not null;

-- 案例4:查询城市名中第二个字符为o的部门名称和城市名【加筛选】

select d.department_name,l.city from departments d, locations l
where d.location_id = l.location_id
and l.city like "_o%";

-- 案例5:查询每个城市的部门个数【加分组】
select count(*),city from departments d,locations l
where d.location_id = l.location_id
GROUP BY city;

-- 案例6:查询有奖金的每个部门的部门名和部门的领导编号和该部门的低工资
select d.department_name,d.manager_id,min(salary) from employees e,departments d
where e.department_id = d.department_id
and commission_pct is not null
GROUP BY d.department_name,d.manager_id;
 
-- 案例7:查询每个工种的工种名和员工的个数,并按员工个数降序
select count(*),j.job_title from employees e,jobs j
where e.job_id = j.job_id
group by j.job_title
order by count(*) desc;


-- 三表联查
-- 案例:查询员工名、部门名和所在的城市
select e.last_name,d.department_name,l.city from employees e,departments d,locations l
where e.employee_id = d.department_id and d.location_id =l.location_id;



-- 二、非等值连接
-- 案例1:查询员工的工资和工资级别
select salary,grade_level from employees e,job_grades j
where salary between j.lowest_sal and j.highest_sal;


-- 三、自连接
-- 案例:查询员工名和上级的名称																																								-- as 员工表			-- as 领导表
select e.last_name as 员工名,e.manager_id as 上级编号,d.employee_id as 上级员工编号,d.last_name  as 上级名称 from employees e ,employees d 
where e.manager_id = d.employee_id;



-- 二、sql99语法


-- 等值连接
-- 案例1;查询员工名、部门名(调换位置)
select last_name,department_name from employees e
inner join departments d
on e.department_id = d.department_id;

-- 案例2:查询名字包含e的员工名和工种名(筛选)
select last_name ,job_title from employees e
inner join jobs j
on e.job_id = j.job_id;
where e.last_name like "%e%";

-- 案例3:查询部门个数>3的城市名和部门个数(分组+筛选)
select count(*),city from departments d
inner join locations l
on d.location_id = l.location_id
group by city
having count(*) >3;

-- 案例4:查询那个部门的部门员工个数>3的部门名和员工个数,并按个数降序(排序)
select count(*) ,department_name from employees e
inner join departments d
on e.department_id = d.department_id
GROUP BY d.department_name
having count(*) >3
order by count(*) desc;

-- 案例5:查询员工名、部门名、工种名,并按部门名降序

select last_name,department_name,job_title from employees e
inner join departments d on e.department_id = d.department_id
inner join jobs j on e.job_id = j.job_id
order by d.department_name desc;


-- 二、非等值连接
-- 案例1:查询员工的工资级别
select salary,grade_level from employees e
inner join job_grades j
on e.salary between j.lowest_sal and j.highest_sal;

-- 案例2:查询工资级别的个数>20的个数,并按工资级别降序
select count(*),salary,grade_level from  employees e
inner join job_grades j
on e.salary between j.lowest_sal and j.highest_sal
group by grade_level
having count(*) >20
order by grade_level desc;


-- 三、自连接
-- 案例:查询员工的名字、上级的名字
select e.last_name 员工名字,e.manager_id as 上级编号,m.employee_id as 上级员工编号,m.last_name as 上级名字 from employees e
inner join employees m
on e.manager_id =m.employee_id;



-- 四、外连接




-- 案例:查询哪个部门没有员工

-- 左外
select d.department_name,e.employee_id from departments d
left outer join employees e
on d.department_id =e.department_id
where e.employee_id is null;

-- 右外
select d.department_name,e.employee_id from  employees e
right outer join departments d
on e.department_id =d.department_id
where e.employee_id is null;

进阶7:子查询

-- 进阶7:子查询------------------------------------------



-- 一、where或having后面



-- 案例1:谁的工资比Abel高?

-- ①查询Abel的工资
select salary from employees
where last_name ="Abel";

-- ②查询员工的工资,满足salary①结果
select * from employees
where salary >(select salary from employees
where last_name ="Abel");

-- 案例2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id 和工资

-- ①查询job_id与141号员工相同
select job_id from employees where employee_id=141;

-- ②查询salary比143号员工多的员工
select salary from employees where employee_id =143;

-- ③查询员工的 姓名,job_id 和工资 要求job_id = ① 并且salary>②
select last_name,job_id,salary from employees
where job_id =(select job_id from employees where employee_id=141) and salary >(select salary from employees where employee_id =143);



-- 案例三:返回公司工资最少的员工的last_name,job_id和salary

-- ①查询公司的最低工资
select min(salary) from employees;

-- ②查询工资=①的员工的last_name,job_id和salary
select last_name,job_id,salary from employees
where salary = (
select min(salary) from employees);



-- 案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资

-- ①查询50号部门最低工资
select min(salary) from employees 
where department_id = 50;

-- ②查询每个部门的最低工资
select min(salary),department_id from employees
group by department_id

-- ③筛选② 最低salary >①50号部门最低salary
select min(salary),department_id from employees
group by department_id
having min(salary) >(select min(salary) from employees 
where department_id = 50);

-- 列子查询(多行子查询)
-- 案例1;返回location_id是1400或1700的部门中的所有员工姓名

-- ①查询location_id是1400或1700的部门编号
select distinct department_id from departments
where location_id in(1400,1700);

-- ②查询员工姓名 要是部门编号是①列表中的某一个
select last_name from employees
where department_id in(select distinct department_id from departments
where location_id in(1400,1700));


-- 案列2:返回其它工种中比job_id为‘IT_PROG’部门任意工资低的员工的;工号、姓名、job_id、salary

-- ①查询job_id为‘IT_PROG’部门任意工资
select distinct salary from employees
where job_id ="IT_PROG";

-- ②查询员工的;工号、姓名、job_id、salary, salary<①的任意一个
select last_name,job_id,salary from employees
where salary < any(select distinct salary from employees
where job_id ="IT_PROG")   and  job_id <> "IT_PROG";

-- 案例3:返回其它工种中比job_id为‘IT_PROG’部门所有工资低的员工的;工号、姓名、job_id、salary

select last_name,job_id,salary from employees
where salary < all(select distinct salary from employees
where job_id ="IT_PROG")   and  job_id <> "IT_PROG";


-- 二、select后面
-- 案例1;查询每个部门的员工个数
select d.* ,(
select count(*) from employees e
where e.department_id = d.department_id)
from departments d;


-- 案例2;查询员工号=102的部门
select (select department_name from departments d
inner join employees e
on d.department_id =e.department_id
where e.employee_id =102) as 部门名;


-- 三、from后面

-- 案例:查询每个部门的平均工资的工资等级
select em.*,j.grade_level 
from (
			select avg(salary) as ag,department_id 
			from employees
				group by department_id) as em
inner join  job_grades j
on em.ag between j.lowest_sal and j.highest_sal;


-- 四、exists后面(相关子查询)


select exists(select employee_id from employees);


-- 子查询经典测试题
-- 查询工资最低的员工信息:last_name,salary
-- ①查询最低工资
select min(salary) from employees;
-- ②查询员工的信息:last_name,salary,并且salary=①
select last_name ,salary from employees
where salary =(select min(salary) from employees);


-- 查询平均工资最低的部门信息

#方式一
-- ①查询各部门的平均工资
 select avg(salary),department_id from employees
 group by department_id;

-- ②查询①结果上的最低平均工资
select min(ag) from 
( select avg(salary) as ag,department_id from employees 
 group by department_id) as emps;
 
--  ③查询各部门的平均工资,并且salary =②  得到department_id
 select avg(salary),department_id from employees
 group by department_id
 having avg(salary) = (select min(ag) from 
( select avg(salary) as ag,department_id from employees 
 group by department_id) as emps);
 
--  ④根据③得到的部门最低平均工资和id  关联表查询部门信息
 select * from departments
 where department_id = ( select department_id from employees
 group by department_id
 having avg(salary) = (select min(ag) from 
( select avg(salary) as ag,department_id from employees 
 group by department_id) as emps));
 
 
 
 #方式二
 -- ①查询各部门的平均工资并对salary进行升序,然后用limit查询第一条
 select avg(salary),department_id from employees
 group by department_id
 order by avg(salary)
 limit 1;
 
--  ②根据①查询部门信息
 select * from departments
 where department_id =(select department_id from employees
 group by department_id
 order by avg(salary)
 limit 1);

-- 查询平均工资最低的部门信息和该部门的平均工资
 -- ①查询各部门的平均工资并对salary进行升序,然后用limit查询第一条
 select avg(salary),department_id from employees
 group by department_id
 order by avg(salary)
 limit 1;
 
 
 --  ②根据①查询部门信息
 select * from departments
 where department_id =(select department_id from employees
 group by department_id
 order by avg(salary)
 limit 1);
 
--  ③在②的基础上把①当做一个字段查询
 select d.*,( select avg(salary)from employees
 group by department_id
 order by avg(salary)
 limit 1) as 平均工资  from departments d
 where department_id =(select department_id from employees
 group by department_id
 order by avg(salary)
 limit 1);

-- 查询平均工资最高的job信息
-- ①查询最高的平均工资
 select avg(salary),job_id from employees
 group by job_id
 order by avg(salary) desc
 limit 1;
 
--  ②查询job信息  job_id = ①的job_id
select * from jobs j
where j.job_id =( select job_id from employees
 group by job_id
 order by avg(salary) desc
 limit 1);
-- 查询平均工资高于公司平均的部门有哪些
-- ①查询部门的平均工资
 select avg(salary),department_id from employees
 group by department_id;
 
--  ②查询公司的平均工资
select avg(salary) from employees;

-- ③筛选①的结果集,满足平局工资>②
 select avg(salary),department_id from employees
 group by department_id
 having avg(salary) > (select avg(salary) from employees);

-- 查询出公司所有manager的详细信息
-- ①查询所有的manager_id
select distinct manager_id  from employees;

-- ②查询详细信息,满足manager_id=①
select * from employees
where manager_id =any(select distinct manager_id  from employees);

-- 各个部门中 最高工资中最低的那个部门的最低工资是多少 
-- 方式一
select MAX(salary),department_id from employees e
group by department_id
order by  MAX(salary) 
limit 1;

-- 查询平均工资最高的部门的manager的详细信息:last_name,department_id,email,salary
-- 方式一;
select  avg(salary),e.* from  employees e
group by department_id
order by avg(salary) desc
limit 1;

进阶8:分页查询

-- 进阶8:分页查询----------------------------------


-- 案例1:查询前五条员工信息
select * from employees
limit 0,5;

select * from employees
limit 5;


-- 案例2:查询第11条---第25条
select * from employees
limit 10,15;


-- 案例3:有奖金的员工信息,并且工资较高的前10名显示出来
select * from employees
where commission_pct is not null
limit 10;

进阶9:联合查询

-- 进阶9:联合查询--------------------------------------



-- 引入案例:查询部门编号>90或邮箱包含a的员工信息
select * from employees
where department_id >90 or email like "%a%";


select * from employees where department_id >90
uNIOn
select * from employees where  email like "%a%";

进阶10:DML语言





-- 一、插入语句


-- 1.插入的值类型要与列的类型一致或兼容
desc beauty;
select * from beauty;
insert into beauty(id,`name`,sex,borndate,phone,photo,boyfriend_id)
values(13,"张三","男","1992-12-12","11111111",null,1);

-- 2.不可以为null的列必须插入值,可以为null的列如何插入值?
desc beauty;
-- 方式一;
insert into beauty(id,`name`,sex,borndate,phone,photo,boyfriend_id)
values(15,"王五","男","1992-12-12","11111111",null,1);


-- 方式二:语序为空的字段可以不加
select * from beauty;
insert into beauty(id,`name`,sex,borndate,phone,boyfriend_id)
values(14,"李四","女","1997-12-12","11111111",2);

-- 3.列的顺序是否可以调换? 可以
insert into beauty(`name`,sex,id,phone) values("赵六","男",16,"120");

-- 4.列数和个数必须一致
insert into beauty(`name`,sex,id,phone) values("李七","男",17);
-- 5.可以省略列名,默认所有列,而且列的顺序和表的顺序一致
insert into beauty values(18,"张三","男","1992-12-12","11111111",null,1);


-- 方式二;

insert into beauty
set id =19,`name` ="小红",phone="119";

-- 两种方式比较:

-- 1.方式一支持插入多行,方式二不支持
insert into beauty 
values(21,"张三","男","1992-12-12","11111111",null,1),
(22,"张三","男","1992-12-12","11111111",null,1),
(23,"张三","男","1992-12-12","11111111",null,1);


-- 2.方式一支持子查询,方式二不支持
inser into beauty(id,`name`,phone)
select id,boyName,"110" from boys
where id <3;  -- 执行不成功原有 两张表有id重复


-- 二、修改语句


-- 案例1:修改beauty表中姓张的电话为"123";
select * from beauty;
update beauty
set phone="119"
where  `name` like "张%";
-- 案例2:修改boys表中的id号为2的名称为张飞,魅力值10;
update boys
set boyName ="张飞",userCP=10
where id =2;


-- 修改多表记录
-- 案例1:修改张无忌的女朋友的手机号为114
update boys bo
inner join beauty be
on bo.id=be.boyfriend_id
set phone="114"
where bo.boyName="张无忌";

-- 案例2:修改没有男朋友的女神的男朋友编号都为2
select * from beauty;

update beauty be
left join boys bo
on be.boyfriend_id =bo.id
set be.boyfriend_id=2
where be.id is null;



-- 三、删除语句


-- 单表的删除
-- 案例:删除手机号以9结尾的女神信息
delete from beauty
where phone like "%9";



-- 多表的删除
-- 案例:删除张无忌的女朋友的信息
delete be from beauty be
inner join boys bo
on be.boyfriend_id =bo.id




-- delete 和 truncate比较


进阶11:DDL语言

-- DDL  


-- 一、库的管理
-- 1.库的创建

-- 案例:创建库books;
create database if not exists books ;

-- 库的修改
alter database books character set gbk;


-- 库的删除
drop database if exists books;


-- 
-- 二、表的管理
-- 1、表的创建★



-- 案例:创建book表
create table book(
				id int,  #编号
				bName varchar(20), #书名
				price double,  #价格
				anthorId int,  #作者id
				publiishDate datetime #出版日期
);
desc bool;

-- 案例:创建表author
create table author(
				it int,
				au_name varchar(20),
				nation varchar(20)
);



-- 2.表的修改


-- ①修改列名
alter table book change column publiishDate pubDate  datetime;

-- ②修改列的类型或约束
alter table book modify column pubDate  double;

-- ③添加新列
alter table book add column annual double;

-- ④删除列
alter table book drop column annual;

-- ⑤修改表名
alter table author rename to book_another;


-- 3.表的删除
drop table book_another;
show tables;



-- 4.表的复制

-- 1.只复制表的结构
create table copy1 like employees;

-- 2.复制表的结构和数据
create table copy2
select * from employees;

select * from copy2;


-- 3.只复制部分数据
create table copy3
select * from employees
 limit 3;
 
 
 

常见的数据类型

-- 常见的数据类型


-- 一、整型


创建约束

-- 常见约束

TCL(事务控制语言)

-- TCL



drop table if exists account;

create table account(
				id int primary key auto_increment,
				username varchar(20),
				balance double
);

insert into account(username,balance)
values("张三",1000),("李四",1000);


-- 简单演示事务的使用步骤
-- 开启事务
set autocommit=0;
start transaction; -- 可选

-- 编写一组事务的语句
update account set balance="100" where username="张三";
update account set balance="1100" where username="李四";

-- 结束事务
rollback; -- 回滚

commit; -- 提交


select * from account;



	
	

视图

	
	
-- 视图

-- 一、创建视图



-- 1.查询姓名中包含a字符的员工姓名、部门名和工种信息
-- ①创建
create view myv1
as
select last_name,department_name,job_title from employees e
inner join departments d on e.department_id=d.department_id
inner join jobs j on e.job_id=j.job_id;

-- ②使用
select * from myv1 where last_name like "%a%";



-- 2.查询各部门的平均工资级别
-- ①创建视图查看每个部门的平均工资
create view myv2
as
select avg(salary) ag ,department_id from employees
group by department_id;

-- ②使用
select myv2.ag,g.grade_level from myv2
inner join job_grades g
on ag between g.lowest_sal and g.highest_sal;



-- 二、视图的修改
-- 方式一


create or replace view myv3
as
select avg(salary),job_id from employees
group by job_id;



-- 方式二;

alter view myv3
as
select * from employees;

select * from myv3;


-- 三、删除视图

drop view myv1,myv2;


-- 四、查看视图
desc myv3;
show create view myv3;

存储过程

-- 存储过程



-- 1.空参列表
-- 案例:插入到 admin 表中五条记录
DELIMITER $
create procedure myp1()
begin 
insert into jobs values("1111","11111",1111,1111),
("2222","2222",222,112211),
("3333","333",333,333);
end $


-- 调用
call myp1() $





-- 2.创建带in模式参数的存储过程


create procedure myp2(in beautyName  varchar(20))
begin 
				select bo.* from boys bo
				right join beauty b on bo.id=b.boyfriend_id
				where b.`name`=beautyName;
end $


-- 调用
call myp2("柳岩")

函数

-- 函数





-- 1、无参有返回
-- 案例:返回公司的员工个数
CREATE FUNCTION myf1() returns int
BEGIN
    declare c int default 0;  -- 定义局部变量
		select count(*) into c  -- 赋值
		from employees;
		return c;

END

-- 调用函数
select myf1()



-- 2.有参返回
-- 案例:根据员工名,返回他的工资

create function myf2(emoName varchar(20)) returns double 
begin
			set @sal=0; -- 定义用户变量
			select salary into  @sal  -- 赋值
			from employees
			where last_name =emoName;
			
			return @sal;
			
end


-- 调用函数
select myf2("kochhar")
您可能感兴趣的文档:

--结束END--

本文标题: MySQL入门学习

本文链接: https://www.lsjlt.com/news/8341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL入门学习
    ...
    99+
    2015-02-25
    MySQL入门学习
  • python入门学习
    首先在官网下载好python3.6及以上的版本,根据自己的系统选择:没有显示64位的就是32位的安装包,选择蓝线的能够直接打开 在控制台输入python,配置成功的图片如下: 从IDLE打开python输入指令 print("I lo...
    99+
    2023-01-31
    入门 python
  • Node.js学习入门
    开始之前,安利一本正在看的书《站在两个世界的边缘》,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间。OK,有兴趣的可以看一看。 node.js如标题一样,我也是刚开始接触,大家一起学习,有不当的地方...
    99+
    2022-06-04
    入门 Node js
  • Mysql学习笔记2--使用入门
    ---创建数据库kakaxi mysql> create database kakaxi; Query OK, 1 row affected (0.02 sec) ---要知道系统中有哪些数据库,可...
    99+
    2022-10-18
  • Oracle入门学习三
    上一篇:Oracle入门学习二 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=26 字符串函数:length、upper、lower、initcap、 concat、instr...
    99+
    2021-08-20
    Oracle入门学习三
  • Oracle入门学习五
    学习视频: https://www.bilibili.com/video/BV1tJ411r7ECp=35 数据的完整性:保证插入表格的数据必须正确。包括实体完整性、区域完整性、引用完整性、自定义完整性。 约束:约束的作用是为了保...
    99+
    2022-04-01
    Oracle入门学习五
  • Oracle入门学习六
    事务:把一组操作看做一个工作单元,要么都执行,要么都不执行。dml操作才有事务,查询没有事务。 开始事务:从上一次的事务结束之后,从第一次dml操作,就自动开启了事务 提交事务:commit 回滚事务:rollback cr...
    99+
    2021-12-10
    Oracle入门学习六
  • Oracle入门学习一
    oracle的安装,用户授权,表格操作,数据类型,ddl表格,dml数据。 下一篇:Oracle入门学习二 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=15 安装教程附带...
    99+
    2018-09-30
    Oracle入门学习一
  • Oracle入门学习二
    上一篇:Oracle入门学习一 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=15 算术运算符:+ - * / 逻辑运算符:and or not 比较运算符:“=”、“”、“=...
    99+
    2014-07-13
    Oracle入门学习二
  • Oracle入门学习四
    上一篇:Oracle入门学习三 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=35 Oracle表连接:内连接、外连接。外连接分左连接、右连接。 多表查询时,如果表之间没有条件...
    99+
    2017-05-24
    Oracle入门学习四
  • Django 入门学习(3)
    在例4的基础上,我希望直接保存数据到数据库中。 Django自带了一个sqlite的数据库,已经配置好了 可以直接使用。使用方式和sqlalchemy类似,相当于一个内置的ORM框架。settings.py 默认已经绑定了sqlite3DA...
    99+
    2023-01-31
    入门 Django
  • Python入门学习(六)
    在熟悉了Python中常用的一些内置函数, 那接下来我们定义一个自己的函数吧 def add(x, y): return x + y 函数 函数语法 def functonname(parameters): ... ...
    99+
    2023-01-31
    入门 Python
  • MySQL入门学习之——MySQL错误解决汇总
    以下都是工作中使用MySQL过程中遇到的一些错误,特记录之。 错误1:在执行mysql时 提示如下错误: ERROR 1580 (HY000) at line 1: You cannot 'DROP...
    99+
    2022-10-18
  • menuconfig与Kconfig入门学习
    概述 menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。 menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行make menuconfig命令从而打开...
    99+
    2023-09-13
    学习 linux 服务器
  • 【Java】学习《入门偏》(2)
    ⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言...
    99+
    2023-10-21
    java 学习 开发语言 后端
  • PyTorch 深度学习入门
    💂 个人网站:【 海拥】【萌怪大冒险】【2048】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的...
    99+
    2023-09-25
    pytorch 深度学习 python
  • CTFAWD入门学习手册
    目录引文站点部署dump源码数据库备份修改密码关闭不必要端口部署WAF攻击(ATTACK)弱口令自带后门nmapWEB攻击写入木马bash反弹shell不死马提交脚本防御(DEFEN...
    99+
    2022-11-13
    CTF AWD入门手册 CTF AWD
  • scrapy入门学习(原理)
    什么是网络爬虫网络爬虫又称网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。如果有兴趣可查看百度百科网络爬虫网络蜘蛛(web spider)也叫网络爬虫,是一种'自动化浏览网络'的程序,或者说是...
    99+
    2023-01-30
    入门 原理 scrapy
  • Oracle(PLSQL)入门学习七
    学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=74 设计数据库步骤: 良好的数据库设计:节省空间,数据完整,方便开发。 步骤:1、收集信息 2、标识实体 3、标识实体属性 4、...
    99+
    2017-10-20
    Oracle(PLSQL)入门学习七
  • java入门学习之路
    java是面向对象的编程,个人觉得记忆比较重要。第一阶段java基础部分unix开发环境熟练掌握开发中常用的操作系统linux的安装及使用:掌握文件系统、网络、用户管理方法:能熟练使用vi和vim进行文件编...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作