• 数据操作语言


    数据插入(添加数据)

    3种形式

    形式1

    insert into  表名(字段名1,字段名2....values (a1,值a2.....)(b1,值b2.....).....

    形式2

    insert into  表名1(字段名1,字段名2....select  字段名1,字段名2....  from  表名2

    形式3

    insert  into  表名  set  字段名1=1,字段名2=2.....

    解释说明:

    1,形式1和形式2,可以一次插入多条数据;

    2,不管哪种形式,在“字段”和“值”之间,都有“一一对应”关系。

    3,值的形式,通常是这样:数字直接写,字符串和时间加单引号,但如果是函数值,则不能加引号

    4,观念问题:不管那种形式,都要理解为:插入数据的单位是“行”;

    5,有的字段通常无需插入数据,此时不应该出现该字段名:auto_incrementtimestamp

    举例:

    其他类似插入数据的语句:

    载入外部“形式整齐”的数据:

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

    类这样的数据:

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

    create  table  表名1  select  *  from  表名2

    删除数据

    基本语法形式:

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

    类似删除语句truncate

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

    1,删除整个表(数据和结构都没有了)

    2,重新创建该表(全新表)。

    3,跟delete 语句不带where条件,有什么区别?

    主要影响的是类似:auto_increment这种类型的字段值:

    truncate结果会重新计算,delete还能继续增长。

    修改数据

    基本语法:

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

    语法说明

    1, 观念问题:仍然要理解为更新是以“行”为单位进行的,虽然可以指定只更新其中的部分字段。

    2where条件子句,在应用中,同样几乎都必须有,否则很可能就失去意义,类似delete

    3order排序子句通常不需要,用于将要更新的数据指定更新的顺序。

    4limit限定子句通常不需要,用于将要更新的数据的指定顺序去更新部分(局部)数据,比如:前500行。

    5,字段的值可以是表达式,或直接值,或函数,如果是直接值,同样遵循insert语句中的值的写法。

    举例:

    复制表

    复制表方法1

    create table tab2 like tab1; //复制结构了

    insert into tab2 select * from tab1; //复制数据

    这种方法可以比较完整。

    复制表方法2

    create table tab2 select * from tab1; //同时复制结构和数据

    这种方法可能会丢一些结构信息,比如:索引,约束,自增长属性

    数据查询语言DQL 

    基本查询

    语法形式

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

    注意:顺序一定要对

    而如果有表(from子句),则对字段同样可以进行“计算”:

    还可以对表中的字段和“直接值”(或函数返回值)同时并列“取出”:

     

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

     [all | distinct]

    用于设定所select出来的数据是否允许出现重复行(完全相同的数据行)

    all:允许出现——默认不写就是All(允许的)。

    distinct:不允许出现——就是所谓的“消除重复行”。

    from子句

    就是指定数据的来源,其实就是“表”,可以是一个表名,也可以是多个表——多表查询了。

    where子句

    一个概念:where子句,相当于phpjs中的if条件语句:其最终结果就是布尔值(true/false

    phpif($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

    where中可用的运算符:

    算术运算符: +  -  *  /   %

    比较运算符: >   >=   <    <=   =(等于)   <>(不等于)   

    ==(等于,mysql扩展),!=(不等于,mysql扩展)

    逻辑运算符: and(与)  or(或)   not(非)

    布尔值:本质上,布尔值只是一位整数的“别名”,0表示false,非0表示true

    判断为true:   XX  is  true

    判断为fale:   XX  is  false

    空值的判断方式:

    判断为null:   XX  is  null

    判断为非空:   XX  is  not  null

    between语法:

    XX  between  1  and  2

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

    in语法:

    XX  in (1,值2.......)

    含义:XX等于其中所列出的任何一个值都算成立,相当于:

    XX = 1  or XX = 2  or  XX = 2

    注意:其中的值1通常是“直接值”,但也可以是后面要学习的“查询结果值”

    like语法(模糊查找):

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

    说明:

    1like语法(模糊查找)用于对字符类型的字段进行字符匹配查找

    2,要查找的字符中,有2个特殊含义的字符:

    2.1:  %   其含义是:代表任意个数的任意字符

    2.2:  _   其含义是:代表1个的任意字符

    2.3:这里的字符,都是指现实中可见的一个“符号”,而不是字节。

    3,实际应用中的模糊查找,通常都是这样:like %关键字%’;

    如果要查找的字符中包含%”或“_”,“’”,则只要对他们进行转义就可以:

    like  %ab\%cd%’ //这里要找的是: 包含 ab%cd 字符的字符

    like   ‘\_ab%’ //这里要找的是: _ab开头的字符

    like   ‘%ab’cd%’ //这里要找的是: 包含 ab’cd 字符的字符

    where子句前面必须有from子句。虽然他们2者都可以省略,但有from可以没有where,而有where必须有from

    group  by  分组子句

    形式:

    group  by  字段1  排序方式1,字段2 排序方式2.....

    通常都只进行一个字段的分组。

    含义:

    什么叫分组?就是将数据以某个字段的值为“依据”,分到不同的“组别”里。

    分组的结果通常:

    1,数据结果只能是“组”——没有数据本身的个体

    2,数据结果就可能“丢失”很多特性,比如没有性别,身高,姓名,等等。

    3,实际上,结果中通常只剩下“组”作为整体的信息:

    首先是该组的本身依据值

    另外,这几个可能的值:组内成员的个数,组内某些字段的最大值最小值平均值总和值

    其他字段,通常就不能用了

    4,如果是2个字段或以上分组,则其实是相当于对前一分组的组内,再进行后一依据的分组。

    上述说明的结果,其实是反映在select语句中,就是select的“取出项”(输出项)就基本只剩下以上信息了

    count(*):  统计一组中的数量,通常用“*”做参数

    max(字段名):获取该字段中在该组中的最大值。

    min(字段名):获取该字段中在该组中的最小值。

    sum(字段名):获取该字段中在该组中的总和。

    avg(字段名):获取该字段中在该组中的平均值。

    group_concat分组连接 显示分组后的剩余数据

    having子句

    having子句其实概念跟where子句完全一样:

    where是针对表的字段的值进行“条件判断”

    having是只针对groupby之后的“组”数据进行条件判断,即

    其不能使用:字段名>10

    但可以使用:count(字段名)>10, 或  max(price) > 2000, 但如果字段是分组依据,也可以。

    当然,通常也可以使用select中的有效的字段别名,比如:

    select count(*) as f1 , max(f1) as f2  from tab1  group by f3 having f1 > 5 and  f2 < 1000;

     

    基本查询

    orderby子句

    形式:

    order  by  排序字段1  [排序方式],  排序字段2  [排序方式].....

    说明:

    对前面取得的数据(含from子句,where子句,group子句,having子句的所有结果)来指定按某个字段的大小进行排列(排序),排序只有2种方式:

    正序: ASC(默认值),可以省略

    倒序: DESC

    如果指定多个字段排序(虽然不常见),则其含义是,在前一个字段排序中相同的那些数据里,再按后一字段的大小进行指定的排序。

    limit子句

    形式:

    limit   [起始行号start], 要取出的行数num

    说明:

    表示将前面取得的数据并前面排好之后(如果有),对之指定取得“局部连续的若干条”数据。

    起始行号start:第一行的行号为0, 可以省略,则为默认行号(0)。

    要取得的行数:如果结果集中从指定的行号开始到最后没有这么多行,则就只取到最后。

    此子句非常有用——主要用于网页上最常见的一个需求(现象):分页。

    分页原理:

    分页的前提:人为指定每页显示的条数,$pageSize = 3;

    显示(取得)第1页数据:select * from 表名 limit  0,  $pageSize;

    显示(取得)第2页数据:select * from 表名 limit  3,  $pageSize;

    显示(取得)第3页数据:select * from 表名 limit  6,  $pageSize;

    显示(取得)第$n页数据:select * from 表名 limit  ($n-1)*$pageSize,  $pageSize;

  • 相关阅读:
    spring boot基础知识
    使用PrintDocument定制打印格式
    vue刷新页面出现闪烁
    递归限制级数
    导出Excel的2个方法
    通过反射获取对象名称和值
    asp.net mvc 使用bootstrap的模态框插件modal
    记录用到的mssql的几个方法
    记录几个字符串转html的帮助类,以防忘记
    git 命令
  • 原文地址:https://www.cnblogs.com/sc1314-1218/p/8387619.html
Copyright © 2020-2023  润新知