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

文章目录

联合查询
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_id c_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的列必须插入值
    1. 要插入的列数和值一定要一一对应
  3. 插入的是有也可以省略列名,但这里默认的是插入表中所有列的数据

2.插入方法二:

insert into 表名

set 列1名 = 列1值,

列2名= 列2值

列n名= 列n值;

方法一和方法二的区别:

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

给表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

idnamesexphoneborndate boyfriend
1柳岩150908337722018-1-21
2AngleBaby190373990022012-3-23
3赵丽颖女 159098771121998-2-14
4赵敏159802918541998-2-3 2
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中没有找到则视为没有男朋友

分析:

找出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;

删除

语法:

单表的删除

1.方式一:delete

删除整张表

delete from 表名;

按照条件删除记录

delete from 表名 where 筛选条件;

2.方式二:truncate

truncate table 表名;

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

delete和truncate的区别:

  1. delete可以添加where条件;truncate不能加
  2. truncate效率会更高一些
  3. 假如要删除的表中有自增长列:如果用delete删除后,在插入数据,自增长列的值从断点处开始;
  4. 如果用truncate删除,数字增长列的值则是从1处开始
  5. delete删除有返回值;truncate删除没有返回值
  6. delete删除可以回滚;truncate删除不能回滚

表beauty

idnamesexphoneborndateboyfriend
1柳岩15090833772 2018-1-21
2AngleBaby 190373990022012-3-23
赵丽颖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 = '黄晓明';


 

本文原文地址:https://blog.youkuaiyun.com/qq_43952245/article/details/90573802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值