数据库学习Day003(DQL)

DQL数据查询语言(重要)

        数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。查询返回的结果集就是一张虚拟表

查询关键字:SELECT

        语法: 

SELECT 列名 FROM表名

【WHERE --> GROUP BY -->HAVING--> ORDER BY-->LIMIT】

首先先创建一个stu表

#创建stu表
CREATE TABLE stu (
	sid	CHAR(6),
	sname		VARCHAR(50),
	age		INT,
	gender	VARCHAR(50)
);
#向stu表中插入数据
INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);

对数据的查询

基础查询

查询表中某一个指定的列   SELECT 字段名 FROM 表名;
查询表中的多个字段    SELECT 字段名1,字段名2……字段名n FROM 表名;
#查询表中的所有字段:第一种方式将所有的字段一一写出来,第二种方式使用通配符*
#SELECT * FROM 表名

#查询学生表stu表中的学生姓名字段
select sname from `stu`;
#查询学生表中的学生姓名、学生年龄、学生性别
SELECT sname,age,gender from stu;
SELECT * from stu;

条件查询

对查询出来的结果进行筛选,使用where进行过滤

条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

  1. =、!=、<>、<、<=、>、>=;
  2. BETWEEN…AND;
  3. IN(set);
  4. IS NULL;IS NOT NULL:  
  5. AND;
  6. OR;
  7. NOT;
        #查询性别为女,并且年龄小于50的记录
		SELECT * FROM stu WHERE gender='female' and age < 50;	
		#查询学号为S_1001,或者姓名为lisi的记录
		SELECT * FROM stu WHERE sid='S_1001' or sname = 'liSi';
		#查询学号为s_1001、s_1002、s_1003的记录
		SELECT * FROM stu WHERE sid='S_1001' OR sid='S_1002' OR sid='S_1003';
		#使用IN关键字实现上述需求
		SELECT * FROM Stu WHERE sid IN('S_1001','S_1002','S_1003');
		#查询学号不是为s_1001、s_1002、s_1003的记录
		SELECT * FROM stu WHERE sid!='S_1001' AND sid!='S_1002' AND sid!='S_1003';
		#使用NOTIN关键字实现上述需求
		SELECT * FROM Stu WHERE sid NOT IN('S_1001','S_1002','S_1003');、
		#查询年龄为null的记录
		SELECT * FROM stu WHERE age is null;
		#查询年龄再20到40之间的学生记录
		SELECT * FROM stu WHERE age>=20 AND age <=40
		#使用between and关键字来实现
		SELECT * FROM stu WHERE age BETWEEN 20 AND 40; #包含20和40两个临界值
		#查询性别非男的学生记录
		#非男就是女,查询性别为女的学生记录
		SELECT * FROM stu WHERE gender='female';
		SELECT * FROM stu WHERE gender !='male';
		SELECT * FROM stu WHERE gender <>'male';
		SELECT * from stu where not gender = 'male';#注意:not需要写在字段名的前面
		#查询姓名不为null的学生记录
		SELECT * FROM stu WHERE sname IS NOT null;
		SELECT * FROM stu WHERE NOT sname IS null;

模糊查询

当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。

通配符:

_ 任意一个字母       %:任意0~n个字母

        #查询姓名由5个字母构成的学生记录
		SELECT * FROM stu WHERE sname LIKE '_____';
		#查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
		SELECT * FROM stu WHERE sname LIKE '____i';
		#查询姓名以Z开头的学生记录
		SELECT * FROM stu WHERE sname LIKE 'z%';
		#查询姓名第二个字母为I的学生记录
		SELECT * FROM stu WHERE sname LIKE '_i%';
		#查询姓名包含a的学生记录‘
		SELECT * FROM stu WHERE sname LIKE '%a%';

字段控制函数

        #去除重复数据
		#通过emp表来查询一下员工所在的部门由哪些
		SELECT deptno FROM emp;
		#使用distinct关键字去除重复记录
		SELECT DISTINCT deptno FROM emp;
		#一个数与NULL进行算术运算,结果为NULL
		#查询员工的所有信息以及薪水和佣金之和
		SELECT * ,sal+comm FROM emp;#由于有的comm值为NULL,所以在于sal结果相加的时候结果也为NULL
		#使用IFNULL(字段名,数据)函数将某一个字段值为NULL的值转换为你指定的数据
		SELECT *,sal+IFNULL(comm,100) FROM emp;
		#给列名添加别名,使用As关键字来实现,AS关键字可以省略
		SELECT empno AS '员工编号',ename As '员工姓名' FROM emp;
		SELECT *,sal+IFNULL(comm,100) '薪水和佣金之和' FROM emp;
		#排序,我们将数据按照要求查询出来后,可能需要按照某个字段进行升序或者降序排序,需要使用ORDER BY关键字进行排序 升序关键次ASC(升序可以省略不写) 降序关键词(desc)
		#查询员工的所有信息,并按照员工的sal进行升序排序
		SELECT * FROM emp ORDER BY sal;#可以不写默认是升序排序
		SELECT * FROM emp ORDER BY sal ASC;
		#查询员工的所有信息,并按照员工的sal进行升序排序
		SELECT * FROM emp ORDER BY sal DESC;
		#按照某个字段进行排序后发现,有的字段值是一样的,这个时候按照数据表中的顺序进行排序,也可以按照
		#查询员工的所有信息并按照sal进行升序排序,当sal相同时,按照员工编号降序排序
		SELECT * FROM emp ORDER BY sal ASC,empno DESC;
		#查询所有学生记录,按年龄升序排序
		SELECT * FROM stu ORDER BY age;
		#查询所有学生记录,按年龄降序排序
		SELECT * FROM stu ORDER BY age DESC;

聚合函数  sum avg max min count

聚合函数是用来做纵向运算的函数:

  1. COUNT():统计指定列不为NULL的记录行数;
  2. MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
  3. MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
  4. SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
  5. AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

 

        #聚合函数:用来对查询结果进行纵向统计的
		#count():统计指定列不为NULL的记录行数
		#统计emp表中由佣金的人数
		SELECT COUNT(comm) AS '有佣金的人数'  FROM emp;
		#统计一共有多少员工
		SELECT COUNT(*) '公司员工人数' FROM emp;
		#统计多少员工有领导
		SELECT COUNT(mgr) FROM emp;
		#查询emp表中emp表中月薪大于2500的人数
		SELECT COUNT(*) '月薪大于2500的人数' FROM emp WHERE sal>2500;
		#统计月薪与佣金之和大于2500的人数
			#查询出月薪和佣金之和大于2500的员工记录
			SELECT * FROM emp WHERE sal+IFNULL(comm,0) >2500;
			SELECT COUNT(*) '>2500' FROM emp WHERE sal+IFNULL(comm,0) >2500;
			#查询有佣金的人数以及有领导的人数
			SELECT COUNT(comm) '有佣金的人数',COUNT(mgr) '有领导的人数' FROM emp;
		#sum()和avg()函数
			#查询所有雇员月薪和
			SELECT SUM(sal)'工资总和' FROM emp;
			#查询所有雇员月薪和以及所有雇员佣金和
			SELECT SUM(sal) '工资总和',sum(comm) '佣金和' FROM emp;
			#查询所有雇员月薪+佣金和
			SELECT SUM(sal+IFNULL(comm,0)) AS '所有雇员月薪+佣金和' FROM emp;
			#查询所有雇员月薪平均值
			SELECT AVG(sal)'工资平均' FROM emp;
		#统计最大值最小值
			SELECT MAX(sal)'最高工资',MIN(sal)'最低工资' FROM emp;

MYSQL数据库中除了提供上述聚合函数外还有很多函数提供给我们使用,比如:

SELECT concat('Hello','World','Welcome','To','FuJian')

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放在糖果旁的是我很想回忆的甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值