数据库分为关系型数据库和非关系型数据库,我们要学的MySQL数据库是关系型数据库。

<>SQL语言:结构化查询语言(Structured Query Language)

结构化查询语言是关系型数据库标准语言,其特点是:简单,灵活,功能强大。

SQL包含6个部分:

* 数据查询语言(DQL):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER
BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
* 数据操作语言(DML): 其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
* 事务处理语言(TPL): 它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN
TRANSACTION,COMMIT和ROLLBACK。
* 数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
* 数据定义语言(DDL): 其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP
TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
* 指针控制语言(CCL): 它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE
CURRENT用于对一个或多个表单独行的操作。
我们使用过程中主要使用数据查询语言(DQL)数据定义语言(DDL)和数据操作语言(DML)

<>1、数据定义语言DDL(Data Definition Language)

对象:数据库和表

*
关键字:create、alter、drop、truncate(删除当前表再新建一个一模一样的表结构)

*
创建数据库:create database 库名;

*
删除数据库:drop database 库名;

*
切换数据库:use 库名;

*
创建表:create table 表名(
      字段名 类型(大小) 关系描述);

*
查看数据库里存在的表:show tables;

*
修改表:alter table 表名 约束;

*
删除表:drop table 表名 ;

*
查看生成表的sql语句:show create table 表名 ;

*
查看表结构:desc 表名;

例:
#注意在MySQL数据库里写可以不带";",但是在DOS命令下写必须带。 create database school; #建库 drop database
school; #删库 use school; #用库 create table student( #建表 id int(4) primary key
auto_increment, name varchar(20), socre int(3), ); show tables; alter table
studentrename studentplus; #修改表名 rename alter table student add password varchar
(20); #添加字段 add alter table student change password pwd varchar(20); alter table
studentmodify pwd int; alter table student drop pwd; drop table student; show
create table student; desc student;
<>2、数据操纵语言DML(Data Manipulation Language)

对象:纪录(行)

*
关键词:insert、update 、delete

*
插入:insert into 表名 values(全属性); (插入所有的字段)

insert into 表名(属性1,属性2) values (属性1,属性2); (插入指定的字段)

*
更新:update 表名 set 属性1 = ‘值’,属性2= ‘值’ where 主键(通常) = 值;

*
删除:delete from 表名 where 主键(通常) = 值;

注意:
truncate和delete的区别:truncate是删除表,再重新创建这个表。属于DDL,delete是一条一条删除表中的数据,属于DML。
insert into student values(01,'Tonny',90); insert into student(name,score)
values ('Keby',98),('somenne',78); update student set name = 'Tonn',score = '99'
where id = 01; delete from student where id = 01;
<>3、数据查询语言DQL(Data Query Language)
select ... from student where 条件 group by 分组字段 having 条件 order by 排序字段 #最复杂不过如此
执行顺序:from --> where --> group by --> having --> order by

<>3.1、条件查询

简单条件运算符:> < = != <> >= <=

逻辑运算符:&& || ! and or not (用于连接条件表达式)

模糊查询:like、between and、in、not in、is null

<>3.2、排序查询

* 语法:order by 子句
* order by 排序字段1 排序方式1 , 排序字段2 排序方式2…
* 排序方式:
* ASC:升序,默认的。
* DESC:降序。
* 注意:
* 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
<>3.3、聚合函数

将一列数据作为一个整体,进行纵向的计算。

* count:计算个数
一般选择非空的列:主键
select count(id) from 表名
* max:计算最大值
* min:计算最小值
* sum:计算和
* avg:计算平均值
注意:聚合函数的计算,排除null值。

<>3.4、分组查询

* 语法:group by 分组字段;
* 注意:
* 分组之后查询的字段:分组字段、聚合函数
* where 和 having 的区别?
* where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
* where 后不可以跟聚合函数,having可以进行聚合函数的判断。
注意:

例如:
#所有字段查询 select * from student; #带条件查询 SELECT * FROM `student` WHERE id > 1;
SELECT * FROM `student` WHERE name like '%on%'; #模糊查询 select count(id) from
student; # 综合 SELECT *,AVG(score) FROM `student` WHERE id > 1 GROUP BY id HAVING
AVG(score)>20 ORDER BY id DESC;
<>4、高级查询

<>4.1、嵌套查询

嵌套查询也叫子查询,是把内层的查询结果作为外层的查询条件,并且可以多层嵌套。

语法格式:
select 字段名列表 from 表名 where 字段名 运算符(select 字段名 from 表名 where 条件) # select *
...就是查询全部
**注意:**外层的where的条件必须和内层的select查询的字段名一样,个数也一样。

<>4.2、多表查询

语法格式:
select 字段名列表 from 表一,表二 where 条件;
但是这种查询,很容易出现笛卡尔积,为了避免,我们可以将条件尽量细致化。

笛卡尔积
1.什么是笛卡尔积:两个集合的乘积,产生一个 新的集合。表示两个集合所有的可能的组合情况
2.笛卡尔积和关系:笛卡尔积中,去掉没有意义 或不存在的组合,就是关系(规范的二维表)

* 笛卡尔积的匹配规则(面试常考点):
* 记录多的表的每一天记录,去匹配另一张表的所有记录。
* 两张表的记录条数相同时,则后表的每一条记录去匹配前表。
<>4.3、连接查询

* 内连接 inner join
* 外连接
1>. 左连接 left join
2>. 右连接 right join
语法格式:
select 字段名列表 from 表1 连接方式 join 表2 on 表1.字段=表2.字段;
左连接:left join( 以左表为基准,匹配右表的所有内容,不够的显示NULL )
右连接:right join(以右表为基准,去匹配左表的内容,不够的显示NULL )

<>4.4、联合查询

联合查询是可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合在一起,使用为此为UNINO或UNION ALL

联合查询:将多个查询的结果合并到一起(纵向合并):字段数不变,多个查询的记录数合并.
select 语句1 union[union 选项] select 语句2 union|[union 选项] select 语句n
//all:表示无论重复都输出 //distinct: 去重(整个重复)(默认的) select *from addr union all select *
from addr;

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信