目录
1. 列的别名
2. 去除重复行
3. 空值参与运算
4. 着重号’’
5. 查询常数
6. 显示表结构
7. 过滤数据
8. 运算符:+、-、*、/(div)、%(MOD),dual为伪表
9. 比较运算符,true为1,false为0,=、<=>(安全等于)、<>(!=)、<、<=、>、>=
‘=’的比较
10. Least()\greatest()
11. Between A and B
12. 离散查找in()、not in()
13. 模糊查询like
15. 逻辑运算符:not或!(非)、and或&&(与)、or或||(或)、xor(异或)
16. 位运算符&、|、^(异或)、~、>>、<<
排序与分页
1、使用order by对查询的数据进行排序操作,默认升序排列
2、ASC升序排列
3、Desc升序排列
4、用列的别名进行排序
5、二级排序
1)Order by [字段1] asc/desc,[字段2] asc/desc,……
6、分页
1)使用limit实现数据的分页显示
2)每页显示pagesize条记录,显示第pageno页。
3)MySQL8.0新特性:limit [条目数] offset [偏移量]
4)Mysql求字节数使用关键字length()
1. 列的别名
使用AS
Select id as 学号 from employ;
使用 一对引号“”
Select id “学号” from employ;
直接使用别名
Select id 学号 from employ;
2. 去除重复行
在属性前面加distinct
Select distinct id from employ;
3. 空值参与运算
空值为null,其中null不等同于0,‘’,‘null’
空值参与运算结果一定为null,解决方法用ifnull
Select salary*(1+ifnull(commission,0)) from employ;//ifnull意思是如果commission是null,则用0替换。
4. 着重号’’
使用的字段或表明是保留字、关键字时,使用着重号
Select *from ‘order’;
5. 查询常数
Select ‘尚硅谷’,name from employ;
6. 显示表结构
使用describe,显示表中字段详细信息
Describe employ;
使用desc,显示表结构
Desc employ;
7. 过滤数据
用where筛选符合条件的记录,过滤信息
Select *from employ where id=1;
8. 运算符:+、-、*、/(div)、%(MOD),dual为伪表
在SQL中,+没有连接的作用,仅表示加法运算。此时会将字符型数字转化成为数值(隐式转换)
Select 100+‘1’ from dual;//结果:101
字符型字母会当成0处理
Select 100+‘a’ from dual;//结果:100
Null参与运算,结果为null
Select 100+null from dual;//结果:null
Select ‘a’<>null from dual;//结果:null
分母为0时,结果为null
Select 100 div 0 from dual;//结果:null
取模运算:% MOD,余数的符号之和被除数有关
Select 12%3,12%5,12 MOD-5,-12 MOD 5,-12 MOD -5 from dual;//结果:0,2,2,-2,-2
9. 比较运算符,true为1,false为0,=、<=>(安全等于)、<>(!=)、<、<=、>、>=
‘=’的比较
字符串与数字比较时,字符串存在隐式转换,如果转换数值不成功,则看做0
Select 1=2,1!=2,1=‘1’,1=‘a’,0=‘a’ from dual;//结果:0,1,1,0,1
纯字符串比较时,则按照ANSI编码值比较
Select ‘a’=‘a’,‘ab’=‘ab’,‘a’=‘b’from dual;//结果:1,1,0
只要有null参与比较,结果就为null
Select 1=null,null=null from dual;//结果:null,null
注意:‘<=>’的比较, ‘<=>’与’=’类似,唯一区别是:‘<=>’可以判断null。在两个操作数均为null时,返回值为1,否则返回0
Select 1<=>null,null<=>null fom dual;//结果:0,1
Is null(值为空)、is not null(值不为空)、函数:isnull(字段)
Select name,salary from employ where commission is null;
//查找commission值为null的记录
Select name,salary from employ where commission is not null;
//查找commission值不为null的记录
Select name,salary from employ where isnull(commission);
//查找commission值为null的记录
10. Least()\greatest()
筛选最小值\最大值
Select least(‘g’,’b’,’t’,’m’),greatest(‘g’,’b’,’t’,’m’) from dual;//结果:b,t
Select least(name1,name2) from dual;//获取name1和name2中最小的
Select least(length(name1),length(name2)) from employ;//获取name1和name2长度最短的
11. Between A and B
查询符合A到B之间的记录
Select name,salary from employ where salary between A and B;
//查询工资在A和B区间的员工信息,包括A和B
Select name,salary from employ where salary >=6000 and(或&&) salary<=8000;
//查询工资在6000到8000之间的员工信息
查询符合A或符合B的记录
Select name,salary from employ where salary<=A or salary>=B;
//查询工资小于A或大于B的员工信息
Select name,salary from employ where salary not between A and B;
//查询工资不在A和B区间的员工信息
12. 离散查找in()、not in()
In(set)判断一个值是否是列表中的一个值。not in(set)判断一个值是否不是列表中的一个值
Select name,salary from employ where department in(A,B,C);
//查找部门属于A、B、C中员工信息
Select name,salary from employ where department not in(A,B,C);
//查询不能不属于A,B,C的员工信息
13. 模糊查询like
Like:判断一个值是否符合模糊匹配规则
Select name,salary from employ where name like ‘%a%’;
//%代表不确定个数的字符,查询name包含字符a的姓名
Select name,salary from employ where name like ‘a%’;
//查询name以字符a开头的员工信息
Select name,salary from employ where name like ‘%a%b’or name like ‘%b%a’;
//查询包含字符a和b的name
查询指定位置字符,_代表一个不确定的字符
Select name,salary from employ where name like ‘_a%’;
//查询第二个位置字符为a的姓名
如果查询的字段含有‘_’,查询‘_’需要使用转义字符,或者使用escape关键字声明‘_’
Select name,salary from employ where name like ‘%\_%’;
//查询含有‘_’的姓名
Select name,salary from employ where name like ‘%_%’ escape ‘_’;
//查询含有‘_’的姓名
14. 正则表达式regexp,语法格式:expr regexp [匹配条件]。如果expr满足匹配条件,返回1,;否则返回0。若expr或者匹配条件任何一个为null,则结果为null。
‘^’匹配以该字符后面的字符开头的字符串
‘$’匹配以该字符前面的字符结尾的字符串
‘.’匹配任何一个单字符
“[…]”匹配在方框内的任意字符。例如:“[abc]”匹配‘a’或‘b’或‘c’。命名字符的范围使用‘-’,例如“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字
‘*’匹配零个或多个在它前面的字符。例如:“x*”匹配任何数量的‘x’字符,“[0-9]*”匹配任何数量的数字,而“*”匹配任何数量的任何字符
Select ‘shkstart’ regexp ‘^s’, ‘shkstart’ regexp ‘t$’, ‘shkstart’ regexp ‘hk’ from dual;//结果:1,1,1
Select ‘atguigu’ regexp ‘gu.gu’,‘atguigu’ regexp ‘[ab]’ from dual;//结果:1,1
15. 逻辑运算符:not或!(非)、and或&&(与)、or或||(或)、xor(异或)
Select name,salary from employ where department =A xor salary>B;
//查询部门符合A但工资不大于B的员工信息,以及部门不等于A但工资大于B的员工信息
注意:优先级not>and>or,!>&&>||=xor
16. 位运算符&、|、^(异或)、~、>>、<<
Select 10&~1 from dual;//结果:10
排序与分页
1、使用order by对查询的数据进行排序操作,默认升序排列
Select *from employ order by name;//按姓名的顺序排序
2、ASC升序排列
Select name,salary from employ order by salary asc;
//按照工资的高低升序排列
3、Desc升序排列
Select name,salary from employ order by salary desc;
//按照工资高低降序排列
4、用列的别名进行排序
Select name,salary as 工资 from employ order by 工资;
//按工资高低的顺序排序
注意:列的别名只能在order by中使用,不能在where中使用。Where需要声明在from之后,order by之前。
5、二级排序
1)Order by [字段1] asc/desc,[字段2] asc/desc,……
Select name,department,salary from employ order by department desc,salary asc;
//显示员工信息,按照department降序排序,salary的升序排序
注意:多列排序,首先排序的第一列必须有相同的列值,才会对第二列排序。如果第一列数据中所有的值不是唯一的,将不再对第二列排序。
6、分页
1)使用limit实现数据的分页显示
Select name,salary from employ limit 0,20;
//每页显示20条记录,显示第一页,“0”表示偏移量,“20”表示每页多少条记录
Select name,salary from employ limit 20,20;
//每页显示20条记录,显示第二页,第一个“20”表示偏移量,第二个“20”表示每页多少条记录
2)每页显示pagesize条记录,显示第pageno页。
公式:(pagesize-1)*pageno
注意:Where、order by、limit声明顺序如下:where>order by>limit
Select name,salary from employ where salary>6000 order by salary desc limit 0,20;
//筛选工资大于6000,按照降序顺序排列,分页显示,每页显示20条数据。
注意:limit偏移量从0开始时,0可以不写,默认从头开始显示。
如:limit 0,20;==limit 20;
3)MySQL8.0新特性:limit [条目数] offset [偏移量]
Select name,salary from employ limit 20 offset 0;
//每页显示20条记录,从第一页显示
4)Mysql求字节数使用关键字length()
Select name,salary,email from employ where email like ‘%e%’ order by length(email) asc
//查询邮箱含有e的员工信息,并按照邮箱字节数排序