Mysql DQL讲解(二)以及DML

Mysql DQL讲解(二)以及DML

DQL

多表查询

1.笛卡尔积:避免笛卡尔积,因为笛卡尔积的产生会造成数据变多,处理效率下降。
2.自链接:相当于把一个数据表拆分成两个表链接使用,有利于树形菜单加载
FROM t_mysql_employees e,t_mysql_employees m
在这里插入图片描述

3.join链接
1.内连接:[inner] join on
语法:
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
在这里插入图片描述
在这里插入图片描述
外连接:
应用场景:用于查询一个表中有,另一个表没有的记录
外连接查询结果=内连接结果+主表中有而从表没有的记录,可以显示null值
全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
左外连接 left [outer] join on 右外连接 right [outer] join on
inner和outer可以省略,left左边表示主表,right右边表示主表。
在这里插入图片描述
多表查询的综合使用:
SELECT last_name,d.department_id,department_name
FROM t_mysql_employees e,t_mysql_departments d
WHERE e.department_id = d.department_id;
在这里插入图片描述
SELECT last_name , department_name , l.location_id , city
FROM t_mysql_employees e,t_mysql_departments d,t_mysql_locations l
WHERE e.department_id = d.department_id
AND d.location_id=l.location_id
AND e.commission_pct IS NOT NULL;
在这里插入图片描述

常见函数

概念:对列表类型值进行加工处理
1.字符函数
转小写:LOWER(‘SQL Course’)
在这里插入图片描述
转大写:UPPER(‘SQL Course’)
拼接:CONCAT(‘Hello’, ‘World’)
在这里插入图片描述
截取:SUBSTR(‘HelloWorld’,1,5)
长度:LENGTH(‘HelloWorld’)
字符出现索引值:INSTR(‘HelloWorld’, ‘W’)
字符截取后半段:TRIM(‘H’ FROM ‘HelloWorld’)
字符替换:REPLACE(‘abcd’,‘b’,‘m’)
在这里插入图片描述
2.数字函数
四舍五入:ROUND(45.926, 2)
在这里插入图片描述
截断:TRUNCATE(45.926, 2)
在这里插入图片描述
求余:MOD(1600, 300)
在这里插入图片描述

3.日期函数
获取当前日期:now()
在这里插入图片描述

将日期格式的字符转换成指定格式的日期:
STR_TO_DATE(‘9-13-1999’,’%m-%d-%Y’)
在这里插入图片描述

子查询

概念:出现在其他语句中的select语句,称为子查询或内查询,内部嵌套其他select语句的查询,称为外查询或主查询。
注意:需要仔细看清楚逻辑
例如:
SELECT last_name,job_id,salary
FROM t_mysql_employees
WHERE job_id = (
SELECT job_id
FROM t_mysql_employees
WHERE employee_id = 141
) AND salary>(
SELECT salary
FROM t_mysql_employees
WHERE employee_id = 143
);
在这里插入图片描述

分页查询

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;

offset要显示条目的起始索引(起始索引从0开始),如果开始索引为0可以省略0
size 要显示的条目个数,limit语句放在查询语句的最后,原始查询的记录<offset,那么查询的结果必然是原始查询的记录数

在这里插入图片描述

DML(Data Manipulation Language)

概念:可以在表中删除,插入,修改数据。

1.插入

语法:INSERT INTO table [(column [, column…])] VALUES (value [, value…]);
在表中插入值:
INSERT INTO t_mysql_departments (department_id, department_name )
VALUES (30, ‘Purchasing’);
在指定列插入值:
INSERT INTO t_mysql_employees (employee_id, first_name, last_name, email, phone_number,hire_date, job_id, salary, commission_pct, manager_id,department_id)
VALUES (113, ‘Louis’, ‘Popp’, ‘LPOPP’, ‘515.124.4567’,
NOW(), ‘AC_ACCOUNT’, 6900, NULL, 205, 100);

拷贝数据:为了保护数据丢失,通常需要拷贝数据,不需要values语句,子查询中的值列表应与 INSERT 子句中的列名对应。

INSERT INTO emp2
SELECT *
FROM t_mysql_employees
WHERE department_id = 90;

INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM t_mysql_employees
WHERE job_id LIKE ‘%REP%’;

2.修改

语法:UPDATE table SET column = value [, column = value, …]
[WHERE condition];
可以一次更新多条数据
例子:
UPDATE t_mysql_employees
SET department_id = 70
WHERE employee_id = 113;

UPDATE t_mysql_boys bo
RIGHT JOIN t_mysql_beauty b ON bo.id=b.boyfriend_id
SET b.boyfriend_id=2
WHERE bo.id IS NULL;

3.删除

语法:DELETE FROM table [WHERE condition];
例子:
DELETE FROM t_mysql_departments
WHERE department_name = ‘Finance’;

DELETE b
FROM t_mysql_beauty b
INNER JOIN t_mysql_boys bo ON b.boyfriend_id = bo.id
WHERE bo.boyName=‘张无忌’;

Delete 和 Truncate区别(面试可能考到)

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

2.truncate删除,效率高一丢丢

3.假如要删除的表中有自增长列,
如果用delete删除后,再插入数据,自增长列的值从断点开始,
而truncate删除后,再插入数据,自增长列的值从1开始。

4.truncate删除没有返回值,delete删除有返回值(用Java操作的时候会用到)

5.truncate删除不能回滚,delete删除可以回滚.(回滚可以使数据返回)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值