查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作
注:在MySQL中,当执行一条SQL语句后,系统会返回一个"Affected row"的消息,表示该操作影响了多少行数据,也就代表SQL语句执行成功。这个消息通常用于INSERT、UPDATE、DELETE等操作,告诉你在数据库中有多少行数据受到了影响。
排序:where先加查询条件 > group分组 >having 筛选>order排序> limit分页
#基本查询
select * from t_book;
#加条件
select * from t_book where id>10;
#按类别分组 ,前面不能放*号了会报错 select booktype ,count(1) from t_book group by booktype;
#筛选(类别大于2) as num取个别名 select booktype ,count(1) as num from t_book group by booktype having num>2;
升序:asc 降序:desc
#排序降序 select booktype ,count(1) as num from t_book group by booktype having num>2 order by num desc; #错误做法:排序放分组前面 select booktype ,count(1) as num from t_book order by num desc group by booktype having num>2 ;
报错:查询语句中存在语法错误
#一页一条数据 select booktype ,count(1) as num from t_book group by booktype having num>2 order by num desc limit 1;
使用INSERT 语句向数据库已有的表中插入一行或者多行元组数据。
insert into t_book values (1,'fff','wdw')
批量新增:insert into +表名 values (值,值....), (值,值....)
insert into t_book values (1,'fff','wdw'),(2,'哈哈哈','看看')
insert into +表名
set 属性1=值1, 属性2=值2
insert into t_book
set id=1,bookname='hhh'
update 表名 set .....
#把id=1的名字改为hhh
update t_book set bookname='hhh' where id=1
delete from 表名 where 属性=值......
delete from t_book where id=1
MySQL中的函数是一组预定义的操作,用于执行特定的任务或计算。这些函数可以用于检索、操作和处理数据,以及执行各种数学、字符串和日期操作。一些常见的MySQL函数包括:SUM、AVG、COUNT、MAX、MIN、CONCAT、UPPER、LOWER、DATE_FORMAT等。这些函数可以在SELECT语句中使用,也可以在存储过程和触发器中使用。
实施用的场景:在面向客户中,客户说加了哪个数据,然后看不见,然后我们要帮他查,就要到
测试函数是什么:select +函数()
转小写 -————LOWER('SQL Course') -————sql course
转大写-————UPPER('SQL Course')-————SQL COURSE
拼接————CONCAT('Hello. World')————HelloWorld
截取————SUBSTR('HelloWorld',1,5)————Hello
应用场景:
第一张图是原本的菜单栏
巧妙设计:
第二个是某公司的菜单栏,如果想要判定上一级,用截取,甚至可以知道他祖宗是谁
长度————LENGTH('HelloWorld')-————10
字符出现索引值(有没有出现过)————INSTR('HelloWorld','W')——6
字符截取后半段————TRIM('H' FROM 'HelloWorld')----------elloWortd
字符替换————REPLACE('abcd','b','m')————amcd
应用场景:隐藏敏感信息,如电话号码中间那几位
四舍五入———— ROUND(45.926,2) ————45.93
截取———— TRUNC(45.926,2) -- 45.92
求余(用得少) -————MOD(1600,300)————100
注:字符几乎可以存放所有类型数据
有很多开发人员为了图方便,不管什么类型直接用字符,但是后面不会维护,万一做会就辞职了,只是想先把工作完成再说,所有普遍这样,但是实施就太重要了
如:查询近7天表数据 ,结果里面存的是字符
做法:括号里放想转成日期型的数据>当前时间减7
str_to_date()>now()-7
获取当前日期 ————now()
重要:
将日期格式的字符转换成指定格式的日期:
STR_TO_DATE('9-13-1999','%m-%d-%Y')————1999-09-13
将日期转换成字符:
DATE_FORMAT('2018/6/6','%Y年%m月%d日 ')-——2018年06月06日
很多时候我们是需要行转列(特殊需求出现的)
行————>列
语法:
当你满足一个条件我给你一个结果,你满足二个条件我给你二个结果,所有也没满足给你一个例外的结果
expr=expression表达式
#案例:查询同时存在‘01’课程和‘02’课程的情况 select t3.* #当cid为01就返回分数score是语文的分数 (case when t1.cid='01' then t1.score end)语文, #当cid为02就返回分数score是数学的分数 (case when t2.cid='02' then t2.score end)数学, from (select * from t_score sc where sc.cid='01')t1, (select * from t_score sc where sc.cid='02')t2, t_student t3 where t1.sid=t2.sid and t1.sid=t3.sid
查询会议信息-----------------数字,怎么知道字段的意义
SELECT a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren,b.'name',a.location ,DATE_FORMAT(a.startTime,%Y-%m-%d %H:%i:%s') as startTime ,DATE_FORMAT(a.endTime,%Y-%m-%d %H:%i:%s') as endTime ,a.state
(case a.state
when 0 then'取消会议'
when 1 then'新建'
when 2 then'待审核'
when 3 then'驳回'
when 4 then'待开'
when 5 then'进行中'
when 6 then'开启投票'
else'结束会议' end
) as meetingState
,a.seatPic,a.remark.a.auditor,c.'name'as auditorName
FROM t_ oa_meeting info a
inner join t_oa_user b on a.zhuchiren = b.id
left JOIN t_oa_user c on a.auditor = c.id where 1=1 :
sum 求和、avg 平均值、max 最大值、 min 最小值、count计算个数
Union操作符用于合并两个或多个查询的结果集,并去除重复的行。
如果两个查询的结果有相同的行,则只会返回一次。
Union操作符会对结果进行排序和去重,因此可能会影响性能。
Union All操作符也用于合并两个或多个查询的结果集,但不会去除重复的行。
即使两个查询的结果有相同的行,也会全部返回。
Union All操作符不会对结果进行排序或去重,因此通常比Union操作符更快。
1. Union:
- 当需要合并多个查询的结果,并且希望去除重复的行时,可以使用Union操作符。
- 例如,合并两个表的数据,但不希望出现重复的记录。
2. Union All:
- 当需要合并多个查询的结果,但不需要去除重复的行时,可以使用Union All操作符。
- 例如,合并两个表的数据,允许出现重复的记录。
总的来说,Union和Union All操作符都用于合并多个查询的结果,但根据是否需要去除重复的行来选择使用哪种操作符。
初始数据:----------------------78重了
加 Union:-----------------------没有重复的(并集)
加 Union all:-----------------------有重复的