数据库第二节课:DML语言
目录
一.DML:数据操作语言,增删改查
1.插入数据
insert into 表名(列名1,列名2,... ... )values (值1,值1,... ...)
注:插入所有列值时列名可省略,但各列所对应的值要逐一对应
2.修改:
-- 把departments中department_id的类型修改成int
alter table departments1 MODIFY department_id INT;
-- 修改列名
ALTER TABLE users change age birthday date SHOW TABLES
update 表名 set 列名1 = 新值1 ... ... where 筛选条件(一般选用唯一性条件)
3.删除语句:
delete from 表名 where 筛选条件(一般选用唯一性条件)
4.查询:
select 列名1,列名2...from 表名 [where 条件,groub by 分组列 having 分组列条件 order by 列排序 limit 截取]
5.运算符:
1)算数运算符:+ - * /
2)比较运算符: = ,!= ,<>,>,>=,<,<=,in,between A and B (A和B之间)
like,not like
例 : where 列名 (not)like '_夯烎%'/'%夯烎%' _匹配一个字符,%匹配0到n个字符
3)逻辑运算符: and or not
6.分组函数:
1).group by 使用方法
select 分组列,分组函数 from 表名 group by 分组列 -- (1)
2).分组函数:count()/avg()/sum()/max()/min()
3).分组后条件:(1)having (分组后筛选,与where不同 ,where分组前筛选)
7.排序 order by:
select 列名1,列名2,... ... from 表名
order by 列名 ASC/DESC(升序/降序,默认为升序)
8.limit 截取:
select 列名1,列名2,... ... from 表名
条件 limit 起始位置,数量(由哪开始取几个)
注:where ,group by ,having , order by , limit 联合使用的时候顺序不能乱
二. 时间函数:
系统当前时间: NOW() 在执行开始时就获取了值
SYSDATE() 在执行到这儿的时候才获取到值
休眠: SLEEP(以秒为单位的时间)
当前时间戳: CURRENT_TIMESTAMP()
日期格式化转换: data_format('2021-01-19 10:19:36','%Y%m%d%H%i%s')
TIME_FORMAT('10:19:36','%H%i%s')
字符串转时间: STR_TO_DATE('08/08/2008','%Y%m%d')
日期,天数转换函数: TO_DAYS(日期) 从公元元年到今天的天数
TIME_TO_SEC('01:00:05')
SEC_TO_TIME(3605)
日期时间拼凑函数: MAKEDATE(2021,31)-->2021_01_31 2021年第31天
MAKETIME(时,分,秒)
只能在MySQL中用的函数:
为日期增加一个时间间隔: data_add(日期,interval 数量 单位)
为日期减少一个时间间隔: data_sub(日期,interval 数量 单位)
时间,日期相减: DATEDIFF(日期1,日期2)
TIMEDIFF(时间1,时间2)
所在月份最后一天: LAST_DAY(列名)
提取年份: YEAR( )
注:日期能直接减,日期数据最好用日期函数处理
三.字符串函数:
字符串拼接: CONCAT(列名1,列名2,...)
替换: INSTR(列名,起始,数量) 下标由1开始
转大小写: UPPER(str)/LOWER(str)
左右取值: LEFT(str,len)/RIGHT(str,len)
填充: RPAD(str,len,填充的字符)/LPAD(str,len,填充的字符)
去空格: LTRIM(str)/RTRIM(str)
将列值重复x次: REPEAT(str,count)
用y替换x: REPLACE(str,x,y)
比大小: STRCMP(列名1,列名2)
截取: SUBSTRING(str,起始位置,len)
长度: LENGTH(str)
四.多表查询:
1.嵌套查询
:
select 列名1,... ... from 表名 where 列名 = (select 列名 from 表名2 where 条件)
2.笛卡尔积:
select 表名1.列名1,表名2.列名... ... from 表名1,表名2... where 唯一性条件
3.左/右外链接:
以左/右表为主,左/右表中匹配不上的会有空值
select 表名1.列名1,表名2.列名... ... from 表名1 LEFT/RIGHT JOIN 表名2 on 条件 LEFT/RIGHT JOIN 表名3 on 条件... ...
4.内链接:
以两(多)表匹配为主,能匹配上的显示
select 表名1.列名1,表名2.列名... ...from 表名1 INNER JOIN 表名2 INNER JOIN 表名3 on 条件
去重函数: DISTINCT 例:select distinct 列名 from 表名