1、什么是数据库?什么是数据库管理系统?什么是SQL?他们之间的关系是什么?
- 数据库:英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义,存储数据的仓库,实际上就是一堆文件,这些文件中存储了具有特定格式的数据。
- 数据库管理系统:DataBaseManagement,简称DBMS。数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。常见的数据库管理系统:MySQL、Oracle、MS SqlServer、DB2、sybase等。
- SQL:结构化查询语言。程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。
- 三者之间的关系:DBMS–>执行–>SQL–>操作–>DB
2、mysql安装了,服务启动了,怎么使用客户端登录mysql数据库?
使用bin目录下的myql.exe命令来连接mysql数据库服务器
3、mysql常用命令(不区分大小写)
(1)退出mysql:exit
(2)查看mysql中的数据库:show databases;(默认有四个数据库)
(3)选择使用某个数据库:use 数据库名;
(4)创建数据库:create database 数据库名;
(5)查看某个数据库下的表:show tables;
(6)查看mysql数据库的版本号:select version();
(7)查看当前使用的数据库:select database;
4、数据库当中最基本的单元是表:table
任何一张表都有行和列:
- 行(row):被称为数据、记录
- 列(column):被称为字段,如姓名字段、性别字段、年龄字段。(每一个字段都有:字段名、数据类型、约束等属性)
5、SQL语句的分类
- DQL:数据查询语言(凡是带有select关键字的都是查询语句)
- DML:数据操作语言(凡是对表中的数据进行增删改的都是DML,insert、delete、update)
- DDL:数据定义语言(凡是带有create、drop、alter的都是DDL,DDL主要操作的是表的结构,不是表中的数据)
- TCL:事务控制语言(包括事物提交commit、事物回滚rollback)
- DCL:数据控制语言(例如授权grant、撤销权限revoke等)
6、将sql文件的数据导入(路径中不要有中文)
bjpowernode.sql源文件(带预览图)
https://p14.lanzouv.com/ic2WI0efp0je
7、查看表中的数据:select * from 表名;
8、不看表的数据,只看表的结构:desc 表名;
9、简单查询
(1)查询一个字段:select 字段名 from 表名;
select后面跟字面量(不是字段名):
(2)查询两个字段或多个字段:使用逗号隔开
(3)查询所有字段:第一种方式把每个字段都写上,第二种方式使用*(效率低、可读性差、实际开发中不建议)
(4)给查询的列起别名:使用as关键字(原表列名不变,只负责查询)
as可以省略:
若起的名字有空格或中文:使用单引号
(5)计算员工年薪(字段可以使用数学表达式):
10、条件查询
select … from … where …;
找出名字带有“_”的:转义字符 \_
11、排序(asc升,desc降)
多个字段排序:
根据字段位置排序:
12、数据处理函数
数据处理函数又被称为单行处理函数,单行处理函数的特点是一个输入对应一个输出。和单行处理函数相对的是多行处理函数,多行处理函数的特点是多个输入对应一个输出。
(1)常见的单行处理函数
在所有数据库中,只要有NULL参与的数学运算,最终结果就是NULL。为了避免这个现象,需要使用ifnull函数。用法:ifnull(数据,被当做哪个值)
case…when…then…when…then…else…end
当员工的工作岗位是MANAGER时,工资上调10%,当工作岗位是SALEMAN时,工资上调50%,其他正常
(2)常见的分组函数/多行处理函数
输入多行,最终输出一行
- count:计数
- sum:求和
- avg:平均值
- max:最大值
- min:最小值
注意:分组函数在使用的时候必须先分组,然后才能用。如果没有对数据进行分组,整张表默认为一组。
注意:1、分组函数自动忽略NULL,不需要提前对NULL进行处理
2、分组函数中count(*)和count(具体字段)的区别:
count(*):统计表中的总行数,因为每一行记录不可能都为NULL
count(具体字段):表示统计该字段下所有不为NULL的元素的总数
3、分组函数不能直接使用在where子句中
4、所有的分组函数可以组合起来一起用
13、分组查询(重要)
select … from … group by …
比如计算每个部门的工资和,计算每个工作岗位的平均薪资,计算每个工作岗位的最高薪资
(1)关于执行顺序
select … from … where … group by … order by…
以上关键字的顺序不能颠倒,执行顺序是:from、where、group by、select、order by
因为分组函数在使用的时候必须在分组之后才能使用,where执行的时候,还没有group by
(2)找出每个工作岗位的工资和
在一条select语句当中,如果有group by语句的话,select后面只能跟参加分组的字段以及分组函数,其他的一律不能跟
(3)找出每个部门的最高薪资
(4)找出每个部门不同工作岗位的最高薪资
(5)找出每个部门最高薪资,要求显示最高薪资大于3000的
使用having可以对分完组之后的数据进一步过滤,having不能单独使用必须和group by联合使用,不能代替where
优化策略:where和having,优先选择where,where实在完成不了了,再选择having
例子:找出每个部门的平均薪资,要求显示平均薪资高于2500的
14、总结单表查询
select… where… group by … having … order by …
执行顺序:from、where、group by、having、select、order by
从某张表中查询数据,
先经过where条件筛选出有价值的数据,
对这些有价值的数据进行分组,
分组之后可以使用having继续筛选,
select查询出来,
最后排序输出
例子:找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER之外,要求按照平均薪资降序排