基础函数
–1,工具的使用
1,找到.exe程序,双击,输入了密码,点击连接,就可以了
2,创建库: 右键-新建数据库-设置数据库名-选字符集utf8-确定
3,创建表: 右键-创建表-输入字段名字段类型字段长度字段约束-创建表-输入表名-确定
4,添加表里的记录,如下图
–2,准备数据
CREATE TABLE dept(
deptno int primary key auto_increment ,
dname VARCHAR(20),
loc VARCHAR(13)
);
INSERT INTO dept VALUES(null,'accounting','一区');
INSERT INTO dept VALUES(null,'research','二区');
INSERT INTO dept VALUES(null,'operations','二区');
CREATE TABLE emp(
empno int primary key auto_increment,
ename VARCHAR(10),
job VARCHAR(10),
mgr int,
hiredate DATE,
sal double,
comm NUMERIC(7,2),
deptno int
);
INSERT INTO emp VALUES(100,'jack','副总',NULL,'2002-05-1',90000,NULL,1);
INSERT INTO emp VALUES(200,'tony','总监',100,'2015-02-02',10000,2000,2);
INSERT INTO emp VALUES(300,'hana','经理',200,'2017-02-02',8000,1000,2);
INSERT INTO emp VALUES(400,'leo','员工',300,'2019-02-22',3000,200.12,2);
INSERT INTO emp VALUES(500,'liu','员工',300,'2019-03-19',3500,200.58,2);
–3, 查询
--upper :转大写
select upper(ename) from emp --数据转大写
--lower:转小写
SELECT 'ABC',LOWER('ABC') from emp; --数据转小写
--length:查询长度
select length(ename) from emp --数据的长度
-- substr---截取子串
SELECT ename,SUBSTR(ename,1,3) FROM emp; --截取[1,3]
---concat:拼接
select ename,concat(ename,'123') X from emp --拼接数据
----replace替换
select ename,replace(ename,'a','666') from emp --把a字符替换成666
--- ifnull 换值 (a,b)-a是字段名b 是换成的值
select ifnull(comm,10) comm from emp #判断,如果comm是null,用10替换
eg;测试
---round & ceil & floor
round四舍五入,ceil向上取整,floor向下取整
---round
---ceil
---floor
---now当前 & year年 & month月 & day日
---hour时 & minute分& second秒
-uuid
SELECT UUID()#随机生成一个32位的字符串
转义字符
作为sql语句符号,内容中出现单撇就会乱套,进行转义即可
条件查询
--- distinct
select ? from 表名#查询部门地址
---where
注意:where中不能使用列别名!!
写法:SELECT 字段名 FROM 表名 WHERE 字段名 = 字段值
select * from emp
select * from emp where 1=1 --类似没条件
select * from emp where 1=0 --条件不成立
select * from emp where empno=100 --唯一条件
select * from emp where ename='tony' and deptno=2 --相当于两个条件的&关系
select * from emp where ename='tony' or deptno=1 --相当于两个条件的|关系
select name, sal from emp where sal=1400 or sal=1600 or sal=1800;
-- 或
select name, sal from emp where sal in(1400,1600,1800);
select name, sal from emp where sal not in(1400,1600,1800);
#练习3:查询名称是research的部门编号
#练习4:查询地址在二区编号为3的闭门名称
#练习5:查询部门名称是accounting/research的部门地址
#练习6:查询编号是1 2 3的部门信息
---like 查询(模糊查询)
通配符%代表0到n个字符,通配符下划线_代表1个字符
句式:
select * from emp where ename like 'l%' --以l开头的
select * from emp where ename like '%a' --以a结束的
select * from emp where ename like '%a%' --中间包含a的
select * from emp where ename like 'l__' --l后面有两个字符的 _代表一个字符位置
#练习1:查询名字包含a的员工信息
---null
select * from emp where mgr is null --过滤字段值为空的
select * from emp where mgr is not null --过滤字段值不为空的
#练习1:查询没有奖金的员工信息
---between and 在什么之间
SELECT * FROM emp
select * from emp where sal<3000 and sal>10000
select * from emp where sal<=3000 and sal>=10000--等效
select * from emp where sal between 3000 and 10000--等效
#练习4:查询2019年入职的员工名字
--- limit
分数最高的记录:按分数排序后,limit n,返回前n条。Oracle做的很笨,实现繁琐,后期有介绍,而mysql做的很棒,语法简洁高效。在mysql中,通过limit进行分页查询:
select * from emp limit 2 --列出前两条
select * from emp limit 1,2 --从第二条开始,展示2条记录
select * from emp limit 0,3 --从第一条开始,展示3条记录--前三条
#练习5:展示前两条员工数据
#练习6:查询岗位是员工的第一条记录
---order by
SELECT * FROM emp order by sal #默认升序
SELECT * FROM emp order by sal desc #降序
#练习7:按照sal 排序
聚合 aggregation
根据一列统计结果
---max / min
select max(sal) from emp --求字段的最大值
select max(sal) sal,max(comm) comm from emp
select min(sal) min from emp --获取最小值
select min(sal) min,max(sal) max from emp --最小值最大值
SELECT ename,MAX(sal) FROM emp group by ename --分组
---sum / avg
select count(*) from emp --总记录数
select sum(sal) from emp --求和
select avg(sal) from emp --平均数
--- count
select count(*) from emp --底层优化了
select count(1) from emp --效果和*一样
select count(comm) from emp --慢,只统计非NULL的
练习