1. 基础语法与查询

1. 简介

1.1. 为什么要使用数据库?

  • 能够提供大规模数据支持
  • 能提供各种编程语言支持
  • 提供数据之间的关联关系

1.2. MySQL的结构

  • 由许多的数据库组成,数据库中有很多表,表中有很多数据

2. 语法

SQL语句分类:

  • DDL(Data Definition Language)数据定义语言
    用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等

  • DML(Data Manipulation Language)数据操作语言
    用来对数据库中表的数据进行增删改。关键字:insert, delete, update等

  • DQL(Data Query Language) 数据查询语言 (掌握)

    DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以把查询语句的语句称作为DQL语言

  • DCL(Data Control Language)数据控制语言(了解)

    用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等

  • TCL(Transaction Control Language) 事务控制语言或TPL事务处理语言

    用于控制数据库的事务操作,关键字; COMMIT,SAVEPOINT,ROLLBACK等

  • CCL(Cursor Control Language)指针控制语言(了解)

    像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。多用于存储过程中对结果集的处理。

2.1 插入数据

  • 插入单行数据
insert into 表名(列名,列名,列名,...) values(值,值,值,...);
  • 插入多行数据
insert into 表名(列名,列名,列名,...) values(值,值,值,...),value(值,值,值,...);

2.2 修改数据

update 表名 set 列名=值;

2.3 删除数据

delete from 表名 where 列名=值;

2.4 查询数据

  • 查询所有数据
select * from 表名;
  • 查询多列数据
select 列名,列名,列名 from 表名;

2.5 条件语句

  • where

  • =,>=,<=,>,<,!=

  • and

  • or

  • like

    • 姓王的人: ‘王%’
    • 以王结尾:‘%王’
    • 包含王:‘%王%’
  • in:在什么范围内

  • --查询id为1,2,3的人
    select * from 表名 where id in (1,2,3)
    
  • not in:不在什么范围内

  • --查询id为1,2,3的人
    select * from 表名 where id not in (1,2,3)
    
  • distinct:重复数据只显示一条

  • --查询不重复的地址
    select distinct(address) from 表名
    

3. 聚合函数

  • count:计数器
select count(列名) from 表名
  • sum:求和(若列名为非数值型则输出0)
select sum(列名) from 表名
  • max:最大值(若列名为非数值型则输出ASCII码最大值)
select max(列名) from 表名
  • min:最小值(若列名为非数值型则输出ASCII码最小值)
select min(列名) from 表名
  • avg:平均值(若列名为非数值型则输出0)
select avg(列名) from 表名

4. 分组函数

  • group by:使用之后,聚合函数会作用在每个分组上,分组后相当于变成新的表
select 列名,count(列名) from 表名 GROUP BY 列名;
  • having:表示分组后过滤条件,和where类似。但having只能和group by一起使用,不能单独使用

  • where 和 having的区别:where是分组前过滤,having是分组后过滤。

  • 注意:使用时需要保证select之后的列名需要在group by之后存在(聚合函数除外),否则会报错;另外,如果使用分组后得到的值不会发生改变,则可以未被上述规则。

  • 例如:

    idname
    1张三
    1张三
    2李四
    2李四

    使用group by分组后:

idname
1张三
2李四

这种情况下分组前后id所对应的name值都是固定的,可以违反上述规则。

这时sql语句可以写为:

select id,name from 表名 group by id;
-- name不存在于group by之后却可以执行查询语句得到结果

5. 分页及排序

  • order by :排序:

asc:升序排列

desc:降序排列

select 列名 FROM 表名 ORDER BY 列名 asc
select 列名 FROM 表名 ORDER BY 列名 desc
  • 分页

第一个数表示从那条开始查询(0开始)

第二个数表示每次查询出几条

--从0开始查询出2条数据
select 列名 FROM 表名 LIMIT 0,2

6. 嵌套查询

  • 注意:子查询语句作为表或者列名使用时都必须有一个别名

  • 把两个查询语句套在一起,把括号内的子语句看作一张新的表,并给他取别名。

select 列名 from (select 列名 from 表名 where 列名 = 值) 别名 where 别名.列名 = 值
  • 把两个查询语句套在一起,把括号内的子语句看作一个值。
select 列名 from 表名 where 列名 = (select 列名 from 表名 where 列名 = 值)
  • 把两个查询语句套在一起,把括号内的子语句看作一个列名。
select 列名,(select 列名 from 表名 where 列名 = 值) 别名 from 表名 where 列名 = 值

7. 关联查询

在做项目时,通常我们会分析现实中的业务有哪些实体,通常一个大的实体就需要创建一张表。例如班级和学生,我们会创建2张表,一张存储班级,一张存储学生。

左连接

以左表为主,左表全部记录都会查询出来,右表只会查询关联的数据

在这里插入图片描述

右连接

以右表为主,右表全部记录都会查询出来,左表只会查询关联的数据

在这里插入图片描述

内连接

只查询两表关联的数据。

在这里插入图片描述

左外连接

只查左表中与右表无关联的数据

在这里插入图片描述

右外连接

只查右表中与左表无关联的数据

在这里插入图片描述

全连接

两表数据全查出来

在这里插入图片描述

union与union all

union和union all可以用来连接两个不同的sql的结果。

区别在于,union会去重,union all会全部显示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值