文章目录
- 一,准备dept表和emp表
- --1,dept表
- --2,emp表
- 二,MySQL客户端工具sqlyog
- --1,连接数据库的服务器
- --2,创建库
- --3,创建表
- --4,添加数据
- 三,MySQL的基础函数
- --1,概述
- --2,测试
- 四,条件查询
- --1,distinct & where
- --2,like & null
- --3,between and & limit & order by
一,准备dept表和emp表
–1,dept表
mysql> show databases;
mysql> use cgb211001;
mysql> show tables;
mysql> drop table dept;
mysql> create table dept(
-> deptno int primary key auto_increment,
-> dname varchar(20),
-> loc varchar(13)
-> );
mysql> set names gbk;
mysql> insert into dept values(null,'accounting','一区');
mysql> insert into dept values(null,'research','二区');
mysql> insert into dept values(null,'operations','二区');
–2,emp表
mysql> create table emp(
-> empno int primary key auto_increment,
-> ename varchar(10),
-> job varchar(10),
-> mgr int,
-> hiredate datetime,
-> sal double,
-> comm numeric(8,2),
-> deptno int
-> );
mysql> INSERT INTO emp VALUES(100,'jack','副总',NULL,'2002-05-1',90000,NULL,1);
mysql> INSERT INTO emp VALUES(200,'tony','总监',100,'2015-02-02',10000,2000,2);
mysql> INSERT INTO emp VALUES(300,'hana','经理',200,'2017-02-02',8000,1000,2);
mysql> INSERT INTO emp VALUES(400,'leo','员工',300,'2019-02-22',3000,200.12,2);
mysql> INSERT INTO emp VALUES(500,'liu','员工',300,'2019-03-19',3500,200.58,2);
二,MySQL客户端工具sqlyog
–1,连接数据库的服务器
新建连接 – 输入了密码 – 确定
–2,创建库
右键 – 创建数据库 – 输入库名和选成utf8 – 确定
–3,创建表
选中Tables — 右键 — 新建表 — 输入字段名称/字段类型/字段长度 — 设置表名 — 成功
–4,添加数据
可以直接在工具里录入数据,保存就行了.
也可以执行SQL,刷新数据就行了.
三,MySQL的基础函数
–1,概述
为了方便的操作数据,MySQL提供了很多函数,
常见的: lower upper length concat substr replace…
–2,测试
#1.查询语句的多种写法
#查询 所有列
SELECT * FROM emp;
#查询 ename列 的值
SELECT ename FROM emp;
#查询 字段名 别名
SELECT ename abc FROM emp;#给字段设置别名
# 字段名 别名 字段名 别名
SELECT ename a , job b FROM emp;
#2.基本函数:
#upper(m)全转大写,m是字段名称或者字符串
SELECT ename,UPPER('abc'),UPPER(ename) FROM emp;
#lower(m)全转小写,m是字段名称或者字符串
SELECT ename,LOWER('XYZ'),LOWER(ename) FROM emp;
#length(字段名称)求长度,一个字母或数字长度为1,一个汉字为3
SELECT ename,LENGTH(ename),LENGTH(job) FROM emp;#求ename的长度
#substr(a,b,c)截取,a是字段名称b是从第几个开始c是要截取的长度
SELECT ename,SUBSTR(ename,2) FROM emp;
SELECT ename,SUBSTR(ename,2,1) FROM emp;
#concat(a,b,c)拼接,a是字段名称b和c是要拼接的数据
SELECT ename,CONCAT(ename,123,'hello') FROM emp;
#replace(a,b,c)替换,a是字段名称b是要把谁替换成c
SELECT ename,REPLACE(ename,'a','b') FROM emp;
#ifnull(a,b)如果是null就替换,a是字段名称b是要把null替换成b
SELECT comm,IFNULL(comm,100) FROM emp;
#小数处理的:
#round(a)四舍五入,把a的值取整
SELECT comm,ROUND(comm) FROM emp;
#round(a,b)四舍五入,把a的值保留b位小数
SELECT comm,ROUND(comm,2) FROM emp;
#ceil直接向上取整 & floor直接向下取整
SELECT comm,CEIL(comm),FLOOR(comm) FROM emp;
#日期处理的:
#now & year & month & day & hour & minute & second
SELECT NOW(),YEAR('2021-11-25'),YEAR( NOW() )
,MONTH( NOW() ),DAY( NOW() )
,HOUR( NOW() ),MINUTE( NOW() ),SECOND( NOW() )
#转义字符: '
SELECT 'xi\'an'
SELECT "xi'an"
四,条件查询
–1,distinct & where
#条件查询:
#1.distinct去重,注意位置
# 字段名 表名
SELECT loc FROM dept
SELECT DISTINCT loc FROM dept
#2.where:条件满足才查
#语法: select 字段名 from 表名 where 字段名=字段值
#练习1:查询地址在一区的部门
SELECT * FROM dept WHERE loc='一区'
#练习2:查询2号部门的所有数据
SELECT * FROM dept WHERE deptno=2
#练习3:查询办公地址在二区的部门名称
SELECT dname FROM dept WHERE loc="二区"
#练习4:查询编号<3的部门地址
SELECT loc FROM dept WHERE deptno<3
#练习5:查询地址在二区的,编号是3的部门名称
#如果查询条件有多个,使用 and并且 or或者 连接
SELECT dname FROM dept WHERE loc="二区" AND deptno=3
#练习6:查询编号是1或者2的部门名称
SELECT dname FROM dept WHERE deptno=1 OR deptno=2
SELECT dname FROM dept WHERE deptno IN (1,2)#效果同上
#练习7:查询地址在一区,或者,编号是3的部门名称
SELECT dname FROM dept WHERE loc='一区' OR deptno=3
#向user表中,录入数据,测试where也可以对增删改设置条件
#练习8:修改3号用户的密码
#语法: update 表名 set 字段名=字段值 where 字段名=字段值
UPDATE USER SET pwd="xyz" WHERE id=3
#练习9:修改密码是123,age=20的用户名
UPDATE USER SET NAME='anglelababa'
WHERE pwd=123 AND age=20
#练习10:删除5号用户
DELETE FROM USER WHERE id=5
–2,like & null
#3.like模糊查询,%是通配符(0~n个字符),_是通配符(1个字符)
#练习11:查询名字是以t开头的员工姓名和岗位
SELECT ename,job FROM emp WHERE ename LIKE 't%'#以t开头,高效
#练习12:查询名字包含o的员工姓名和编号
SELECT ename,empno FROM emp WHERE ename LIKE '%o%'#包含o
SELECT ename,empno FROM emp WHERE ename LIKE '%o'#以o结束
#4.null,对null特殊处理
#练习13:查询没有奖金的员工姓名和岗位
SELECT ename,job FROM emp WHERE comm IS NULL#没有奖金的
SELECT ename,job FROM emp WHERE comm IS NOT NULL#有奖金的
–3,between and & limit & order by
#4.between and区间范围,两边都包含
#练习14:查询工资在[5000~1000]员工姓名和入职日期
SELECT ename,hiredate FROM emp WHERE sal>5000 AND sal<=10000
SELECT ename,hiredate FROM emp WHERE sal BETWEEN 5000 AND 10000
#练习15:查询在2019年入职的员工姓名
SELECT ename FROM emp WHERE hiredate
BETWEEN '2019-1-1' AND '2019-12-31'
SELECT ename FROM emp WHERE YEAR(hiredate)=2019#效果同上
#5.limit分页
#练习16:展示前两个员工的信息
SELECT * FROM emp LIMIT 2 #取前两条
SELECT * FROM emp LIMIT 0,2 #从第0+1条开始取,取2条
SELECT * FROM emp LIMIT 1,3 #从第1+1条开始取,取3条
#6.order by字典顺序排序,默认升序,非要降序就写明DESC
#练习17:按照工资排序
SELECT * FROM emp ORDER BY sal DESC
#练习18:按照名字排序,按照字典顺序排序
SELECT * FROM emp ORDER BY ename
#练习19:按照日期排序,当做数值在升序
SELECT * FROM emp ORDER BY hiredate
#练习20:按照岗位排序
SELECT * FROM emp ORDER BY job
#练习21:查询最高薪的员工的名字和岗位
SELECT * FROM emp ORDER BY sal DESC LIMIT 1