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

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

  • 数据库基础
    • 概念
    • 特点
    • DBMS
  • MySQL
    • MySQL配置文件
    • dos操作(管理员运行cmd.exe)
      • dos指令
      • dos快捷键
    • MySQL操作
      • MySQL语法规范
      • MySQL指令(每条语句分号;结尾)
  • SQL
    • DQL
      • 特点
      • 基础查询
      • 条件查询
        • 一、按条件表达式筛选
        • 二、按逻辑表达式筛选
        • 三、模糊查询
      • 排序查询
      • 常见函数
        • 一、单行函数
          • 字符函数
          • 数学函数
          • 日期函数
          • 其他函数【补充】
          • 流程控制函数【补充】
          • 总结案例
        • 二、分组函数
          • 简单的使用
          • 参数支持哪些类型
          • 是否忽略null值
          • 和distinct搭配去重
          • count函数的详细介绍
          • 和分组函数一同查询的字段有限制
          • 总结案例
      • 分组查询
        • 一、简单的分组查询
        • 二、添加筛选条件
          • 添加简单的筛选条件
          • 添加复杂的筛选条件
        • 三、按表达式或函数分组
        • 四、按多个字段分组
        • 五、添加排序
        • 六、案例
      • 连接查询
    • DML
    • DDL
    • TCL
    • 视图的讲解
    • 存储过程和函数
    • 创建用户同时授权给用户
    • 原生数据库命令
        • 创建数据库
        • 创建数据库(如果不存在就创建,存在就不创建)
        • 删除数据库
        • 使用某个数据库
        • 查看所有数据库
        • 创建数据表
        • 创建数据库(如果不存在就创建,存在就不创建)
        • 查看表结构
        • 删除数据表
        • 查看数据表
        • 插入数据
        • 查询语句
        • 修改或更新数据
        • 删除数据
        • 排序
        • 导入自己的表
        • 清空表内容
        • 进入表
        • 排序
        • 导入自己的表
        • 清空表内容
        • 进入表

数据库基础

概念

  • 数据库管理系统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展示全部数据库
MySQL数据库学习笔记 2020.7.15持续更新_第1张图片

use 库名X进入X库

show tables展示所在库内的全部表(已经进入某库)
MySQL数据库学习笔记 2020.7.15持续更新_第2张图片

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

MySQL数据库学习笔记 2020.7.15持续更新_第3张图片

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

MySQL数据库学习笔记 2020.7.15持续更新_第4张图片

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

desc 表名Y展示Y表结构

MySQL数据库学习笔记 2020.7.15持续更新_第5张图片

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;

MySQL数据库学习笔记 2020.7.15持续更新_第6张图片

MySQL数据库学习笔记 2020.7.15持续更新_第7张图片
MySQL数据库学习笔记 2020.7.15持续更新_第8张图片

条件查询

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自定义转义符
    

    MySQL数据库学习笔记 2020.7.15持续更新_第9张图片MySQL数据库学习笔记 2020.7.15持续更新_第10张图片

  • BETWEEN AND和NOT BETWEEN AND

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

    ②包含临界值

    ③从小到大,不能颠倒

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

    MySQL数据库学习笔记 2020.7.15持续更新_第11张图片

  • 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;#工资升序,编号降序

MySQL数据库学习笔记 2020.7.15持续更新_第12张图片

常见函数

功能:类似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;

MySQL数据库学习笔记 2020.7.15持续更新_第13张图片

MySQL数据库学习笔记 2020.7.15持续更新_第14张图片

MySQL数据库学习笔记 2020.7.15持续更新_第15张图片

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

MySQL数据库学习笔记 2020.7.15持续更新_第16张图片
MySQL数据库学习笔记 2020.7.15持续更新_第17张图片

#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;

MySQL数据库学习笔记 2020.7.15持续更新_第18张图片
MySQL数据库学习笔记 2020.7.15持续更新_第19张图片

总结案例
#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.做一个查询,产生下面的结果
# earns  monthly but wants 
#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;

在这里插入图片描述

MySQL数据库学习笔记 2020.7.15持续更新_第20张图片

MySQL数据库学习笔记 2020.7.15持续更新_第21张图片

MySQL数据库学习笔记 2020.7.15持续更新_第22张图片

MySQL数据库学习笔记 2020.7.15持续更新_第23张图片

二、分组函数

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

分类: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;#错误

MySQL数据库学习笔记 2020.7.15持续更新_第24张图片

总结案例
-- 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;

MySQL数据库学习笔记 2020.7.15持续更新_第25张图片
MySQL数据库学习笔记 2020.7.15持续更新_第26张图片

二、添加筛选条件

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;

MySQL数据库学习笔记 2020.7.15持续更新_第27张图片

MySQL数据库学习笔记 2020.7.15持续更新_第28张图片

添加复杂的筛选条件
#案例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;

MySQL数据库学习笔记 2020.7.15持续更新_第29张图片

MySQL数据库学习笔记 2020.7.15持续更新_第30张图片
MySQL数据库学习笔记 2020.7.15持续更新_第31张图片

三、按表达式或函数分组

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

MySQL数据库学习笔记 2020.7.15持续更新_第32张图片

四、按多个字段分组

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

MySQL数据库学习笔记 2020.7.15持续更新_第33张图片

五、添加排序

#案例:查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示
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;#降序,由高到低

MySQL数据库学习笔记 2020.7.15持续更新_第34张图片

六、案例

-- 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;

连接查询

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

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 + 数据库名

你可能感兴趣的:(sql,MySQL,数据库)