SQL(DQL与DML)

1、多表联查

1.1左外连接
查询出左边表的所有集,而右边的匹配到的则有值,没匹配到的则为null。

select 列名 from 主表 left join 从表 on 筛选条件;

1.2右外连接
解释:于和左外连接相反,查出右边数据的所有集,左边的表匹配到的显示,没匹配到的就显示null。

select 列名 从表 right join 主表 on 筛选条件;

全外语法:

select 列名 from 表1 full join 表2 on 筛选条件;

1.字符函数
length:获取字节个数
concat:拼接字符串

SELECT CONCAT(‘hello’,‘world’);

LOWER:转小写
UPPER:转大写

SELECT LOWER(‘HELLOWORLD’);
SELECT UPPER(‘helloworld’);

substr:截取
索引从1开始,到5结束所有的字符。
SELECT SUBSTR(‘helloworld’,1,5);#结果:hello

2.数字函数
round:四舍五入

select round(1.55);#结果:2

ceil:向上取整

select ceil(1.02);#结果:2

floor:向下取整

select floor(1.9);#结果:1

truncate:截断

SELECT TRUNCATE(2.333333,2);#结果:2.33

mod:取余

SELECT MOD(1600,300);#结果:100

3.日期函数
3.1. now 返回当前系统日期+时间
SELECT NOW();

3.2. curdate 返回当前系统日期,不包含时间
SELECT CURDATE();

3.3. curtime 返回当前时间,不包含日期
SELECT CURTIME();
3.4 str_to_date 将字符通过指定的格式转换成日期

3.5 date_format 将日期转换成字符

4.流程控制函数
if函数:
SELECT
last_name,
commission_pct,
IF
( commission_pct IS NULL, '1111, ‘2222’ ) 备注
FROM
t_mysql_employees;
case函数:

SELECT
salary 原始工资,
department_id,
CASE
department_id
WHEN 30 THEN
salary * 1.1
WHEN 40 THEN
salary * 1.2
WHEN 50 THEN
salary * 1.3 ELSE salary
END AS 新工资
FROM
t_mysql_employees;
在这里插入图片描述

子查询
子查询其实就是在sql语句中嵌套sql语句。
步骤:
①逻辑分析充分需求,分段书写SQL子句
②最后拼接sql子句完成需求

特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用> < >= <= = <>
④子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果。

查询工资比Abel高的员工名字和工资
SELECT
last_name,
salary
FROM
t_mysql_employees
WHERE
salary > ( SELECT salary FROM t_mysql_employees WHERE last_name = ‘Abel’ );

查询工种与141号员工相同、工资比143号员工高的姓名,工种,工资

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 );

分页查询
语法:
原有查询+limit startIndex,offset

注意事项:
1、原始查询的记录数<offset,那么查询的结果必然是原始查询的记录数
2、startIndex=0,那么可以省略,limit offset

startIndex要显示条目的起始索引(起始索引从0开始)
offset要显示的条目个数

DML(数据管理语言)
1.简介:
DML(Data Manipulation Language )数据操作语言,可以再下列条件下执行:
1.插入数据
•1.1使用 INSERT 语句向表中插入数据。
这种语法只能一次向表中插入一条数据

1.添加数据
关键字:INSERT
语法:INSERT INTO 表名 (列名,列名…) VALUES (值,值…);

1.1添加一条数据
INSERT INTO t_mysql_departments ( department_id, department_name, manager_id, location_id )
VALUES( 70, ‘Public Relations’, 100, 1700 );

2.修改数据
关键字:UPDATE
语法:UPDATE 表名 列名=新值 WHERE 筛选条件;
• 如果省略 WHERE 子句,则表中的所有数据都将被更新

修改张无忌的女朋友的手机号为119
UPDATE t_mysql_boys bo
INNER JOIN t_mysql_beauty b ON bo.id=b.boyfriend_id
SET b.phone=‘119’,bo.userCP=1000
WHERE bo.boyName=‘张无忌’;

3.删除数据
关键字:DELETE
语法:DELETE FROM 表名 WHERE 筛选条件;
• 如果省略 WHERE 子句,则表中的全部数据将被删除

删除张无忌的女朋友的信息
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删除可以回滚。
5.truncate删除没有返回值,delete删除有返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值