One_MySQL mysql的基础知识

一、MySQL简述

1.1、sql,DB,DBMS分别是什么,有什么关系?

DB:BataBase (数据库,数据库实际上在硬盘上以文件的形式存在)

DBMS: BateBase Management System(数据库管理系统,常见的有:MySQL,Oracle,DB2,Sybase,SqlServer)

sql: 结构化查询语言,是一门标准通用的语言。sql语句在执行的时候,实际上内部也会先进行编译,然后在执行sql(sql语句的编译有DBMS完成)

关系:DBMS负责执行SQL语句,来操作DB当中的数据。

1.2、什么是表?

表:table是数据库的基本组成单位。包括:行和列

行:被称为数据(一行一条数据 data)

列:被称为字段(column)

1.3 、SQL的分类

DQL(数据查询语言):select语句

DML(数据操作语言):delete insert update 对表数据进行操作

DDL(数据定义语言): create drop alter 对表结构进行操作

TCL(事物控制语言): commit 提交事物,rollback回滚事务。

DCL(数据控制语言):grant授权,revoke 撤销权限等

二、创建数据库

2.1 步骤

第一步:打开cdm 输入 mysql -uroot -p 回车 输入密码,进入mysql

第二步:show databases;查看有哪些数据库

第三步:创建自己的数据库 create database 数据库名

第四步:use 数据库名;使用数据库

第五步:show tables;查看有哪些表

第六步:使用 source + xxx .sql文件所在路径,把文件导入数据库

2.2 查看表的结构

desc 表名;

 

三、常用命令

3.1

select database();查看当前使用的数据库

\c :终止当前语句

select version (); 查看当前数据库版本

\q,exit:退出mysql

3.2查看创建表的语句

show create table 表名;

 

四、简单的查询语句(DQL)

语法格式:

select 字段名1 as 重命名 ,字段名2,....from 表名

sql语句不区分大小写,以“;”结尾,“as + 名字” 表示重命名(名字如果是中文要用单引号引起来)

注意:

  • as 可以省略;

  • mysql可以用双引号,但是只能在mysql中用,不通用,最好使用单引号;

  • select * from dept; *号尽量不使用,效率低

 

五、条件查询

语法格式:

select 字段名,字段名...

from 表名

where 条件;

执行顺序:from-->where-->select

eg1:找出工资不等于三千的员工?

select ename,sal from emp where sal<>3000; (或者 !=)

eg2:找出工资在1100到3000的员工?

mysql> select ename,sal from emp where sal between 1100 and 3000;

或者mysql> select ename,sal from emp where sal<=3000 and sal>=1100;

注意:

between...and....是闭区间,但是必须左小右大【1100,3000】不可以【3000,1100】。

and与or and的优先级较高

模糊查询like:

两个特殊符号:%,_

%:代表任意符号;_:代表一个符号

eg1:找出第二个字符是A的

mysql> select ename from emp where ename like '_a%';

eg2:找出名字里带有下划线的

select ename from emp where ename like '%\_%'; 转义

 

六、排序

asc:升序,desc:降序

6.1 按照工资进行排序

mysql> select ename, sal from emp order by sal ;默认升序排列

6.2 按照工资的降序排列,工资相同按名字升序排列

mysql> select ename, sal from emp order by sal desc,ename asc;

注意:多字段排序,从前往后进行,如上面的先sal,再ename,用逗号隔开

6.3 mysql> select ename, sal from emp order by 2 desc;

按照第二列(sal)降序排列 ,在写程序时不可以这样写,程序不健壮。

6.4 找出工作岗位是salesmen的员工,按照工资降序排列

mysql> select ename,sal,job from emp where job='salesman'order by sal desc;

注意:执行顺序:from-->where-->select-->order by

 

七、分组函数

一共五个,另一个名字:多行处理函数,

特点:一次处理多行记录,最终输出一行

count 计数

sum 求和

avg 取平均

max 最大值

min 最小值

分组函数自动忽略null

1、 select avg(sal) from emp; 员工工资平均值

2、select max(sal) from emp; 最高工资

3、select min(sal) from emp; 最低工资

4、 select count(empno) from emp; 员工人数

5、 select sum(sal) from emp; 工资总数

7.1分组函数不能使用在where中

原因:group by是在where后面才执行,分组函数必须在分完组后才可以执行也就是在group by之后执行。也就是说分组函数不能在where 里

select ename ,sal from emp where sal>avg(sal);//Invalid use of group function 分组函数无效使用

正确写法: select ename ,sal from emp where sal>(select avg(sal) from emp); 利用嵌套子查询

7.2 count(*)与count(某个字段)

count(*):统计总记录条数。

count(某个字段):这个字段不为null的数据条数。

7.3分组函数也可以组合使用

select count(*),sum(ename),avg(sal),max(sal),min(sal) from emp;

7.4对执行顺序的概述

select           5

..

from            1

..

where          2

..

group by     3

...

having         4

...

order by      6

...

八、单行处理函数

输入一行,输出一行

重点:所有数据库都是这样规定的,只要有null参与的运算结果一定是null

select ename ,(sal+comm)*12 from emp;计算年薪,但是comm可能为null,与sal运算的时候会出现null。

怎么办?

select ename ,(sal+ifnull(comm,0))*12 from emp;

8.1使用空处理函数 ifnull(可能为null的数据,被当作什么处理)

eg1: select ename,if(comm,0) from emp; 把津贴comm为null的都变为0

注:select sum(comm) from emp; comm有的为null,但是不需要ifnull()函数处理,因为分组函数自动忽略null。

 

九、groud by 和having

groud by:按照某个字段或某些字段进行分组

having:是对分组之后的数据进行再次过滤

分组函数一般都和groud by连用,分组函数都是在group by 后面执行完后执行

eg:查找每种工作岗位的最高工资?

select job, max(sal) from emp group by job;

select ename,job,max(sal) from emp group by job;//这条语句在mysql中不会报错,但是执行结果无意义,在Oracle中直接报错。

结论:在有group by的语句里,只能查询被分组字段,与分组函数,其他一律不可出现。

9.1多字段联合分组

eg:找出不同部门不同工作岗位的最高薪资?

select deptno,job,max(sal) from emp group by deptno,job;

9.2 having与where

eg:查找每个部门的最高工资,显示工资大于2900的数据

第一种方式:select max(sal),deptno from emp group by job having max(sal)>2900;

这种方式效率较低,建议采用第二种方式

第二种方式: select max(sal),deptno from emp where sal>2900 group by deptno;

但是当下面这种情况,就必须使用having

eg:查找每个部门的平均工资,显示工资大于2900的数据

select avg(sal),deptno from emp group by deptno having avg(sal)>2900;

posted @ 2021-07-22 20:04  别不开心,过得去  阅读(160)  评论(0)    收藏  举报