SQL语言DML、DQL

DML(数据操作语言)

数据操作语言无非包括语句的增删改,下面对数据的增删改做详细讲解

数据插入(添加数据)

三种语法形式:

  1. insert into 表名(字段名1,字段名2,……)values(值a1, 值a2, ……), (值b1, 值b2, ……), ……;
  2. insert into 表名1(字段名1,字段名2,……) select 字段名1,字段名2,……from 表名2;(可限定表名2中插入的行数,纤细语法见下面……)
  3. insert into 表名 set 字段名1=值1,字段名2=值2,……;

解释如下:

  • 插入数据语法前面的字段名顺序与个数无需与表中字段一致,有的字段类型通常无需插入数据如:auto_increment, timestamp
  • 形式1和形式2可以一次插入多行数据,形式3一次只能插入一行
  • 三者字段和值都需一一对应
  • 值的形式:数字直接写(可加引号),字符串和时间加单引号,函数值不能加引号

举例:

SQL语言DML、DQL

其他类似插入数据的语句

当然,我们偶尔也会碰到把文件中的数据插入数据库中,这就要求文件的数据格式必须满足规范

形式:load data infile ‘文件完整名(含路径)’ into table 表名;

举例:文件如下:

SQL语言DML、DQL

载入:

SQL语言DML、DQL

复制一个表的数据和结构:

语法形式:create table 表名1 select * from 表名2;  //当然这方法有一定缺陷如易丢失数据类型属性,具体使用范围看场合而定

复制表的两种方法与区别

方法1:
Create table tab2 like tab1;	//复制结构
Insert into tab2 select *from tab1;	//复制数据
该方法比较完整
方法2:
Create table tab2 select * from tab1;	//同时复制结构和数据
容易丢失一些信息如:约束、索引

 

数据删除

基本语法形式:

    delete from 表名 [where 条件][order 排序][limit 限定];

解释如下:

  • 删除数据是以行为单位删除的
  • 通常有where条件来限定删除某行,不写则删除所有数据
  • Order排序字句和limit限定字句通常不写,否则两者一同出现
    • Order排序字句和用于设定删除数据的先后顺序
    • Limit限定字句用于限定在设定的顺序后删除指定的多行数据

类似删除语句truncate:

基本语法:

    Truncate [table]表名; //用于直接删除整个表(结构)并重新创建该表

  1. 删除整个表(数据和表结构)
  2. 重新创建该表(全新表)
  3. trunctate与delete语句不带where条件的区别:后者不会删除表结构只删除数据

举例:

SQL语言DML、DQL

 

数据修改

基本语法:

    Update 表名 set 字段名1 = 值表达式1,字段名2 = 值表达式2,……[where 条件][order 排序][limit 限定]

解释说明:

  • 修改数据以行为单位进行,可知更新其中部分字段
  • 通常有where条件来限定修改某行,不写则修改所有数据
  • Order排序字句和limit限定字句通常不写,否则两者一同出现,如修改数据的前多少行
  • 字段的值可以是表达式或直接值或函数,遵循insert语句中的值写法

举例:

SQL语言DML、DQL

 

 

数据查询语言DQL

数据查询有很多类型,每种类型的语言针对的对象都不同,先讲一下基本查询

基本查询

语法形式:

    Select [all | distinct] 字段或表达式列表[from 字句][where 字句][group by 字句][having 字句][order by 字句][limit 字句];

解释:

  • select语句从“数据源”中取出一定的数据并作为该语句的返回结果
  • 数据源可以是表也可以是“直接数据”
  • 语法结构的相对顺序不能改变

SQL语言DML、DQL    SQL语言DML、DQL   SQL语言DML、DQL

SQL语言DML、DQL

可给字段加上别名:

SQL语言DML、DQL

此语法使用表字段必须使用from

SQL语言DML、DQL

有表字段的同样可以对字段进行“计算”:

SQL语言DML、DQL

也可以对表中的字段和“直接值”同时取出:

SQL语言DML、DQL

也可使用“表名.字段名”的形式指定某个表的某个字段(通常用于多表查询)

SQL语言DML、DQL

Truncate的表与原来的表结构一样,只是内容被删除

SQL语言DML、DQL

[all | distinct]

作用:设定select返回的数据是否允许出现重复行(完全相同的数据行)

  • All: 允许出现—默认为all
  • Distinct: 不允许出现

From字句

From是来源的意思,指的是数据来源,可以是一个表或多个表

Where字句

本质:结果判断为true或者false,相当于php或js中的if条件。

	Php: if($n % 4 ==0 && $n %100 != 0 || $n %400 == 0){}
则: 
	Where true; where 1; where 1=1; 都表示true
	Where false; where 0; where 1<>1; 都表示false

SQL语言DML、DQL

Where 中可用的运算符:

  • 算术运算符:+、-、*、/、%
  • 比较运算符:>、>=、<、<=、=(等于)、<>(不等于)、==(mysql扩展)、!=(mysql扩展)
  • 逻辑运算符:and(与)、or(或)、not(非)

SQL语言DML、DQL

SQL语言DML、DQL

布尔值的判断方式:

	布尔值:本质上布尔值只是一位整数的“别名”,0表示false,非0表示true
	判断为true:	XX is true
	判断为false: XX is false
		XX应该是一个字段名且类型应该是一个整数
	实际中布尔值很少用因为可以直接使用数学大小

SQL语言DML、DQL

空值的判断方式:

判断为null:   XX is null   判断为非空: XX is not null

SQL语言DML、DQL

Between语法:

    XX between 值1 and 值2;

    含义:字段XX的值在值1和值2之间(含),相当于:XX>=值1 and XX <=值2;

SQL语言DML、DQL

In语法:

	XX in(值1,值2,……);
	含义:XX等于其中所列出的任何一个值都算成立,相当于:
		XX = 值1 or XX = 值2 or XX = 值3
	注意:其中的值1通常是“直接值”,但也可以是查询结果值

    SQL语言DML、DQL

Like语法(模糊查找):

    语法形式:XX like ‘要查找字符’;

	说明:
1,	like语法(模糊查找)用于对字符类型的字段进行字符匹配查找
2,	要查找的字符中有2个特殊含义的字符:
    a)	% 含义:代表任意个数的任意字符
    b)	_ 含义:代表1个的任意字符
    c)	字符指现实中的符号而不是字节
3,	实际应用中的模糊查找:like ‘%关键字%’;

SQL语言DML、DQL

最常见的模糊查询:

SQL语言DML、DQL

两者可配合使用:

SQL语言DML、DQL

如果要查找的字符中包含“%”或“_”,“”“ ‘ ”,只需进行转义就行:

       Like ‘%ab\%cd%’             //ab%cd

Group by分组字句

形式:

     Group by 字段1 排序方式1,字段2 排序方式2,…            //通常都是只进行一个字段的分组

含义:就是将数据以某个字段为依据分到不同的组中

分组的结果通常满足以下规律:

  • 数据结果为“组”,没有数据个体
  • 丢失很多属性,比如身高、性别等
  • 保留的信息有:组划分的依据、组内成员的个数,组内某些字段的最大值、最小值、平均值,总和值,其他字段通常不能用
  • 2个字段以上分组其实是在前一分组的基础上进行分组

SQL语言DML、DQL

可见在分组查询中基本都依赖于以下几个函数(聚合函数、统计函数):

	Count(*):统计一组中的数量,通常用’*’做参数
	Max(字段名):获取该字段中在该组中的最大值
	Min(字段名):获取该字段中在改组中的最小值
	Sum(字段名):获取该字段中在该组中的总和
	Avg(字段名):获取该字段中在该组中的平均值

SQL语言DML、DQL

两级分组:

SQL语言DML、DQL

Having字句

Having本质与where字句完全一样,只不过对象不同;

Where:针对基本表的字段进行判断; Having:针对groupby分组之后的“组”数据进行条件判断

SQL语言DML、DQL

再使用逻辑运算符:

SQL语言DML、DQL