MySQL的DDL、DML、DQL基本语法

DDL (数据定义语言)   :CREATE、ALTER、DROP

DML (数据操作语言):INSERT、UPDATE、DELETE

DQL (数据查询语言):SELECT


DDL:

创建一个表:基本语法

        CREATE TABLE [ IF NOT EXISTS ] `表名` (

                `字段名1` 字段类型 [ 属性 ] [ 索引 ] [注释] ,

                `字段名2` 字段类型 [ 属性 ] [ 索引 ] [注释] ,

                … …

                `字段名n` 字段类型 [ 属性 ] [ 索引 ] [注释]

        )  ;

扫描二维码关注公众号,回复: 15497200 查看本文章

        “[]” 包含的内容可以省略;

     添加非空约束、删除非空约束

        alter table 表名 modify test_student char(10) not null;

    添加唯一约束

        alter table 表名 add unique(表字段名,字段,字段,字段);

                删除unique约束

                        alter table 表名 drop index 唯一约束名;

    添加主键约束

        alter table 表名 add primary key(表的字段名,字段,字段)

                删除primary key约束

                        alter table 表名 drop primary key

    添加外键约束

        alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名)

                删除foreign key约束

                        alter table 表名 drop foreign key 外键名;


DML:

增加数据:

        INSERT INTO `表名` [(`字段1`,`字段2`,...`字段n`)] VALUES/VALUE  ('值1','值2',...'值n')

      “[]” 包含的内容可以省略;

修改数据:

        UPDATE 表名 SET `字段名1` = '值1' [ , `字段名2` = '值2', …. ] [ WHERE 条件]

        “[]” 包含的内容可以省略;

删除数据:

DELETE FROM 表名 [ WHERE 条件];

TRUNCATE [TABLE] 表名;--TRUNCATE是一个特殊的删除语句,又叫做清空语句;


TRUNCATE、DELETE、DROP三个删除的区别:

        1.都可以删除数据

        2.DELETE属于DML,删除的数据可以回滚;TRUNCATE、DROP属于DDL,删除的数据不可以回滚。

        3.DELETE不会自动提交事务,TRUNCATE、DROP会自动提交事务

        4.TRUNCATE、DELETE只删除数据,不删除表结构;而DROP删除的数据会删除表的结构

        5.三个的速度DROP > TRUNCATE > DELETE


DQL:

查询语句语法规则:

        SELECT [DISTINCT]

        {*|表1.*|[ 表1.字段1 [as 字段别名1]

        [, 表1.字段2[as 字段别名2]][, …]]}

        FROM 表1 [ as 表别名 ]

        [ left|right|inner join 表2 on 表之间 的关系 ]

        [ WHERE ]

        [ GROUP BY ]

        [ HAVING]

        [ ORDER BY]

        [ LIMIT {[ 位置偏移量,] 行数 }] ;

设定DISTINCT可以去掉重复记录。

        SELECT DISTINCT 字段名1, 字段名2... FROM 表名

                AS 表名或者字段名过长时,可以用AS关键字起别名,方便操作。

                GROUP BY 按组分类显示查询出的数据。

                HAVING GROUP BY分组时依赖的分组条件。

                ORDER BY 将查询出来的结果集按照一定顺序排序完成。

                LIMIT 限制显示查询结果的条数

以上的查询关键字顺序严格遵守,不能改变。

查询指定字段:

        SELECT * | 字段名1, 字段名2... FROM 表名

查询表别名和字段别名:

    SELECT 表别名.字段名1 AS 字段别名1, 表别名.字段名2 AS 字段别名2 FROM 表名 AS 表别名

WHERE条件子句:

    SELECT * FROM 表名 [ WHERE 条件];

LIKE 关键字,模糊查询:

    SELECT * FROM 表名 WHERE 字段 LIKE 条件;

                与“%”一起使用,表示匹配0或任意多个字符;

                • 与“_”一起使用,表示匹配单个字符。

IN 关键字:

    SELECT * FROM 表名 WHERE 字段 IN (值1,值2...);

        查询的字段的值,至少与IN 后的括号中的一个值相同;

NULL 值查询:

    SELECT * FROM 表名 WHERE 字段 IS NULL | IS NOT NULL

        NULL代表“无值”;

        区别于零值0和空符串;

        只能出现在定义允许为NULL的字段;

        须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。

GROUP BY:

        1、对所有的数据进行分组统计;

        2、分组的依据字段可以有多个,并依次分组

HAVING:

        与GROUP BY结合使用,进行分组后的数据筛选

ORDER BY排序:

        SELECT * FROM 表名 ORDER BY 字段名 [DESC|ASC]

               DESC表示排序的顺序为降序,ASC表示排序的顺序为升序

LIMIT关键字:

        SELECT * FROM 表名 LIMIT [n , m]

        LIMIT限制SELECT返回结果的行数; •

        n 表示第一条记录的偏移量,m 表示显示记录的数量

    分页显示:

SELECT 字段1,...字段n FROM 表 WHERE 条件 LIMIT ( 当前页码 - 1 ) * 页面容量 , 页面容量

多表联查:

        等值查询和非等值查询:

                非等值查询:SELECT * FROM 表1,表2

                等值查询:SELECT * FROM 表1,表2 WHERE 表1.字段1 = 表2.字段2..

连接查询:

    SELECT * FROM 表1 LEFT|right|INNER JOIN 表2 ON 条件

        LEFT JOIN :

                从左表(表1)中返回所有的记录,即便在右 (表2)中没有匹配的行。

        RIGHT JOIN

                从右表(table_2)中返回所有的记录,即便 在左(table_1)中没有匹配的行。

        INNER JOIN

                在表中至少一个匹配时,则返回记录。

union:是求两个查询的并集。

union合并的是结果集,不区分来自于哪一张表,所以可以合并多张表查询出来的数据

        语法:

                select A.field1 as f1, A.field2 as f2 from A

                union (select B.field3 as f1, field4 as f2 from B) order by 字段 desc/asc

        注意:

                1.列名不一致时,会以第一张表的表头为准,并对其栏目。

                2.会将重复的行过滤掉。

                3.如果查询的表的列数量不相等时,会报错。

                4.在每个子句中的排序是没有意义的,mysql在进行合并的时候会忽略掉。

                5.如果子句中的排序和limit进行结合是有意义的。

                6.可以对合并后的整表进行排序

union all 是求两个查询的并集,但是不会把重复的过滤掉,而是全部显示出来

子查询:

        1. where 型子查询

        2. from型子查询

        3. exists型子查询

        4. any, some, all子查询

case when then end 语句:

(1)简单Case函数

        select 字段1,字段2....

                case 字段

                        WHEN 字段值 THEN 修改后的值

                        WHEN 字段值 THEN 修改后的值

                        ELSE 其他值

                end ,

        字段 from 表名;

(2) Case搜索函数

select 字段1,字段2

        case

        WHEN 字段=字段值 THEN 修改后的值

        WHEN 字段=字段值 THEN 修改后的值

        ELSE 其它值

        END,

        字段

        from 表名

本篇完

猜你喜欢

转载自blog.csdn.net/m0_48011056/article/details/125942429