MySQL数据库及常用SQL语言

数据库分为关系型数据库和非关系型数据库,我们要学的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)

对象:数据库

  • 关键字:createalterdroptruncate(删除当前表再新建一个一模一样的表结构)

  • 创建数据库: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 student rename studentplus; #修改表名 rename
alter table student add password varchar(20); #添加字段 add
alter table student change password pwd varchar(20);
alter table student modify pwd int;
alter table student drop pwd;
drop table student;
show create table student;
desc student;

2、数据操纵语言DML(Data Manipulation Language)

对象:纪录(行)

  • 关键词:insertupdatedelete

  • 插入: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、聚合函数

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

  1. count:计算个数
    一般选择非空的列:主键
    select count(id) from 表名
  2. max:计算最大值
  3. min:计算最小值
  4. sum:计算和
  5. avg:计算平均值

注意:聚合函数的计算,排除null值。

3.4、分组查询

  1. 语法:group by 分组字段;
  2. 注意:
    1. 分组之后查询的字段:分组字段、聚合函数
    2. 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、连接查询

  1. 内连接 inner join
  2. 外连接
    1>. 左连接 left join
    2>. 右连接 right join

语法格式:

select 字段名列表 from1 连接方式 join2 on1.字段=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;

你可能感兴趣的:(MySQL数据库及常用SQL语言)