MySql(十七)联合查询和DML语言

    xiaoxiao2024-12-02  57

    文章目录

    联合查询DML语言插入语句修改语句修改单表的记录 修改多表的记录删除单表的删除多表删除

    联合查询

    union 联合,合并:将多条查询语句的结果合成一个结果

    语法:

    查询语句1

    UNION

    查询语句2

    UNION

    查询语句n;

    /**查询部门编号>30或邮箱中包含a的信息**/ SELECT * FROM employees WHERE department_id > 30 UNION SELECT * FROM employees WHERE email LIKE '%a%' ;

    表:china

    c_idc_namec_sex男

    表forei

    f_idf_namef_sexmale /**查询中国用户中所有男性的信息以及外国用户中所有男性的信息**/ SELECT * FROM china WHERE e_sex = '男' UNION SELECT * FROM forei WHERE f_sex = 'male'

    适用于查询多张表的信息,而且表和表之间没有直接的连接关系,但是查询的信息一致时就可以使用联合查询

    注意事项:

    要求多条查询语句的查询列数一致要求多条查询语句的查询的每一列的类型和顺序最好是一致使用UNIION关键字默认是去重的;如果使用UNION ALL则可以包含重复项

    DML语言

    DML:数据操作语言。分别涉及了插入(insert)、删除(delete)、修改(update)

    注:字符型数据和日期型数据再插入的时候要加单引号

    插入语句

    语法:

    插入方法一:

    insert into 表名

    (列1名,列2名…列n名)

    values

    (列1值,列2值,…列n值);

    插入注意事项:

    插入的值的类型要和列的类型相一致或者兼容(即可以相互转换)不可以为null的列必须插入值要插入的列数和值一定要一一对应插入的是有也可以省略列名,但这里默认的是插入表中所有列的数据

    插入方法二:

    insert into 表名

    set 列1名 = 列1值,

    列2名= 列2值

    列n名= 列n值;

    方法一和方法二的区别:

    方法一支持多行插入但是方法二不支持

    给表student插入三行数据:

    insert into student

    (1,‘张三’,‘男’),

    (2,‘李四’,‘男’),

    (3,‘王五’,‘男’);

    方法一支持子查询,方法二不支持

    因为先执行select语句,将select语句执行的结果集作为数据插入表student中

    insert into student

    (id,name,sex)

    select (4,‘赵六’,‘男’);

    将表boy中id<3的数据插入到student表中

    insert into student

    (id,name,sex)

    select (id,name,sex) from boy where id ❤️;

    修改语句

    修改单表的记录

    语法:

    更新所有行中包含这些列的数据

    update 表名

    set 列1名 = 列1值,

    ​ 列2名= 列2值

    ​ …

    ​ 列n名= 列n值;

    更新满足行中包含这些列的数据

    update 表名

    set 列1名 = 列1值,

    ​ 列2名= 列2值,

    ​ …

    ​ 列n名= 列n值 //这里没有逗号结尾

    WHERE 筛选条件;

    UPDATE student SET name = 'tom' WHERE id = 1;

    修改多表的记录

    sql92语法:

    UPDATE 表1 别名,表2 别名 SET 列 = 值 WHERE 连接条件 AND 筛选条件;

    sql99语法

    UPDATE 表1 别名 [连接类型] JOIN 表2 别名 ON 连接条件 SET 列 = 值 WHERE 筛选条件;

    表beauty

    idnamesexphoneborndateboyfriend1柳岩女150908337722018-1-212AngleBaby女190373990022012-3-233赵丽颖女159098771121998-2-144赵敏女159802918541998-2-325周芷若女158920413351993-12-426金星女183908332201992-1-29

    表boy

    idboynameusercp(魅力值)1大鹏1002张无忌3393黄晓明994冯绍峰4005男神·500

    案例一:修改张无忌的女朋友的手机号为110

    UPDATE FROM beauty bea,boy b SET phone = '110' WHERE bea.'boyfriend' = b.'id' AND b.name = '张无忌';

    案例2:修改没有的男朋友的女神的男朋友编号都为5号

    注:如果女神的boyfriend在boy中没有找到则视为没有男朋友

    分析:

    找出beauty中有而boy中没有的数据,即采用的是外连接将boyfriend改为5 UPDATE beauty bea LEFT JOIN boy b ON bea.'boyfriend' = b.'id' SET bea.'boyfriend' = 5 WHERE b.id IS NULL;

    删除

    语法:

    单表的删除

    方式一:delete

    删除整张表

    delete from 表名;

    按照条件删除记录

    delete from 表名 where 筛选条件;

    方式二:truncate

    truncate table 表名;

    注:truncate后面不可以跟筛选条件,因此是将整张表全部删除

    delete和truncate的区别:

    delete可以添加where条件;truncate不能加

    truncate效率会更高一些

    假如要删除的表中有自增长列:如果用delete删除后,在插入数据,自增长列的值从断点处开始;

    如果用truncate删除,数字增长列的值则是从1处开始

    delete删除有返回值;truncate删除没有返回值

    delete删除可以回滚;truncate删除不能回滚

    表beauty

    idnamesexphoneborndateboyfriend1柳岩女150908337722018-1-212AngleBaby女190373990022012-3-233赵丽颖女159098771121998-2-144赵敏女159802918541998-2-32

    案例一:删除beauty表中手机号以4结尾的女神信息

    DELETE FROM beauty WHERE phone LIKE '%9';

    多表删除

    sql92

    delete 表1的别名,表2的别名

    from 表1 别名,表2 别名

    where 连接条件

    and 筛选条件

    注:delete后面的别名根据自己要删除记录的需求来填写,如果仅需要删除满足条件表1里面的记录删除,那么delete后面只需要写表1的别名即可

    sql99

    delete 表1的别名,表2的别名

    from 表1 别名

    [连接类型] join 表2 别名

    on 连接条件

    where 筛选条件;

    案例二:删除张无忌的女朋友的信息

    /**sql92**/ DELETE bea FROM beauty bea,boy b WHERE bea.'boyfriend' = b.'id' AND b.name = '张无忌'; /**sql99**/ DELETE bea FROM beauty bea INNER JOIN boy b ON bea.'boyfriend' = b.'id' WHERE b.name = '张无忌';

    案例三:删除黄晓明的信息以及他女朋友的信息

    /**sql92**/ DELETE bea,b FROM beauty bea,boy b WHERE bea.'boyfriend' = b.'id' AND b.name = '黄晓明'; /**sql99**/ DELETE bea,b FROM beauty bea INNER JOIN boy b ON bea.'boyfriend' = b.'id' WHERE b.name = '黄晓明';
    最新回复(0)