1.语句分类
DQL:数据查询语言(带有select关键字的都是查询语句)
DML:数据操作语言(对表中数据进行增删查的)
- insert增
- delete删
- update改
DDL:数据定义语言(对表结构的操作)
- create新建
- drop删除
- alter修改
TCL:事务控制语言
- commit事务提交
- rollback事务回滚
DCL:数据控制语言
- grant授权
- revoke取消授权
语句执行顺序与书写顺序
- from select
- where from
- group by where
- having group by
- select having
- order by order by
2.DQL语句
- desc 表名; 查看表结构
- select database(); 查看当前数据库
- select 列名 as 别名 from 表;也可省略 as 使用空格:select 列名 别名 from 表;
如果别名里有空格则select 列名 '别 名' from 表;单引号括起来
- SELECT DISTINCT university FROM user_profile;distinct 去重 或者分组去重
SELECT university FROM user_profile GROUP BY university;
- order by 字段 排序方式; 按指定字段排序,默认升序。降序字段后加desc。升序asc。
可以设置多个排序条件,前面都符合时按后面的,逗号分隔。
- case when 情况 than 怎么做 when ... than .... Else 剩余情况处理 end;
类似于 if else 循环 当查到一个符合条件后面的不在比较
2.1.连接
- 内连接(查询出所有符合条件的)
select *
from
stu u(别名)
inner(可省略) join (内连接)
sc c(别名)
on
u.s_id=c.s_id(连接条件)
where
(筛选条件)
on条件为等值时叫做内连接之等值连接,此外还有非等值连接,如:
u.year between year.start and year.end;求出学生的入学年份在年级表里对应的年级。
此外内连接还可以自连接,即一张表看做两张表
SELECT
a.ename as '员工',b.ename as'领导'
FROM
emp a
inner join
emp b
ON
a.mgr = b.empno;
查询一张员工表里的领导关系
- 外连接(查询出要求的表的全部,左连接显示左表全部,右同理,二者可相互转换)
select *
from
stu
left join
sc
on
stu.s_id=sc.s_id;
这里部分stu对应的sc为空,但也显示出来
- 多表连接
SELECT
......
FROM
a
JOIN
b
ON
a和b连接条件
JOIN
c
ON
a和c连接条件
JOIN可内外连接混合使用
.0
3.DDL与DML
- create创建表
create table 表名(
字段 类型,
字段 类型,
字段 类型
);
- insert插入数据
insert into 表名(字段1,字段2.....)
values(值1,值2....)
字段和后面的值数量和数据类型对应
4.视图
视图的创建
create view 视图名 as select....;
删除视图
drop view 视图名;
视图的创建as后面只能跟DQL语句。
可以对视图进行增删改查(CRUD),会影响到原表数据。表连接的视图也可以。
5.DBA命令
创建用户
create user 用户名 identifide by '密码';
数据导出
CMD命令行下
mysqldump 数据库名 (导出指定表时,空格加表名)>目录\数据库名.sql -u用户名 -p密码
数据导入
1.登录数据库 2.创建数据库 3.使用数据库
source 目录\sql文件
6.范式
- 任何一个表都要有主键,每个字段原子性不可再分。
- 1的基础上,非主键字段完全依赖主键,无部分依赖。
部分依赖即依赖部分符合主键
- 2的基础上,非主键字段直接依赖主键,无传递依赖。
实际开发中可以拿冗余换速度。