在Mysql的学习过程中,比较常用就是:DML,DDL和DQL,下面就对这几个常用语句进行详细的介绍,三种语言常用的命令如下图所示:
一、DDL(数据自定义语句)
1.creat:通常用这个命令来创建一个数据库或者创建一个数据表,语法如下:
①create database 数据库名; --创建一个数据库
②create table 表名(
字段名 数据类型 属性 约束条件,
字段名 数据类型 属性 约束条件,
.....
字段名 数据类型 属性
);
我们在建立数据表的时候,语句里面有几个需要注意的地方:
a.属性和约束条件不是必须的,可以省略
b.最后一个字段后面是没有 , 的
c.同一张表中,字段名是不能相同的
这两个语句的用法如下图所示(关于语句中的属性和约束,后面我会发文章详细描述:
2.drop:通常会用这个命令来删除数据表,也会和其他命令一起使用来删除表中的字段,常用命令如下:
①drop table 表名 -- 删除数据表
3.alter:通常用这个命令来修改表的结构
①alter table 旧表名 rename as 新表名; --修改表名
②alter table 表名 modify 字段名 列类型【属性】; --修改字段属性
③alter table 表名 change 旧字段名 新字段名 列类型 【属性】 --修改字段名和属性
需要注意的是上面modify和change两个语句都可以修改字段的属性,不同的是change同时可以修改字段的名称,但是modify不行
④alter table 表名 drop 字段名; --删除字段
⑤alter table 表名 add 字段名 类型 属性; -- 添加字段
以上几条语句的简单用法如下图所示:
二、DML(数据操作语句)
1.insert:通常用这条语句来新增数据,下面就来给学生表中新增一些数据
①insert into 表名(字段1,字段2.....)values (字段1对应类型的值,字段2对应类型的值.....);
-- 新增数据(这里需要注意的一点是我们在新增日期类型数据时要用字符串表示)
2.update:修改数据
①update 表名 set 字段名=值(注意是修改后的值) where 条件; -- 修改数据
3.detele:删除数据
②truncate 【table】 表名;-- 这个语句很简单就是清空一张表的数据,其中table可以省略
三、DQL(数据查询语句) 这个语句在数据库中是比较重要的,具体语句如下:
单表查询:
1.简单查询语法
①select 字段/* from 表名; --从一张表里查询相应的数据(*表示全部数据)
②select 字段 新字段名 from 表名: --在查询字段数据时可以给字段起别名
③select distinct 字段名 from 表名; --可以对查询出来的数据做去重处理
2.DQL条件查询语法(关于条件查询有几个关键字,下面这些例子就是这些关键字的简单用法)
①where关键字(条件查询)
select 字段名 from 表名 where 条件;
② like关键字(模糊查询):经常会和%(表示若干个字符)_(表示一个字符)一起使用
select 字段名 from 表名 where 字段 like 条件;
select 字段名 from 表名 where 字段 in (值1,值2....);
③null值查询:这里需要注意的是,对null值查询的关键字要用is
④group by分组查询和having(分组查询):经常会和聚合函数一起使用
select 字段 from 表名 group by 字段名 having 条件;
常用的聚合函数: avg(字段名)——求平均值,sum(字段名)——求和 ,max(字段名)——求最大值, min(字段名)——求最小值, count(字段名)——求总和,这五个聚合函数的是用的比较频繁的,用法也不是很复杂,下面就举一个和分组查询相结合的例子:
⑤order by(排序):这里需要主要的是在排序时要搭配两个关键字 asc(升序排序,可以省略)和desc(降序排序,不可省略,如果省略系统会默认为升序)
select 字段 from 表名 order by 字段名 desc/asc;
⑥limit(限制查询关键字):通常用来限制查询页数
select 字段 from 表名 limit n,m;--通俗的讲就是查询从第n(不包含n)条数据开始,长度为m的几条数据,经常会用这个关键字来实现数据的分页查询,此时n和m的值就可以用公式来表示
n=(页码-1)*每页显示的数据数量,m=每页显示的数据数量
3.DQL高级查询语句
①多表联查
非等值查询:select * from 表1,表2;--需要注意的是这种不加判断的查询方法,查询出来的数据会有重复,可能得不到想要的数据,所以大多数情况下我们会采用等值联查的方式查询数据。
等值查询:
a.内联查询:
写法一:SELECT 字段名 FROM 表名... where 条件判断 AND 条件判断
写法二:select * from 表名 inner join 表名 on 等值条件判断 where 条件;
以上两种写法都可以达到同样的查询效果,我们可以根据自己的需要来选择使用哪种查询方式
b. 外联查询:
select * from 表名 left join 表名 on 等值判断条件 where 判断条件;--左联查
select * from 表名 right join 表名 on 等值判断条件 where 判断条件;--右联查
外联查询和内联查询,虽然都可以拿到我们想要查询的数据,他俩还是有一些区别:
如上图所示:
a.内联查询:select * from 表A inner join 表B on 等值判断条件;
这条内联查询语句其实就是查询 表A 和 表B 共有的数据 集C
b.左外查询:select * from 表A left jion 表B on 等值判断条件;
这条左联查询语句其实就是将 jion 左边的表A作为主表,先拿出表A所有的数据,然后 再根据等值判断条件,查询出表A和表B共有的数据集 C,所以查询的结果就是图中:表A数据集+C数据集
c.右联查询:select * from 表A right join 表B on 等值判断条件;
这条右连结查询语句的原理和左连接差不多,只是把join右边的表B作为主表,先查询出表B中所有的数据,然后在根据判断条件查询出表B和表A共有的数据集C,所以得到的结果就是图中: 表B数据集+C数据集
再强调一点,左联和右联的判断依据是jion关键字的左边和右边作为主表。
②子查询
a.where子查询(把查询出来的数据集作为where后面的条件判断)
如下图所示,将学号最大的学生查询出来作为where判断的条件,where子查询的写法
b.from子查询(把内层的查询结果当成一个临时表,供外层的查询来用,临时表在使用时最好要起个别名)
c. exist子查询(exists后面跟上内层查询,如果这个内层查询成立,外层查询才会生效,最终查出的结果是外层查询的数据)
d.any/some(这两种子查询必须和条件判断符一起使用)
select * from 表名 where a>any(2,3,4); 这条语句相当于下面这条
select * from 表名 where a>2 or a>3 or a>4;
some和any的用法是一模一样的,只是名字不同
e.all子查询(这种子查询和any类似,只是后面的需要满足全部的条件判断)
select * from 表名 where a>all(2,3,4); 这条语句相当于下面这条