MySql(十七)联合查询和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_sex
male
/**查询中国用户中所有男性的信息以及外国用户中所有男性的信息**/
SELECT * FROM china WHERE e_sex = '男'
UNION
SELECT * FROM forei	WHERE f_sex = 'male'

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

注意事项:

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

DML语言

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

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

插入语句

语法:

  1. 插入方法一:

    insert into 表名

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

    values

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

插入注意事项:

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

    insert into 表名

    set 列1名 = 列1值,

    列2名= 列2值

    列n名= 列n值;

    方法一和方法二的区别:

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

      给表student插入三行数据:

      insert into student

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

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

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

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

      因为先执行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

idnamesexphoneborndateboyfriend
1柳岩150908337722018-1-21
2AngleBaby190373990022012-3-23
3赵丽颖159098771121998-2-14
4赵敏159802918541998-2-32
5周芷若158920413351993-12-42
6金星183908332201992-1-29

表boy

idboynameusercp(魅力值)
1大鹏100
2张无忌339
3黄晓明99
4冯绍峰400
5男神·500

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

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

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

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

分析:

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

删除

语法:

单表的删除

  1. 方式一:delete

    删除整张表

    delete from 表名;

    按照条件删除记录

    delete from 表名 where 筛选条件;

  2. 方式二:truncate

    truncate table 表名;

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

    delete和truncate的区别:

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

    2. truncate效率会更高一些

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

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

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

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

表beauty

idnamesexphoneborndateboyfriend
1柳岩150908337722018-1-21
2AngleBaby190373990022012-3-23
3赵丽颖159098771121998-2-14
4赵敏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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值