文章目录
- 1.名词解释
- 2.如何启动mysql数据库
- 3.mysql常用命令
- 4.数据库当中最基本的单元是表:table
- 5.关于SQL语句的分类
- 6.简单查询
- 7.条件查询
- 8.排序
- 9.数据处理函数
- 单行处理函数常见的有哪些?
- 10.分组函数(多行处理函数)
1.名词解释
- 数据库:英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。
- 数据库管理系统:DataBaseManagementSystem,简称DBMS。数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。常见的数据库管理系统:MySQL、Oracle、MS SqlServer、DB2、sybase等…
- SQL:结构化查询语言程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用。
- 三者之间的关系?
DBMS–执行–> SQL --操作–> DB
先安装数据库管理系统MySQL,然后学习SQL语句怎么写,编写SQL语句之后,DBMS
对SQL语句进行执行,最终来完成数据库的数据管理。
2.如何启动mysql数据库
win+r键输入cmd代开windows命令窗口,然后输入:mysql -uroot -p,然后输入密码即可登录上mysql数据库。
3.mysql常用命令
-
退出mysql :exit
-
查看mysql中有哪些数据库?-》show databases; 注意:以分号结尾,分号是英文的分号。
-
怎么选择使用某个数据库呢?-》mysql> use test;
Database changed
表示正在使用一个名字叫做test的数据库。 -
怎么创建数据库呢?-》mysql> create database bjpowernode;
Query OK, 1 row affected (0.00 sec) -
查看某个数据库下有哪些表?-》mysql> show tables;
-
查看mysql数据库的版本号:-》mysql> select version();
-
查看当前使用的是哪个数据库?-》mysql> select database();
-
如何倒入数据表呢?-》使用source+路径即可,路径不可以包含中文
-
怎么查看表中的数据呢?-》select * from 表名; //统一执行这个SQL语句。
-
不看表中的数据,只看表的结构,有一个命令:-》desc 表名; (describe的缩写)
注意1:mysql是不见“;”不执行,“;”表示结束!
注意2:以上的命令不区分大小写,都行。
4.数据库当中最基本的单元是表:table
什么是表table?为什么用表来存储数据呢?-》数据库当中是以表格的形式表示数据的。因为表比较直观。
任何一张表都有行和列:
行(row):被称为数据/记录。
列(column):被称为字段。
了解一下:每一个字段都有:字段名、数据类型、约束等属性。字段名可以理解,是一个普通的名字,见名知意就行。数据类型:字符串,数字,日期等,后面会说到。约束:约束也有很多,其中一个叫做唯一性约束,这种约束添加之后,该字段中的数据不能重复。
5.关于SQL语句的分类
SQL语句有很多,最好进行分门别类,这样更容易记忆。
- DQL:
数据查询语言(凡是带有select关键字的都是查询语句)
select… - DML:
数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert delete update
insert 增
delete 删
update 改
这个主要是操作表中的数据data。 - DDL:
数据定义语言
凡是带有create、drop、alter的都是DDL。
DDL主要操作的是表的结构。不是表中的数据。
create:新建,等同于增
drop:删除
alter:修改
这个增删改和DML不同,这个主要是对表结构进行操作。 - DCL:
是数据控制语言。
例如:授权grant、撤销权限revoke… - TCL:
是事务控制语言
包括:
事务提交:commit;
事务回滚:rollback;
6.简单查询
- 查询一个字段?
select 字段名 from 表名;
其中要注意:
select和from都是关键字。
字段名和表名都是标识符。
强调:
对于SQL语句来说,是通用的,
所有的SQL语句以“;”结尾。
另外SQL语句不区分大小写,都行。 - 查询两个字段,或者多个字段怎么办?-》使用逗号隔开“,”
- 查询所有字段怎么办?
第一种方式:可以把每个字段都写上
select a,b,c,d,e,f… from tablename;
第二种方式:可以使用*
select * from tablename; - 给查询的列起别名?-》 select deptno,dname as deptname from dept;
使用as关键字起别名。
注意:只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname
记住:select语句是永远都不会进行修改操作的。(因为只负责查询)
as关键字可以省略吗?可以的(使用空格即可)
select deptno,dname deptname from dept;
假设起别名的时候,别名里面有空格,怎么办?(有空格、中文都可以用这个方法)
select deptno,dname ‘dept name’ from dept; //加单引号
注意:在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准 - 字段可以使用数学表达式!-》select ename,sal*12 from emp;
7.条件查询
- 什么是条件查询?-》不是将表中所有数据都查出来。是查询出来符合条件的。
语法格式:
select
字段1,字段2,字段3…
from
表名
where
条件; - 都有哪些条件?
①= 等于
查询薪资等于800的员工姓名和编号?
select empno,ename from emp where sal = 800;
查询SMITH的编号和薪资?
select empno,sal from emp where ename = ‘SMITH’; //字符串使用单引号
②<>或!= 不等于
查询薪资不等于800的员工姓名和编号?
select empno,ename from emp where sal != 800;
select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号
③< 小于
查询薪资小于2000的员工姓名和编号?
select empno,ename,sal from emp where sal < 2000;
④<= 小于等于
查询薪资小于等于3000的员工姓名和编号?
select empno,ename,sal from emp where sal <= 3000;
⑤> 大于
查询薪资大于3000的员工姓名和编号?
select empno,ename,sal from emp where sal > 3000;
⑥>= 大于等于
查询薪资大于等于3000的员工姓名和编号?
select empno,ename,sal from emp where sal >= 3000;
⑦between … and …. 两个值之间, 等同于 >= and <=
查询薪资在2450和3000之间的员工信息?包括2450和3000
第一种方式:>= and <= (and是并且的意思。)
select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
第二种方式:between … and …
select
empno,ename,sal
from
emp
where
sal between 2450 and 3000;
注意:
使用between and的时候,必须遵循左小右大。
between and是闭区间,包括两端的值。
⑧is null 为 null(is not null 不为空)
查询哪些员工的津贴/补助为null?
select empno,ename,sal,comm from emp where comm is null;
注意:在数据库当中null不能使用等号进行衡量。需要使用is null
因为数据库中的null代表什么也没有,它不是一个值,所以不能使用
等号衡量。
⑨and 并且
查询工作岗位是MANAGER并且工资大于2500的员工信息?
select
empno,ename,job,sal
from
emp
where
job = ‘MANAGER’ and sal > 2500;
⑩or 或者
查询工作岗位是MANAGER和SALESMAN的员工?
第一种:
select empno,ename,job from emp where job = ‘MANAGER’;
select empno,ename,job from emp where job = ‘SALESMAN’;
第二种
select
empno,ename,job
from
emp
where
job = ‘MANAGER’ or job = ‘SALESMAN’;
注意:and优先级比or高。 and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”
以后在开发中,如果不确定优先级,就加小括号就行了。
11.in(…) 包含,相当于多个 or (not in(…) 不在这个范围中)
12.not 可以取非,主要用在 is 或 in 中
is null
is not null
in
not in
13. like 称为模糊查询,支持%或下划线匹配,%匹配任意多个字符,下划线:任意一个字符。(%是一个特殊的符号,_ 也是一个特殊符号)
例如:找出名字中含有O的?-》select ename from emp where ename like ‘%O%’;
找出名字以T结尾的?-》select ename from emp where ename like ‘%T’;
找出名字以K开始的?->select ename from emp where ename like ‘K%’;
找出第二个字每是A的?->select ename from emp where ename like ‘_A%’;
8.排序
1.查询所有员工薪资,排序?
select
ename,sal
from
emp
order by
sal; // 默认是升序!!!
2.怎么降序?
指定降序:
select
ename,sal
from
emp
order by
sal desc;
3.指定升序?(默认就是升序)
select
ename,sal
from
emp
order by
sal asc;
4.可以两个字段排序吗?或者说按照多个字段排序?
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,
再按照名字升序排列。
select
ename,sal
from
emp
order by
sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。
5.根据字段的位置也可以排序
select ename,sal from emp order by 2; // 2表示第二列。第二列是sal
按照查询结果的第2列sal排序。
6.关键字顺序不能变:
select
…
from
…
where
…
order by
…
以上语句的执行顺序必须掌握:(***很重要)
第一步:from
第二步:where
第三步:select
第四步:order by(排序总是在最后执行!)
9.数据处理函数
数据处理函数又被称为单行处理函数。单行处理函数的特点:一个输入对应一个输出。和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)
单行处理函数常见的有哪些?
- lower 转换小写-》select lower(ename) as ename from emp;
- upper 转换大写-》select upper(name) as name from t_student;
- substr 取子串(substr( 被截取的字符串, 起始下标,截取的长度))-》select substr(ename, 1, 1) as ename from emp;
注意:起始下标从1开始,没有0
例如:找出员工名字第一个字母是A的员工信息?
第一种方式:模糊查询
select ename from emp where ename like ‘A%’;
第二种方式:substr函数
select
ename
from
emp
where
substr(ename,1,1) = ‘A’; - concat函数进行字符串的拼接-》select concat(empno,ename) from emp;
- length 取长度-》select length(ename) enamelength from emp;
- trim 去空格-》select * from emp where ename = trim(’ KING’);会自动把字符串里的空格给去掉
- case…when…then…when…then…else…end
当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。(注意:不修改数据库,只是将查询结果显示为工资上调)
select
ename,
job,
sal as oldsal,
(case job when ‘MANAGER’ then sal * 1.1 when ‘SALESMAN’ then sal * 1.5 else sal end) as newsal
from
emp; - round 四舍五入
select round(1236.567, 2 ) as result from emp; //保留两位小数并进行四舍五入。
select round(1236.567, 0) as result from emp; //保留整数位。
select round(1236.567, -1) as result from emp; // 保留到个位。(即个位应该都为0)
select round(1236.567, -2) as result from emp;// 保留到十位。(即个位/十位都应该为0) - rand() 生成随机数(生成0-1之间的小数) -》select round(rand()*100,0) from emp; // 100以内的随机数
10.ifnull 可以将 null 转换成一个具体值-》ifnull是空处理函数。专门处理空的。
在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。
select ename, sal + comm as salcomm from emp; 当有null时,结果均为null
select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp; 补助为NULL的时候,将补助当做0
小练习:首字母大写? -》select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;
10.分组函数(多行处理函数)
多行处理函数的特点:输入多行,最终输出一行
5个:
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:
分组函数在使用的时候必须先进行分组,然后才能用。(很重要)
如果你没有对数据进行分组,整张表默认为一组。
- 找出最高工资?-》select max(sal) from emp;
- 找出最低工资?-》select min(sal) from emp;
- 计算工资和:=》select sum(sal) from emp;
- 计算平均工资:-》select avg(sal) from emp;
- 计算员工数量?-》select count(ename) from emp;
分组函数在使用的时候需要注意哪些?
- 分组函数自动忽略NULL,你不需要提前对NULL进行处理。
- 分组函数中count()和count(具体字段)有什么区别?
count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
count():统计表当中的总行数。(只要有一行数据count则++)。因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。 - 分组函数不能够直接使用在where子句中。(很重要) 学完分组查询(group by)之后就明白了了。
- 所有的分组函数可以组合起来一起用。
例如:select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp;