MySql之DQL语言补充及DML语言

一.DQL(数据查询语言)

1.多表查询

分类:
等值连接:两个表都有的字段
非等值连接:两个相关联的的字段连接
自连接:把一个表分成两个表来查询所需要的数据
外连接:用于查询一个表中有,另一个表没有的记录

join关键字
– 内连接 [inner] join on
– 外连接
• 左外连接 left [outer] join on
• 右外连接 right [outer] join on
-使用ON 子句创建连接

join 语法:

select 查询列表
	from1 别名 【连接类型】
	join2 别名 
	on 连接条件
	【where 筛选条件】
	【group by 分组】
	【having 筛选条件】
	【order by 排序列表】

1.等值连接:

#案例1.查询员工名、部门名

SELECT last_name,department_name
FROM t_mysql_departments d
 JOIN  t_mysql_employees e
ON e.`department_id` = d.`department_id`;

2.非等值连接

#查询员工的工资级别

SELECT salary,grade_level
FROM t_mysql_employees e
 JOIN t_mysql_job_grades g
 ON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`;

3.自连接

`#查询员工的名字、上级的名字
 SELECT e.last_name,m.last_name
 FROM t_mysql_employees e
 JOIN t_mysql_employees m
 ON e.`manager_id`= m.`employee_id`;

4.外连接

#案例1:查询哪个部门没有员工
 #左外
 SELECT d.*,e.employee_id
 FROM t_mysql_departments d
 LEFT OUTER JOIN t_mysql_employees e
 ON d.`department_id` = e.`department_id`
 WHERE e.`employee_id` IS NULL;
 
 
 #右外
 
  SELECT d.*,e.employee_id
 FROM t_mysql_employees e
 RIGHT OUTER JOIN t_mysql_departments d
 ON d.`department_id` = e.`department_id`
 WHERE e.`employee_id` IS NULL;
 
 
 #全外
 
 
 USE girls;
 SELECT b.*,bo.*
 FROM t_mysql_beauty b
 FULL OUTER JOIN t_mysql_boys bo
 ON b.`boyfriend_id` = bo.id;

2.常见函数

字符函数

select LOWER('SQL Course')//转小写
select UPPER('SQL Course')//转大写
select CONCAT('Hello', 'World')//拼接
select SUBSTR('HelloWorld',1,5)//截取
select LENGTH('HelloWorld')//长度
select INSTR('HelloWorld', 'W')//字符出现索引值
select TRIM('H' FROM 'HelloWorld')//字符截取后半段
select REPLACE('abcd','b','m')//字符替换

数字函数

select ROUND(45.926, 2)//四舍五入
select TRUNC(45.926, 2)//截断
select MOD(1600, 300)//求余

日期函数

select now()//获取系统当前时间
select STR_TO_DATE('9-13-1999','%m-%d-%Y')//将日期格式的字符转换成指定格式的日期
select DATE_FORMAT(2018/6/6,%Y年%m月%d日’)//将日期转换成字符

3.子查询

概念:出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询

语法:SELECT 查询列段 FROM 表名 WHERE 过滤条件 (SELECT 查询列段 FROM 表名 WHERE 过滤条件 )

分类:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)

案例:查询最低工资大于50号部门最低工资的部门id和其最低工资

#①查询50号部门的最低工资
SELECT  MIN(salary)
FROM t_mysql_employees
WHERE department_id = 50
#②查询每个部门的最低工资

SELECT MIN(salary),department_id
FROM t_mysql_employees
GROUP BY department_id

#③ 在②基础上筛选,满足min(salary)>①
SELECT MIN(salary),department_id
FROM t_mysql_employees
GROUP BY department_id
HAVING MIN(salary)>(
	SELECT  MIN(salary)
	FROM t_mysql_employees
	WHERE department_id = 50
);

在这里插入图片描述

4.分页查询

概念:当要显示的数据,一页显示不全,需要分页提交sql请求

语法:select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit 【offset,】size;
offset要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数

案例:有奖金的员工信息,并且工资较高的前10名显示出来

SELECT 
    * 
FROM
    t_mysql_employees 
WHERE commission_pct IS NOT NULL 
ORDER BY salary DESC 
LIMIT 10 ;

在这里插入图片描述

二.DML(数据管理语言)

概念:

– 向表中插入数据
– 修改现存数据
– 删除现存数据

1.新增

语法:INSERT INTO table [(column [, column...])] VALUES (value [, value...]);

案例:为每一列添加一个新值。

INSERT INTO t_mysql_departments(department_id, department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);//字符和日期型数据应包含在单引号中

在这里插入图片描述

案例:从其它表中拷贝/备份数据

新建备份表:

create table t_mysql_departments_bak//新建用来存放备份数据的表
as
select * from t_mysql_departments_bak //需要备份的表
where 1=2;

在这里插入图片描述
在这里插入图片描述

拷贝数据:不必书写 VALUES 子句。
• 子查询中的值列表应与 INSERT 子句中的列名对应

insert into t_mysql_departments_bak//需要写入的表
select * from t_mysql_departments;//拷贝的数据源
//如果只需拷贝部分数据则加上where过滤
//where 过滤条件;

在这里插入图片描述
在这里插入图片描述

2.修改

语法:UPDATE table SET column = value [, column = value, ...] [WHERE condition];

案例:一次修改多表的数据

//修改张无忌的女朋友的手机号为114,魅力值改为1000;
update t_mysql_boys bo //需要修改的表
inner join t_mysql_beauty b //内连接表
on bo.id = b.boyfriend_id//连接条件
set b.phone = 114,bo.userCP = 1000//需要修改的值
where bo.boyName = '张无忌'//过滤条件

在这里插入图片描述
在这里插入图片描述

3.删除

delete pk truncate
1.delete 可以加where 条件,truncate不能加
2.truncate删除,效率高一丢丢
3.假如要删除的表中有自增长列,
如果用delete删除后,再插入数据,自增长列的值从断点开始,
而truncate删除后,再插入数据,自增长列的值从1开始。
4.truncate删除没有返回值,delete删除有返回值
5.truncate删除不能回滚,delete删除可以回滚.
一般常使用delete

语法:DELETE FROM t_mysql_departments WHERE department_name = 'Finance';
如果省略where不写则删除当前表所有数据

案例:一次删除多表的数据

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

delete b	//连接两个表后删除b表中过滤后名字为张无忌的的信息
from t_mysql_beauty b 
inner t_mysql_boys bo
on b.boyfriend_id = bo.id
where bo.boyname = '张无忌'

在这里插入图片描述在这里插入图片描述

以上语法操作基于win10及MySQL8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值