MySQL数据库学习笔记 2020.9.14持续更新

数据库基础

概念

  • 数据库管理系统DBMS(Database Manegement System)
  • 结构化查询语言SQL(Structure Query Language)
  • 数据库管理员(Database Administrator)

特点

  1. 数据->表->数据库
  2. 1个数据库-n个表
  3. 1个表-n个字段(属性)【每一列】
  4. 1个表-n个对象【每一行】

DBMS

  • 基于共享文件系统的DBMS(Access)
  • 基于客户机——服务器的DBMS(MySQL、Oracle、SqlServer)【C/S架构(服务端-客户端)】

MySQL

MySQL配置文件

"E:\MySQL\my.ini"

默认端口号为3306

dos操作(管理员运行cmd.exe)

dos指令

myslq --version查看mysql版本(未登录)

net stop mysql停止

net start mysql启动

mysql -h localhost -P 3306 -u root -p完整登录(-u root为用户名 -p为密码隐式)

mysql -u root -proot简写登录(-proot为密码显示)

exit退出登录

dos快捷键

Ctrl+C退出登录

MySQL操作

MySQL语法规范

  1. 不区分大小写,建议关键字大写,表名、列名小写

  2. 每条命令最好用分号;结尾

  3. 每条命令根据需要,可以进行缩进,或换行

  4. 注释

    #单行注释
    -- 注释文字(有空格)
    /*	多
    	行
    	注
    	释*/
    

MySQL指令(每条语句分号;结尾)

select version();查看mysql版本(已登录)

show databases展示全部数据库
在这里插入图片描述

use 库名X进入X库

show tables展示所在库内的全部表(已经进入某库)
在这里插入图片描述

show tables from展示某库内全部表(未进入某库)

在这里插入图片描述

select database()展示目前所在库(使用函数)

在这里插入图片描述

#在当前库内创建表
mysql> create table stuinfo(
    -> id int,
    -> name varchar(20)); 

desc 表名Y展示Y表结构

在这里插入图片描述

SQL

SQL(Structure Query Language)结构化查询语言

`NAME`和NAME区别关键字

DQL

DQL(Data Query Language)数据查询语言

#建议每次新建查询时,打开库
use 库名;
use myemployees;

特点

  1. 查询列表可以是:表中的字段、常量值、表达式、函数
  2. 查询的结果是一个虚拟的表格

基础查询

select 查询列表
from 表名;

---------------------------------------------

#1.查询表中单个字段
SELECT
	first_name 
FROM
	employees;
	
#2.查询表中多个字段
SELECT
	first_name,
	last_name,
	email 
FROM
	employees;
	
#3.查询表中的所有字段
SELECT
	* 
FROM
	employees;

#4.查询常量值
SELECT 100;
SELECT 'john';#字符串要加单引号
	
#5.查询表达式
SELECT 100 % 98;#取余
	
#6.查询函数
SELECT version();#查询MySQL版本号

#7.取别名
/*
①便于理解
②联合查询,区分重名
*/
select 100/33 as 结果1; #用as取别名
select 100%98 结果2; #用空格直接取别名

select salary as "out put" from employees;#out是关键字,别名需加引号

#8.去重distinct
#eg:查询员工表中涉及到的所有的部门编号
select distinct department_id from employees;

#9.+加号的作用
#eg:查询员工的姓名,性和名连接成一个字段,并显示为姓名
/*
java中的+加号作用:①运算符②连接字符串
MySQL中的+加号作用:①只能当运算符
*/
SELECT
	concat( last_name, first_name ) AS 姓名 
FROM
	employees;#正确!!!!
/*
select last_name + first_name as 姓名 from employees; #错误!!!!
select 100+90; #=190,都为数值,则做加法运算
select '100'+90; #=190,只要其中一方为字符型,则试图转换成数值              	  #如果转换成功,则继续做加法运算
select 'john'+90; #如果转换失败,则转换为0
select null+90; #如果有一方为null,则结果一定为null
*/

#10. IFNULL(expr1,expr2)  参数1为可能为null的值,参数2为null时所替代的值
select IFNULL(commission_pct,0) as 奖金率 from employees;

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

条件查询

select 
		查询列表	#第三步
from
		表名	#第一步
where
		筛选条件;	#第二步
一、按条件表达式筛选

条件运算符:> < = != <> >= <=

!=和<>意思是不等于

# 一、按条件表达式筛选
#案例1:查询工资>12000的员工信息
SELECT
	* 
FROM
	employees 
WHERE
	salary > 12000;
	
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
	last_name,
	first_name,
	department_id 
FROM
	employees 
WHERE
	department_id <> 90;
二、按逻辑表达式筛选

逻辑运算符:&& || !
and or not

	
# 二、按逻辑表达式筛选
#案例一:查询工资在10000到20000之间的员工名、工资以及奖金
SELECT
	last_name,
	first_name,
	salary,
	commission_pct 
FROM
	employees 
WHERE
	salary >= 10000 && salary <= 20000;

#案例二:查询部门编号不在90到110之间,或者工资高于15000的员工信息
SELECT 
	* 
FROM 
	employees 
WHERE 
NOT ( department_id >= 90 AND department_id <= 110 )OR salary > 15000;
三、模糊查询

like,between and,in,is null,is not null

  • LIKE

    特点:①一般与通配符搭配

    ​ 通配符:%任意多个字符,包含0个字符

    ​ _任意单个字符

    #1.like
    #案例一:查询员工名中包含字符a的员工信息
    select
    	*
    from
    	employees
    where
    	last_name like '%a%';
    	
    #案例二:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
    SELECT
    	first_name,
    	last_name,
    	salary 
    FROM
    	employees 
    WHERE
    	first_name LIKE '__e_a%';
    	
    #案例三:查询员工名中第二个字符为_下划线的员工名
    SELECT
    	last_name 
    FROM
    	employees 
    WHERE
    	last_name LIKE '_\_%';  #默认\反斜杠为转义符
    WHERE
    	last_name LIKE '_$_%' ESCAPE '$';  #ESCAPE自定义转义符
    

    在这里插入图片描述在这里插入图片描述

  • BETWEEN AND和NOT BETWEEN AND

    特点:①使用between and 可以提高语句的简介度

    ②包含临界值

    ③从小到大,不能颠倒

    #案例:查询员工编号在100到120之间的员工信息
    SELECT
    	* 
    FROM
    	employees 
    WHERE
    	employee_id BETWEEN 100 AND 120;
    

    在这里插入图片描述

  • IN

    含义:用于判断某字段的值是否属于in列表中的某一项

    特点:①使用in提高语句的简介度

    ②in列表的值类型必须统一或兼容

    ③不支持通配符’AD_%’

    #案例:查询员工的工种编号是 IT_PROG,AD_VP,AD_PRES 中的一个员工名和工种编号
    SELECT
    	last_name,
    	job_id 
    FROM
    	employees 
    WHERE
    	job_id IN ('IT_PROG','AD_VP','AD_PRES');
    WHERE
    	job_id='IT_PROG'OR job_id='AD_VP' OR job_id='AD_PRES';#和等于号完全等价
    
  • IS NULL和IS NOT NULL

    等号=或<>不能用于判断null值

    is null和is not null仅仅用于判断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;
    
  • 安全等于<=>

    既可以判断null值,也可以判断普通数值,可读性较低

    #案例1:查询没有奖金的员工名和奖金率
    SELECT
    	last_name,
    	commission_pct 
    FROM
    	employees
    WHERE
    	commission_pct <=> NULL;
    	
    #案例2:查询工资为12000的员工名和奖金率和工资
    SELECT
    	last_name,
    	commission_pct,
    	salary
    FROM
    	employees
    WHERE
    	salary <=> 12000;
    

排序查询

特点:①asc是升序,desc是降序,默认asc升序
②order by子句中可以支持单个字段、多个字段、表达式、函数、别名
③order by子句一般是放在查询语句的最后面,但limit子句除外

select 查询列表		#第三步
from#第一步where 筛选条件】	#第二步
order by 排序列表 【asc默认升序/desc】升序/降序	#第四步
----------------------------------------------------
#案例1:查询员工信息,按从高到低、从低到高排序
select * from employees order by salary asc;#升序
select * from employees order by salary; #默认asc升序
select * from employees order by salary desc;#降序

#案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序
select * from employees where department_id >= 90 order by hiredate asc;

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

#案例4:按姓名的长度显示员工的姓名和工资【按函数排序】
select LENGTH(last_name) 字节长度,last_name,salary
from employees
order by LENGTH(last_name) asc;

#案例5:查询员工信息,要求先按工资排序,再按员工编号排序【多条件排序】
select *
from employees
order by salary asc,employee_id desc;#工资升序,编号降序

在这里插入图片描述

常见函数

功能:类似java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名

好处:①隐藏了实现细节 ②提高代码的重用性

特点:①叫什么(函数名)
②干什么(函数功能)

分类:①单行函数:concat,length,ifnull等
②分组函数(统计函数,聚合函数,组函数):做统计使用,传入一组值

#调用方法
select 函数名(实参列表);from 表】;
一、单行函数
字符函数
#1.length获取字节长度
SELECT length( 'john' );#字母一字节,返回4
SELECT length( '鸭梨亚' );#汉字三字节,返回9

#2.concat拼接字符串
select concat (last_name,'_',first_name) as 姓名 from employees;

#3.upper,lower大小写
select concat(upper(last_name),lower(first_name)) 姓名 from employees;

#4.substr,substring截取字符
#注意:SQL里索引从1开始,不是0
select substr('你好,世界!',4);
select substr('你好,世界!',1,2);

#案例:姓名中首字符大写,其他字符小写然后用拼接,显示出来
select concat(upper(substr(last_name,1,1)),lower(substr(first_name,2)))
as out_put
from employees;

#5.instr返回子串第一次出现的起始索引,没有则返回0
select instr('张三爱上了李四','李四')as out_put;#返回6
select instr('张三爱上了李四','王五')as out_put;#返回0

#6.trim去掉前后空格
select trim('   我爱你   ')as out_put;#返回我爱你

#7.lpad用指定的字符实现left左填充
select lpad('王五',10,'a')as out_put;#返回aaaaaaaa王五

#8.rpad用指定的字符实现left左填充
select rpad('张三',5,'b')as out_put;#返回张三bbb

#9.replace全部替换
select replace('李四爱上了赵六赵六赵六','赵六','王五')as put_out;#李四爱上了王五王五王五
数学函数
##1.round 四舍五入,默认取整
select(round(1.456));#返回1
select(round(1.456,2));返回1.46

#2.ceil 向上取整
select ceil(1.001);#返回2
select ceil(1.0);#返回1
select ceil(-1.2);#返回-1

#3.floot 向下取整
select floor(1.99);#返回1
select floor(1.00);#返回1
select floor(-1.99);#返回-2

#4.truncate截断
select truncate(1.456,2);#返回1.45

#5.mod取模   本质是:a-a/b*b
select mod(10,3);#返回1,等价于10%3
select 10%3;#返回1
select mod(-10,3);#返回-1
select mod(-10,-3);#返回-1
select mod(10,-3);#返回1
日期函数
#1.now 返回当前系统日期+时间
select now();
#2.curdate返回当前系统日期
select curtime();
#3.curtime返回当前系统时间
select curdate();
#4.获取指定的部分:年、月、日、时、分、秒
select month(now());
select year(now());
#5.str_to_data将字符通过指定的格式转换成日期
select str_to_date('7-9-2020','%m-%d-%Y');#返回2020-07-09
#案例
select *
from employees
where str_to_date(hiredate,'%Y-%m-%d')='2002-12-23';
#6.date_format将日期转换成字符
select date_format('2020-7-9-6','%Y年%m月%d日');#返回2020年07月09日
#案例:查询有奖金的员工名和入职日期(xx月/xx日 xx年)
select last_name,date_format(hiredate,'%m月/%d日 %Y年')
from employees
where commission_pct is not null;

在这里插入图片描述

在这里插入图片描述

其他函数【补充】
select version();#版本号
select database();#查看当前数据库
select user();#查看当前用户

select md5('yaly');#加密
select password('yaly');#加密

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yfJIfA09-1600039165756)(C:\Users\lenovo\Desktop\1598799240966.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlFLCIVS-1600039165758)(C:\Users\lenovo\Desktop\1598799249379.png)]

流程控制函数【补充】
#1.if函数 if else的效果
select if(100>99,'大','小');
select last_name, if(commission_pct is null,'呵呵,我没奖金','嘻嘻,我有奖金') as 奖金
from employees;

在这里插入图片描述
在这里插入图片描述

#2.case函数  
#使用一:switch case的效果
/*
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end
*/
/*
案例:查询员工的工资,要求
部门号=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 as 新工资
from employees;

#使用二:类似于多重if
/*
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
sele 要显示的值n或语句n
end
*/
#案例:查询员工的工资情况
/*
如果工资>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 as 工资级别
from employees;

在这里插入图片描述
在这里插入图片描述

总结案例
#1.显示系统时间(注:日期+时间)
select now();
#2.查询员工号,姓名,工资,以及工资提高百分之20后的结果( NEW sa1ary)
select employee_id,last_name,salary,salary*1.2
from employees;
#3.将员工的姓名按首字母排序,并写出姓名的长度( LENGTH)
select substr(last_name,1,1) as "首字母",length(last_name) as "姓名长度",last_name
from employees
order by substr(last_name,1,1);
#4.做一个查询,产生下面的结果
#<last name> earns <salary> monthly but wants <salary*3>
#Dream salary King earns 24000 monthly but wants 72000
select concat(last_name," earns ",salary," monthly but wants ",salary*3) as "Dream salary"
from employees;
#5.使用 CASE-WHEN,按照下面的条件:
/*job grade
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
产生下面的结果
Last_name Job_id Grade
king AD_PRES A
*/
select last_name as Last_name,job_id as Job_id,
case job_id
when 'AD_PRES' then "A"
when 'ST_MAN' then "B"
when 'IT_PROG' then "C"
when 'SA_REP' then "D"
when 'ST_CLERK' then "E"
end as Grade
from employees;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数

分类:sum求和 avg平均值 max最大值 min最小值 count计算个数

特点:
1.sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2.以上分组函数都忽略null值
3.可以和distinct搭配实现去重
4.一般使用count(*)用作统计行数
5.和分组函数一同查询的字段要求是group by后的字段

简单的使用
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;
------------------------------------------
select sum(salary),avg(salary),max(salary),min(salary),count(salary) from employees;

在这里插入图片描述

参数支持哪些类型
select sum(last_name),avg(last_name) from employees;#0无意义
select max(last_name),min(last_name) from employees;#字符比较
select count(last_name) from employees;#计数非空空的值
select count(commission_pct) from employees;#计数非空的值

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

是否忽略null值
select sum(commission_pct),avg(commission_pct),sum(commission_pct)/35,sum(commission_pct)/107 from employees;

在这里插入图片描述

和distinct搭配去重
select count(commission_pct) from employees;
select count(distinct commission_pct) from employees;

在这里插入图片描述
在这里插入图片描述

count函数的详细介绍

效率:
MYISAN存储引擎下,COUNT(*)的效率最高
INNODB存储引擎下,COUNT(*)和COUNT(1)的效率差不多,COUNT(字段)最慢

#统计salary的非空个数
select count(salary) from employees;
#统计行数
select count(*) from employees;
#统计行数(加一列常量值)
select count(1) from employees;
和分组函数一同查询的字段有限制
select avg(salary),employees_id from employees;#错误

在这里插入图片描述

总结案例
-- 1.查询公司员工工资的最大值,最小值,平均值,总和、
select max(salary),min(salary),avg(salary),sum(salary) from employees;
-- 2.查询员工表中的最大入职时间和最小入职时间的相差天数(DIFFRENCE)
select datediff('2020-10-1','2020-7-15');#查询后面参数日期到前面参数日期的天数
select datediff(max(hiredate),min(hiredate)) as DIFFRENCE from employees;
-- 3.查询部门编号为90的员工个数
select count(*) from employees where department_id=90;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

分组查询

#语法
select 分组函数,(要求出现在group by的后面)
from 表
【where 筛选条件】
group by 分组的列表
【order by 子句】

#注意:查询列表必须特殊,要求是分组函数和group by后的字段
一、简单的分组查询
#查询每个工种的最高工资
select max(salary),job_id
from employees
group by job_id;

#查询每个位置上的部门个数
select count(*),location_id
from departments
group by location_id;


在这里插入图片描述

二、添加筛选条件

1.分组前筛选
数据源是原始表
位置在group by子句之前
关键字是where

2.分组前筛选
数据源是分组后的结果集
位置在group by子句之后
关键字是having

注意:
①分组函数做条件肯定是放在having子句中(原表没有)
②能用分组前筛选的,就优先使用分组前筛选(考虑性能)

添加简单的筛选条件
#案例1:查询邮箱中包含a字符的,每个部门的平均工资
select avg(salary),department_id,email
from employees
where email like '%a%'
group by department_id;

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

在这里插入图片描述

在这里插入图片描述

添加复杂的筛选条件
#案例1:查询哪个部门的员工个数>2
#①查询每个部门的员工个数
select count(*),department_id
from employees
group by department_id;
#②根据①的结果进行筛选,查询哪个部门的员工个数>2
select count(*),department_id
from employees
group by department_id
having count(*)>2;

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

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、按表达式或函数分组
#案例:按员工姓名的长度分组,查询每一组员工的个数,筛选员工个数>5的有哪些?
select count(*) as c,length(last_name) as len_name
from employees
group by len_name	#mysq1支持别名
having c>5;

在这里插入图片描述

四、按多个字段分组
#案例:查询每个部门每个工种的员工的平均工资
select department_id,job_id,round(avg(salary),2)#保留两位小数
from employees
group by department_id,job_id;

在这里插入图片描述

五、添加排序
#案例:查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示
select department_id,job_id,avg(salary)
from employees
where department_id is not null	#筛选放在前面
group by department_id,job_id
order by avg(salary) desc;#降序,由高到低

在这里插入图片描述

六、案例
-- 1.查询各job_id的员工工资的最大值、最小值、平均值、总和,并按job_id升序
select max(salary),min(salary),avg(salary),sum(salary),job_id
from employees
group by job_id
order by job_id asc;

-- 2.查询员工最高工资和最低工资的差距(DIFFERENCE)
select (max(salary)-min(salary))as DIFFERENCE
from employees;

-- 3.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
select manager_id,min(salary),count(*)
from employees
where manager_id is not null
group by manager_id
having min(salary)>=6000;

-- 4.查询所有部门的编号,员工数量和工资平均值,并按平均工资降序
select department_id,count(*),avg(salary)
from employees
group by department_id
order by avg(salary) desc;

-- 5.选择具有各个job_id的员工人数
select count(*),job_id
from employees
group by job_id;

连接查询

含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

select name,boyName from beauty,boys;

在这里插入图片描述

笛卡尔乘积现象:表1 有m行,表2 有n行,结果有m*n行

产生原因:没有有效的连接条件
如何避免:添加有效的连接条件

select name,boyName from beauty,boys
where beauty.boyfriend_id=boys.id;

在这里插入图片描述

分类:
按年代分类:
sql92标准(仅支持内连接)
sql99标准【推荐】(支持内连接、左外、右外、交叉连接)
按功能分类:
①内连接:
等值连接
非等值连接
自连接
②外连接:
左外连接
右外连接
全外连接
③交叉连接

一、sql92标准
等值连接

①多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③多表的顺序没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如:排序、分组、筛选

#案例1:查询女神名和对应的男神名
select name,boyname
from boys,beauty
where beauty.boyfriend_id=boys.id;

#案例2:查询员工名和对应的部门名
select last_name,department_name
from employees,departments
where employees.department_id=departments.department_id;

在这里插入图片描述

在这里插入图片描述

①为表起别名

如果给表起了别名,则查询的字段不能使用原来的表名来限定

#查询员工号、工种名、工种号
select employee_id,job_title,employees.job_id
from employees,jobs
where employees.job_id=jobs.job_id;
#起别名后
select employee_id,job_title,e.job_id
from employees e,jobs j
where e.job_id=j.job_id;

在这里插入图片描述

在这里插入图片描述

②可以调换表位置
#查询员工号、工种号、工种名
select employee_id,job_title,e.job_id
from jobs j,employees e 	#jobs表和employees表换位置没影响
where e.job_id=j.job_id;
③可以加筛选
#案例1:查询有奖金的员工名、部门名
select last_name,department_name,commission_pct
from employees e,departments d
where e.department_id=d.department_id
and e.commission_pct is not null;	#用and连接

#案例2:查询城市名中第二个字符为o的部门名和城市名
select department_name,city
from departments d,locations l
where d.location_id=l.location_id
and l.city like '_o%';

在这里插入图片描述

④可以加分组
#案例1:查询每个城市的部门个数
select count(*) 部门个数,city
from locations l,departments d
where d.location_id=l.location_id
group by city;

在这里插入图片描述

#案例2:查询有奖金的每个部门的部门名和部门领导编号和该部门的最低工资
select department_name,e.manager_id,min(salary)
from departments d,employees e
where d.department_id=e.department_id
and commission_pct is not null
group by department_name,d.manager_id;

在这里插入图片描述

⑤可以加排序
#查询每个工种的工种名和员工个数,并且按员工个数降序
select job_title,count(last_name) as 员工个数
from jobs j,employees e
where e.job_id=j.job_id
group by job_title
order by 员工个数 DESC;

在这里插入图片描述

⑥可以多表连接
#查询员工名、部门名和所在的城市
select last_name,department_name,city
from employees e,departments d,locations l
where e.department_id=d.department_id
and l.location_id=d.location_id;		#三表连接

在这里插入图片描述

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

在这里插入图片描述

#案例2:查询员工的工资级别为A的工资和工资级别
select salary,grade_level
from job_grades,employees
where salary between lowest_sal and highest_sal
and grade_level='A';		#限定条件
自连接

自己连接自己

#案例:查询员工名和上级的名字
select a.employee_id 员工号,a.last_name 员工名,m.employee_id 领导号,m.last_name 领导名
from employees a,employees m
where m.employee_id=a.manager_id;

在这里插入图片描述

DML

DML(Data Manipulation Language)数据操作语言

DDL

DDL(Data Definition Language)数据定义语言

TCL

TCL([Terminal Control Language )终端控制语言

视图的讲解

存储过程和函数


创建用户同时授权给用户

GRANT ALL PRIVILEGES ON xftdb.* to 'dj_user'@'%' IDENTIFIED BY 'pythonvip';
FLUSH PRIVILEGES;
给予所有权限(GRANT ALL PRIVILEGES)xftdb(库名)所有表(.*)上给'dj_user'(普通用户)@'%'(所有设备)IDENTIFIED BY'pythonvip'(这个子用户的密码)

原生数据库命令

创建数据库
CREATE DATABASE 数据库名;
创建数据库(如果不存在就创建,存在就不创建)
CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
删除数据库
drop database 数据库名;
使用某个数据库
use 数据库名;
查看所有数据库
show databases;
创建数据表
create table 数据库名 charset=utf8;
创建数据库(如果不存在就创建,存在就不创建)
create table if not exists '表名'(
'id' int unsigned primaty key auto_increment,
'name' varchar(32) not null,
'create_time' Date
)ENGING=InnoDB DEFAULT CHARSET=UTF8;
查看表结构
desc 表名;
删除数据表
drop table 表名;
查看数据表
show tables;
插入数据
insert into 表名 (filed1,filed2,...) values (value1, value2,...);
查询语句

1、通过limit属性限制返回的数量 2、通过offset指定开始查询的数据偏移量,默认是0

select 字段1,字段2 from 表名 [where 条件] [limit n] [offset m]
修改或更新数据

实例: 1、将所有人的年龄加1 update students set age=age+1; 2、将id为5的手机号改为默认的-:update students set tel=default where id=5; 3、将手机号为17521192856的姓名改为小马:update students set name=‘小马’ where tel=‘17521192856’;

update 表名 set field1=new_value1,field2=new_value2 [where 条件]
根据条件修改指定某条数据某些字段的值
删除数据
delete from 表名 [where 条件];
排序
select field1,field2... from 表名 [where 条件] order by field1 desc;
导入自己的表
mysql -u 用户名 -p -D 数据库名 < tb_news_20181217.sql
清空表内容
 truncate TABLE tablename;    
进入表
USE + 数据库名

`

排序
select field1,field2... from 表名 [where 条件] order by field1 desc;
导入自己的表
mysql -u 用户名 -p -D 数据库名 < tb_news_20181217.sql
清空表内容
 truncate TABLE tablename;    
进入表
USE + 数据库名
├─新版MySQL DBA 课件ppt │ 第一课数据库介绍篇.pdf │ 第七课MySQL数据库设计.pdf │ 第三十一课percona-toolkits 的实战及自动化.pdf │ 第三课MySQL授权认证.pdf │ 第九课MySQL字符集.pdf │ 第二十一课MySQL常见错误-converted.pdf │ 第二十课MySQL索引和调优.pdf │ 第二课MySQL入门介绍.pdf │ 第五课MySQL常用函数介绍.pdf │ 第八课InnoDB内核.pdf │ 第六课SQL高级应用.pdf │ 第十一课MySQL表分区8.0.pdf │ 第十七课Elasticsearch分享-张亚V4.pdf │ 第十三课MySQL5.7高可用架构之Mycat.pdf │ 第十三课MySQL8.0高可用架构之Mycat.pdf │ 第十九课MySQL备份和恢复.pdf │ 第十二课MySQL5.7复制.pdf │ 第十二课MySQL8.0复制.pdf │ 第十五课MySQL8.0高可用架构之MHA和MMM.pdf │ 第十五课MySQL高可用架构之MHA和MMM.pdf │ 第十八课mongo分享-张亚V1.pdf │ 第十六课Redis分享-张亚V2.pdf │ 第十四课MySQL8.0高可用架构之Atlas.pdf │ 第十课MySQL8.0锁机制和事务.pdf │ 第十课MySQL锁机制和事务.pdf │ 第四课SQL基础语法.pdf │ ├─新版MySQL DBA综合实战班 第01天 │ 0_MySQL高级DBA公开课视频.avi │ 1_数据库通用知识介绍.avi │ 2_MySQL8常规安装.avi │ 3_MySQL8非常规安装.avi │ 4_MySQL8常见客户端和启动相关参数.avi │ ├─新版MySQL DBA综合实战班 第02天 │ 10_MySQL Update课堂练习.mp4 │ 1_课后作业讲解.mp4 │ 2_MySQL权限系统介绍.mp4 │ 3_MySQL授权用户和权限回收.mp4 │ 4_MySQL8新的密码认证方式和客户端链接.mp4 │ 5_MySQL Create命令.mp4 │ 6_MySQL CreateTable命令.mp4 │ 7_课堂练习1.mp4 │ 8_MySQL Insert命令.mp4 │ 9_MySQL Insert课堂练习和Update命令.mp4 │ ├─新版MySQL DBA综合实战班 第03天 │ 1_课堂作业讲解.mp4 │ 2_MySQL Delete语法讲解.mp4 │ 3_MySQL Select语法讲解.mp4 │ 4_MySQL Select多表连接讲解.mp4 │ 5_MySQL其他常用命令讲解.mp4 │ 6_MySQL操作符和常用函数.mp4 │ 7_MySQL常用字符串和日期函数.mp4 │ delete.txt │ MySQL高级DBA大作业1.docx │ 作业.docx │ ├─新版MySQL DBA综合实战班 第04天 │ 1_课后作业讲解.mp4 │ 2_SQL课堂强化练习1.mp4 │ 3_SQL课堂强化练习2.mp4 │ 4_存储过程函数概念和创建讲解.mp4 │ 5_存储过程函数流程控制语句讲解.mp4 │ ├─新版MySQL DBA综合实战班 第05天 │ 1_课后作业讲解.mp4 │ 2_MySQL游标讲解.mp4 │ 3_MySQL触发器.mp4 │ 4_MySQL触发器课堂强化练习.mp4 │ 5_MySQL数字和时间类型.mp4 │ 6_MySQL字符串类型.mp4 │ 7_MySQL存储引擎.mp4 │ 8_MySQL第三范式设计讲解.mp4 │ 9_MySQL数据库设计工具.mp4 │ ├─新版MySQL DBA综合实战班 第06天 │ 1_课堂作业讲解.mp4 │ 2_InnoDB内核之事务和多版本控制.mp4 │ 3_InnoDB底层文件存储和体系结构.mp4 │ 4_InnoDB体系结构.mp4 │ 5_InnoDB存储引擎配置.mp4 │ 6_InnoDB统计资料和其他配置.mp4 │ 7_InnoDB锁原理和锁等待问题定位.mp4 │ ├─新版MySQL DBA综合实战班 第07天 │ 1_课后作业讲解.mp4 │ 2_MySQL锁机制原理讲解.mp4 │ 3_MySQL锁相关参数设置.mp4 │ 4_InnoDB事务隔离级别详解.mp4 │ 5_InnoDB死锁发生原理和规避.mp4 │ 6_MySQL字符集和排序规则.mp4 │ 作业.docx │ 锁等待分析.txt │ ├─新版MySQL DBA综合实战班 第08天 │ 1_课堂作业讲解.mp4 │ 2_MySQL乱码原理讲解.mp4 │ 3_MySQL排序规则权重.mp4 │ 4_MySQL字符集空间消耗.mp4 │ 5_MySQL表分区介绍和优势.mp4 │ 6_MySQL表分区类型.mp4 │ 7_MySQL字表分区和NULL值特殊处理.mp4 │ 8_MySQL表分区管理.mp4 │ 作业.docx │ 作业及答案.docx │ ├─新版MySQL DBA综合实战班 第09天 │ 1_课堂作业讲解.mp4 │ 2_MySQL复制原理.mp4 │ 3_MySQL传统复制原理和搭建.mp4 │ 4_MySQL复制搭建part2.mp4 │ 5_MySQL复制相关参数.mp4 │ 6_MySQL复制状态和延迟复制.mp4 │ 7_MySQL半同步复制.mp4 │ 作业.docx │ ├─新版MySQL DBA综合实战班 第10天 │ │ 1_课后作业讲解.mp4 │ │ 2_MySQL传统复制手动切换和GTID复制原理及切换.mp4 │ │ 3_Mycat原理和schema配置讲解.mp4 │ │ 4_Mycat schema配置讲解.mp4 │ │ 5_Mycat企业高可用配置.mp4 │ │ 作业.docx │ │ │ └─MySQL DBA 课堂命令-复制和Mycat │ mysql-master.log │ mysql-master2.log │ mysql-mycat.log │ mysql-slave1.log │ mysql-slave2.log │ ├─新版MySQL DBA综合实战班 第11天 │ │ 1_课后作业讲解.mp4 │ │ 2_MyCat分库分表原理和常见方法.mp4 │ │ 3_MyCat管理操作.mp4 │ │ 4_Atlas配置和读写分离实现.mp4 │ │ 5_Atlas分库分表实现.mp4 │ │ 6_MHA搭建和故障切换原理剖析.mp4 │ │ │ └─MySQL DBA_课堂命令-Mycat和Atlas和MHA │ mysql-master.log │ mysql-mycat.log │ mysql-slave1.log │ mysql-slave2.log │ ├─新版MySQL DBA综合实战班 第12天 │ 01ES介绍.docx │ 01es介绍.mp4 │ 01redis介绍.mp4 │ 02es增删改查操作命令.mp4 │ 02ES的功能适用场景以及特点介绍.docx │ 02redis应用场景.mp4 │ 03ES的核心概念.docx │ 03redis单实例安装.mp4 │ 03集群分片副本操作.mp4 │ 04es集群运维.mp4 │ 04redis数据类型操作.mp4 │ 04安装search-guard.docx │ 05redis主从和哨兵操作.mp4 │ 06reids集群创建收缩扩容.mp4 │ 07redis运维工具.mp4 │ Elasticsearch分享V2.pdf │ Elasticsearch分享V4.pdf │ ES分享试验环境.docx │ ES操作.txt │ Redis分享-张亚V2.pdf │ 日志收集.txt │ 监控和分词.txt │ 防脑裂配置.txt │ ├─新版MySQL DBA综合实战班 第13天-mongo │ 01mongo介绍.mp4 │ 02mongo安装配置优化.mp4 │ 03mongo增删改查.mp4 │ 04授权认证和索引.mp4 │ 05mongo常用工具介绍.mp4 │ 06mongo副本集升级备份恢复.mp4 │ 07ELK模板收集mongo日志.mp4 │ mongodb.jpg │ Mongodb分享-贾海娇.pdf │ mongo数据库分享-张亚V1.pdf │ monogdb.conf │ ├─新版MySQL DBA综合实战班 第14天 │ │ 1_MHA手工切换和GTID支持.mp4 │ │ 2_MMM高可用架构.mp4 │ │ 3_MySQL备份概念.mp4 │ │ 4_Mysqldump备份原理.mp4 │ │ 5_Mysqldump基于表备份.mp4 │ │ 6_MySQL全量恢复和日志增量恢复.mp4 │ │ 7_xtrabackup全量和增量备份恢复.mp4 │ │ 作业及答案.docx │ │ │ └─MySQL DBA堂命令-mha和备份恢复 │ mysql-master_05-18_10-03-09.log │ mysql-master_05-18_14-02-01.log │ mysql-mycat_05-18_10-03-02.log │ mysql-slave1_05-18_10-03-14.log │ mysql-slave2_05-18_10-03-20.log │ ├─新版MySQL DBA综合实战班 第15天 │ │ 1_课后作业讲解.mp4 │ │ 2_MySQL索引原理介绍.mp4 │ │ 3_MySQL索引类型介绍.mp4 │ │ 4_MySQL索引底层结构和执行计划.mp4 │ │ 5_MySQL索引优化原则.mp4 │ │ 6_MySQL运维常见错误part1.mp4 │ │ 7_MySQL运维常见错误part2.mp4 │ │ ERROR1040_1917970.1.pdf │ │ ERROR1062_1593526.1.pdf │ │ ERROR1205_1911871.1.pdf │ │ ERROR2002_1023190.1.pdf │ │ How_to_Reset_the_RootPassword.pdf │ │ How_to_Reset_the_RootPassword5.7.pdf │ │ PacketTooLarge.pdf │ │ │ └─MySQL DBA课堂命令-索引调优和运维常见错误 │ mysql-master-05-25_11-10-39.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值