文章目录
简介
1、sql、DB、DBMS分别是什么,他们之间的关系
DB:
DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)
DBMS:
DataBase Management System(数据库管理系统,常见的有:MySQL Oracle DB2 Sybase SqlServer…)
SQL:
结构化查询语言,是一门标准通用的语言。标准的sql适合于所有的数据库产品。
SQL属于高级语言。只要能看懂英语单词的,写出来的sql语句,可以读懂什么意思。
SQL语句在执行的时候,实际上内部也会先进行编译,然后再执行sql。(sql语句的编译由DBMS完成。)
DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。
DBMS -(执行)-> SQL -(操作)-> DB
SQL语句分类:
DQL(数据查询语言): 查询语句,凡是select语句都是DQL。
DML(数据操作语言):insert delete update,对表当中的数据进行增删改。
DDL(数据定义语言):create drop alter,对表结构的增删改。
TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction)
DCL(数据控制语言): grant授权、revoke撤销权限等。
2、DOS命令窗口简单操作MySQL
导入语句:
-
(1):登录mysql数据库管理系统
dos命令窗口:
mysql -uroot -p333 -
(2):查看有哪些数据库
show databases; (这个不是SQL语句,属于MySQL的命令。) -
(3):创建属于我们自己的数据库
create database bjpowernode; (这个不是SQL语句,属于MySQL的命令。) -
(4):使用bjpowernode数据
use bjpowernode; (这个不是SQL语句,属于MySQL的命令。) -
(5):查看当前使用的数据库中有哪些表?
show tables; (这个不是SQL语句,属于MySQL的命令。) -
(6):初始化数据
mysql> source D:\course\05-MySQL\resources\bjpowernode.sql -
(7):删除数据库: drop database bjpowernode;
-
(8)查看表结构: mysql> desc dept; dept可以换成emp,salgrade等;
DQL语句(凡是select语句都是DQL)
DQL语句的格式:(执行顺序)
select 5
…
from 1
…
where 2
…
group by 3
…
having 4
…
order by 6
…
1、常用命令
- mysql> select * from emp; 查询emp表中的数据
- mysql> select database(); 查看当前使用的是哪个数据库
- mysql> select version(); 查看mysql的版本号。
- \c 命令,结束一条语句。 exit 命令,退出mysql。
- mysql> show create table emp; 查看创建表的语句
2.简单的查询语句(DQL)
语法格式:
mysql> select 字段名1,字段名2,字段名3,… from 表名;
提示:
1、任何一条sql语句以“;”结尾。
2、sql语句不区分大小写。
- mysql> select ename,sal * 12 from emp; 查询员工的年薪?(字段可以参与数学运算。)
- mysql> select ename,sal * 12 as yearsal from emp; (as)给查询结果的列重命名
- mysql> select ename,sal * 12 as ‘年薪’ from emp; (单引号中文命名)
- mysql> select empno,ename,sal * 12 yearsal from emp; as关键字可以省略?以空格形式表示。
- mysql> select * from emp; 查询所有字段
3.条件查询
语法格式:(执行顺序)
select 3
字段,字段…
from 1
表名
where 2
条件;
- mysql> select ename from emp where sal = 5000; 查询工资等于5000的员工姓名
- mysql> select sal from emp where ename = ‘SMITH’; 查询SMITH的工资
找出工资不等于3000的,下面2个语句都行
- mysql>select ename,sal from emp where sal <> 3000;
- mysql> select ename,sal from emp where sal != 3000;
- mysql> select ename,sal from emp where sal >= 1100 and sal <= 3000;
或者 mysql> select ename,sal from emp where sal between 1100 and 3000; // between…and…(在使用的时候必须左小右大)是闭区间 [1100 ~ 3000] - mysql> select ename from emp where ename between ‘A’ and ‘C’; 用在字符串方面
- mysql> select ename,sal,comm from emp where comm is null; 空不是一个值,不能用等号衡量。必须使用 is null或者is not null
- mysql> select ename,job from emp where job = ‘MANAGER’ or job = ‘SALESMAN’; 找出工作岗位是MANAGER和SALESMAN的员工
- mysql> select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30); (and优先级高于or) 找出薪资大于1000的并且部门编号是20或30部门的员工
- mysql> select ename,job from emp where job in(‘SALESMAN’, ‘MANAGER’); in等同于or
- mysql>select ename,job from emp where sal not in(800, 5000); not in: 不在这几个值当中。
- 模糊查询like
找出名字当中含有O的
(在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_,
%代表任意多个字符,_代表任意1个字符) - mysql> select ename from emp where ename like ‘_A%’; 找出名字中第二个字母是A
- mysql> select name from emp where name like ‘%_%’; 找出名字中有下划线的
4.排序(升序、降序)
执行顺序:
select 2
ename,sal
from 1
emp
order by 3
sal;
注意:默认是升序。asc表示升序,desc表示降序。
- mysql> select ename , sal from emp order by sal; // 升序
mysql> select ename , sal from emp order by sal asc; // 升序
mysql> select ename , sal from emp order by sal desc; // 降序 - mysql> select ename,sal from emp order by sal desc , ename asc; 越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段。
- select
字段 3
from
表名 1
where
条件 2
order by 4
… - mysql> select ename,job,sal from emp where job = ‘SALESMAN’ order by sal desc;
5.分组函数
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
注意:分组函数一共5个。
分组函数还有另一个名字:多行处理函数。
多行处理函数的特点:输入多行,最终输出的结果是1行。
分组函数 自动忽略NULL。
分组函数也能组合起来用:
- mysql> select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;
- mysql> select ename,sal from emp where sal > (select avg(sal) from emp); 找出工资高于平均工资的员工
group by 和 having(和分组函数联合使用)
- group by : 按照某个字段或者某些字段进行分组。
- having : having是对(group by)分组之后的数据进行再次过滤,只有group by出现才能用。
- mysql> select max(sal),deptno from emp group by deptno having max(sal) > 2900;
- mysql> select max(sal),deptno from emp where sal > 2900 group by deptno; // 效率较高,建议能够使用where过滤的尽量使用where。
6.单行处理函数:输入一行,输出一行
- mysql> select ename,ifnull(comm,0) as comm from emp; null当0处理
ifnull(可能为NULL的数据,被当做什么处理) : 属于单行处理函数