目录
什么是数据库?什么是数据库管理系统?什么是SQL?他们之间是什么关系?
SQL语言分类
DDL
DQL
DML
DCL
DDL
创建表(DDL)
删除表
修改表结构
添加字段
修改字段数据类型
修改字段名和数据类型
删除字段
修改表名
DQL
查询一个字段
查询多个字段
查询所有字段
把每个字段都写上
使用*
给查询结果列起别名
条件查询
排序
查询薪资排序
单行处理函数
字符串函数
日期函数
数值函数
流程函数编辑
多行处理函数
count 计数
sum 求和
avg 平均数
max 最大值
min 最小值
注意
分组查询
连接查询
内连接
外连接
多张表的连接
执行顺序
DML
insert 插入数据
插入多条记录
update修改
delete删除
DCL
用户
查询用户
创建用户
修改密码
删除用户
权限
查询权限
授予权限
撤销权限
什么是数据库?什么是数据库管理系统?什么是SQL?他们之间是什么关系?
数据库:Database,简称DB。按照一定格式存储数据的一些文件的组合。
数据库管理系统:DatabaseManagement,简称DBMS。专门用来管理数据库中的数据,实现对数据库数据进行增删改查。
SQL:结构化查询语句
通过编写SQL语句,然后用DBMS执行SQL语句,最终来完成数据库中的数据的增删改查操作。
DBMS–执行–>SQL–操作–>DB
SQL语言分类
DDL
数据定义语言,凡是带有create 、drop、alter的都是DDL。DDL主要是操作表的结构,不是表的数据。
create :新建,等同于增
drop :删除
alter:修改
主要是对表结构进行操作
DQL
数据查询语言,带有select关键字的都是查询语句
DML
数据操作语言,对表中数据进行增删改的操作
insert 增 delete 删 update 改 主要操作表中的数据
DCL
数据控制语言 授权grant、 撤销权限 revoke
DDL
创建表(DDL)
create table 表名(
字段名1,数据类型,
字段名2,数据类型,
字段名3,数据类型
)
表明,字段名要见名知意
删除表
drop table student(表名);
修改表结构
添加字段
alter table 表名 add 字段名 类型(长度);
修改字段数据类型
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和数据类型
alter table 表名 change 旧字段名 新字段名 新数据类型(长度);
删除字段
alter table 表名 drop 字段名;
修改表名
alter table 表名 rename to 新表名;
DQL
查询一个字段
select 字段名 from 表名;
添加字段
alter table 表名 add 字段名 类型(长度);
修改字段数据类型
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和数据类型
alter table 表名 change 旧字段名 新字段名 新数据类型(长度);
删除字段
alter table 表名 drop 字段名;
修改表名
alter table 表名 rename to 新表名;
DQL
查询一个字段
select 字段名 from 表名;
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和数据类型
alter table 表名 change 旧字段名 新字段名 新数据类型(长度);
删除字段
alter table 表名 drop 字段名;
修改表名
alter table 表名 rename to 新表名;
DQL
查询一个字段
select 字段名 from 表名;
alter table 表名 drop 字段名;
修改表名
alter table 表名 rename to 新表名;
DQL
查询一个字段
select 字段名 from 表名;
select 字段名 from 表名;
select from都是关键字
字段名和表名是标识符
查询不区分大小写
查询多个字段
使用“,”隔开
select 字段名,字段名 from 表名;
查询所有字段
把每个字段都写上
select 字段名,字段名,…… from 表名;
使用*
select * from 表名;
给查询结果列起别名
select 字段名,字段名,…… from 表名;
使用*
select * from 表名;
给查询结果列起别名
使用as关键字起别名
注意:只是将显示的查询结果列名显示as 后的 ,原表列名并没有更改
as关键字可省略,使用空格
如果查询后的as 的别名有空格 使用单引号可以改变
字段可以使用数学表达式!
条件查询
不是将表中所有的数据查出来,是查询出符合条件的
语法
select 字段1,字段2,字段3,…… from 表名 where 条件;
= 等于,<>或!= 不等于,< 小于,<=小于等于,>大于,>=大于等于
排序
order by
默认升序
查询薪资排序
select ename,sal from emp order by sal;//升序
select ename,sal from emp order by sal desc;//jiang'xu
单行处理函数
字符串函数
字符串函数
Lower转换为小写
select lower(ename) from emp;
Upper转换为大写
select upper(ename) from emp;
substr取子串(被截取的字符串,起始下标,截取的长度)
select ename from emp where substr(ename,1,1)='A';//找出员工第一个字母为A
注意:起始下标从1开始,不像数组从0开始。
concat函数进行字符串的拼接
select concat(upper(substr(ename,1,1)),lower(substr(ename,2,length(ename)-1))) from emp;//首字母大写
length取长度
select length(ename) enamelength from emp;
trim去空格
trim('');
substring
substring (str,start,len)
返回从字符串str从start位置起的len个长度的字符串;
日期函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ij3qQN7N-1657356176724)(3函数.assets/image-20220706111245538.png)]
str_to_data将字符串转换成日期
date_format格式化日期
date_format('日期类型数据','日期格式');
format设置千分位
数值函数
ceil(x) 向上取整
floor(x) 向下取整
mod(x,y) 返回x/y的模
round四舍五入
rand()生成随机数
流程函数
多行处理函数
特点:输入多行,输出一行
count 计数
select count(ename) from emp;
+--------------+
| count(ename) |
+--------------+
| 14 |
+--------------+
1 row in set (0.01 sec)
sum 求和
工资和
select sum(sal) from emp;
avg 平均数
平均工资
select avg(sal) from emp;
max 最大值
最高工资
select max(sal) from emp;
min 最小值
最低工资
select min(sal) from emp;
注意
分组函数自动忽略null,不需要对null提前处理
count(*)和count(具体字段)有什么区别?
count(具体字段):表示该字段下所有不为null元素的总数
count(*): 统计表中的总行数
分组函数不能直接使用在where子句中。
分组查询
select... from ... group by ...
连接查询
内连接
分组函数自动忽略null,不需要对null提前处理
count(*)和count(具体字段)有什么区别?
count(具体字段):表示该字段下所有不为null元素的总数
count(*): 统计表中的总行数
分组函数不能直接使用在where子句中。
select... from ... group by ...
连接查询
内连接
等值连接
查询每个员工所在部门名称,显示员工名和部门名
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno order by dname;sql92 select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno order by dname;sql99(!!!!!!)
非等值连接
查出每个员工所处于工资的哪个等级
select e.ename,e.sal,s.grade from emp ejoin salgrade s on e.sal between s.losal and s.hisal;
自连接
查询员工的上级领导,要求显示员工名和对应的领导名
select a.ename,a.mgr,b.ename from emp a join emp b on b.empno=a.mgr; +--------+------+-------+ | ename | mgr | ename | +--------+------+-------+ | SMITH | 7902 | FORD | | ALLEN | 7698 | BLAKE | | WARD | 7698 | BLAKE | | JONES | 7839 | KING | | MARTIN | 7698 | BLAKE | | BLAKE | 7839 | KING | | CLARK | 7839 | KING | | SCOTT | 7566 | JONES | | TURNER | 7698 | BLAKE | | ADAMS | 7788 | SCOTT | | JAMES | 7698 | BLAKE | | FORD | 7566 | JONES | | MILLER | 7782 | CLARK | +--------+------+-------+ 13 rows in set (0.00 sec)
自连接,技巧:一张表看作两张表
外连接
外连接中有主次关系
带有left的即为左连接,带有right的叫做右连接
右外连接
right代表什么:将join右边的表看作主表,主要是为了将这张表的数据全部查询出来,捎带着关联查询左边的表;
select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno; +--------+------------+ | ename | dname | +--------+------------+ | MILLER | ACCOUNTING | | KING | ACCOUNTING | | CLARK | ACCOUNTING | | FORD | RESEARCH | | ADAMS | RESEARCH | | SCOTT | RESEARCH | | JONES | RESEARCH | | SMITH | RESEARCH | | JAMES | SALES | | TURNER | SALES | | BLAKE | SALES | | MARTIN | SALES | | WARD | SALES | | ALLEN | SALES | | NULL | OPERATIONS | +--------+------------+ 15 rows in set (0.00 sec)
左外连接
select e.ename,d.dname from dept d left join emp e on e.deptno=d.deptno;
查询每个员工的上级领导,要求显示所有员工的名字和领导名
select a.ename,b.ename from emp b right join emp a on a.mgr=b.empno; +--------+-------+ | ename | ename | +--------+-------+ | SMITH | FORD | | ALLEN | BLAKE | | WARD | BLAKE | | JONES | KING | | MARTIN | BLAKE | | BLAKE | KING | | CLARK | KING | | SCOTT | JONES | | KING | NULL | | TURNER | BLAKE | | ADAMS | SCOTT | | JAMES | BLAKE | | FORD | JONES | | MILLER | CLARK | +--------+-------+ 14 rows in set (0.00 sec)
多张表的连接
语法
select ... from a join b on a和b的条件 join c on a和c的条件 join d on a和d的条件
执行顺序
执行顺序
- from
- where
- group by
- having
- select
- order by
- limit
insert 插入数据
insert into 表名(字段名1,字段名2,字段名3...) values (值1,值2,值3...);
数量与数据类型一一对应。
insert into student(stuno,name,age,email) values (2018,'麦',21,'1215@qq.com');
插入多条记录
insert into 表名 (字段名1,字段名2,字段名3...) values (值1,值2,值3...),(值1,值2,值3...),(值1,值2,值3...);
insert into 表名 values (值1,值2,值3...),(值1,值2,值3...),(值1,值2,值3...);
没有给的字段,值为null
update修改
update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3 ... where 条件;
当没有条件限制会导致所有数据更新
delete删除
delete from 表名 where 条件;
当没有where条件是,会删除表中所有的数据。
DCL用来管理数据库用户、控制数据库的访问权限
用户
查询用户
use mysql;
select * from user;
创建用户
create user '用户名'@'主机名' identified by '密码';
修改密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户
drop user '用户名'@'主机名';
权限
查询权限
show grants for '用户名'@'主机名';
授予权限
grant 权限列表 on 数据库名,表名 to '用户名'@'主机名';
撤销权限
revoke 权限列表 on 数据库名,表名 from '用户名'@'主机名';
use mysql; select * from user;
创建用户
create user '用户名'@'主机名' identified by '密码';
修改密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户
drop user '用户名'@'主机名';
权限
查询权限
show grants for '用户名'@'主机名';
授予权限
grant 权限列表 on 数据库名,表名 to '用户名'@'主机名';
撤销权限
revoke 权限列表 on 数据库名,表名 from '用户名'@'主机名';
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户
drop user '用户名'@'主机名';
权限
查询权限
show grants for '用户名'@'主机名';
授予权限
grant 权限列表 on 数据库名,表名 to '用户名'@'主机名';
撤销权限
revoke 权限列表 on 数据库名,表名 from '用户名'@'主机名';
查询权限
show grants for '用户名'@'主机名';
授予权限
grant 权限列表 on 数据库名,表名 to '用户名'@'主机名';
撤销权限
revoke 权限列表 on 数据库名,表名 from '用户名'@'主机名';
grant 权限列表 on 数据库名,表名 to '用户名'@'主机名';



