2018年3月13日学习总结
2018.03.13
1.查看表所有内容
SELECT * FROM product;
2.查看其中两列
Select pro_id,pro_name from product;
3.查询时添加常量列,只能用在select语句中
SELECT pro_id AS '产品号',pro_name AS '产品名称' FROM product;
4.查询时合并列
SELECT (price+bonus) AS '总费用' FROM product;
合并
SELECT pro_name,price,bonus,(price+bonus) AS '总费用' FROM product;
/*要合并的这两个数据类型必须都是数值类型*/
效果图
5.查询时去除重复记录(只显示不同的)
SELECT DISTINCT(字段名) FROM product;
6.条件查询
逻辑条件: and(与) or(或)
-- 需求: 查询id为2,且姓名为李四的学生
SELECT * FROM student WHERE id=2 AND NAME='李四';
-- 交集
-- 需求: 查询id为2,或姓名为张三的学生
SELECT * FROM student WHERE id=2 OR NAME='张三';
-- 并集
比较条件: > < >= <= = <>(不等于)或!= between and (等价于>= 且 <=)
-- 需求: 查询servlet成绩大于70分的学生
SELECT * FROM student WHERE servlet>70;
-- 需求: 查询jsp成绩大于等于75,且小于等于90分的学生
SELECT * FROM student WHERE jsp>=75 AND jsp<=90;
-- 另一个语法
SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; /*(包前包后)*/ SELECT pro_name FROM product WHERE price BETWEEN 1000 AND 2000; SELECT pro_name FROM product WHERE price>=1000 AND price<=2000; SELECT * FROM student WHERE gender<>'男';
判空条件
Select * 需求: 查询地址为空的学生(包括null和空字符串)
-- null vs 空字符串
-- null:表示没有值
-- 空字符串:有值的!
-- 判断null
SELECT * FROM student WHERE address IS NULL ;
-- 判断空字符串
SELECT * FROM student WHERE address='';
SELECT * FROM student WHERE address IS NULL OR address='';
-- (包括null和空字符串)
-- 需求: 查询有地址的学生(不包括null和空字符串)
SELECT * FROM student WHERE address IS NOT NULL AND address<>'';
7.模糊查询
通常使用以下替换标记:
-- % : 表示任意个字符
-- _ : 表示一个字符
-- 需求: 查询姓‘张’的学生
SELECT * FROM student WHERE NAME LIKE '李%';
-- 需求: 查询姓‘李’,且姓名只有两个字的学生
SELECT * FROM student WHERE NAME LIKE '李_';
8.聚合查询
常用的聚合函数: sum() avg() max() min() count()
-- 需求:查询学生的servlet的总成绩 (sum() :求和函数)
SELECT SUM(servlet) AS 'servlet的总成绩' FROM student;
-- 需求: 查询学生的servlet的平均分
SELECT AVG(servlet) AS 'servlet的平均分' FROM student;
-- 需求: 查询当前servlet最高分
SELECT MAX(servlet) AS '最高分' FROM student;
-- 需求: 查询最低分
SELECT MIN(servlet) AS '最低分' FROM student;
-- 需求: 统计当前有多少学生(count(字段))
SELECT COUNT(*) FROM student;
SELECT COUNT(id) FROM student;
-- 注意:count()函数统计的数量不包含null的数据
-- 使用count统计表的记录数,要使用不包含null值的字段
SELECT COUNT(age) FROM student;
9.分页查询
SELECT * FROM javastu LIMIT 0,3;
从第一条显示三行
(当前页-1)*显示多少条,显示多少条
10.查询排序
Order by
-- asc: 顺序,正序。数值:递增,字母:自然顺序(a-z)
-- desc: 倒序,反序。数值:递减,字母:自然反序(z-a)
-- 默认情况下,按照插入记录顺序排序
SELECT * FROM student;
11.分组查询
查询男女人数
SELECT ssex,COUNT(*) AS '人数' FROM javastu GROUP BY ssex;
统计男女生各有多少人
12.分组后筛选
查询人数大于多少的性别
SELECT ssex,COUNT(*) AS '人数' FROM javastu GROUP BY ssex HAVING COUNT(*)>5;
练习题案例:
1. 查询出部门编号为30的所有员工
2. 所有销售员的姓名、编号和部门编号。
3. 找出奖金高于工资的员工。
4. 找出奖金高于工资60%的员工。
5. 找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料。
6. 找出部门编号为10中所有经理,部门编号为20中所有销售员,还有即不是经理又不是销售员但其工资大或等于20000的所有员工详细资料。
7. 无奖金或奖金低于1000的员工。
8. 查询名字由三个字组成的员工。
9.查询2000年入职的员工。
10. 查询所有员工详细信息,用编号升序排序
11. 查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序
12.查询姓周的两个名字的员工。
13.查询所有姓张的员工。
14.查询该部门有多少个岗位,每个岗位有多少人。
15.查询哪个岗位中人数大于3。
CREATE TABLE emp2( empno INT, ename VARCHAR(20), job VARCHAR(20), mgr INT, hiredate DATE, sal DOUBLE(10,2), comm DOUBLE(10,2), deptno INT ) SELECT * FROM emp2; INSERT INTO emp2 VALUES(1001,'甘宁','文员',1013,'20001217',8000,NULL,20); INSERT INTO emp2 VALUES(1002,'黛绮丝','销售员',1006,'20010220',16000,3000,30); INSERT INTO emp2 VALUES(1003,'殷天正','销售员',1006,'20010222',12500,5000,30); INSERT INTO emp2 VALUES(1004,'刘备','经理',1009,'20010402',29750,NULL,20); INSERT INTO emp2 VALUES(1005,'谢逊','销售员',1006,'20010928',12500,14000,30); INSERT INTO emp2 VALUES(1006,'关羽','经理',1009,'20010501',28500,NULL,30); INSERT INTO emp2 VALUES(1007,'张飞','经理',1009,'20010901',24500,NULL,10); INSERT INTO emp2 VALUES(1008,'诸葛亮','分析师',1004,'20070419',30000,NULL,20); INSERT INTO emp2 VALUES(1009,'曾阿牛','董事长',NULL,'20011117',50000,NULL,10); INSERT INTO emp2 VALUES(1010,'韦一笑','销售员',1006,'20010908',15000,0,30); INSERT INTO emp2 VALUES(1011,'周泰','文员',1008,'20070523',11000,NULL,20); INSERT INTO emp2 VALUES(1012,'程普','文员',1006,'20011203',9500,NULL,30); INSERT INTO emp2 VALUES(1013,'庞统','分析师',1004,'20011203',30000,NULL,20); INSERT INTO emp2 VALUES(1014,'黄盖','文员',1007,'20020123',13000,NULL,10); INSERT INTO emp2 VALUES(1015,'张三','保洁员',1001,'20130501',80000,50000,50); SELECT ename FROM emp2 WHERE deptno=30; SELECT ename,empno,deptno FROM emp2 WHERE job='销售员'; SELECT ename FROM emp2 WHERE comm>sal; SELECT ename FROM emp2 WHERE comm>sal*0.6; SELECT * FROM emp2 WHERE (deptno=10 AND job='经理') OR (deptno=20 AND job='销售员');
SELECT * FROM emp2 WHERE (deptno=10 AND job='经理') OR (deptno=20 AND job='销售员') OR (job <>'经理' AND job<>'销售员'
AND sal>=20000);
SELECT ename FROM emp2 WHERE comm IS NULL OR comm='' OR comm<=1000; SELECT ename FROM emp2 WHERE ename LIKE '___'; SELECT ename FROM emp2 WHERE hiredate LIKE '2000-%'; SELECT * FROM emp2 ORDER BY empno ASC; SELECT * FROM emp2 ORDER BY sal DESC,hiredate ASC; SELECT ename FROM emp2 WHERE ename LIKE '周_'; SELECT ename FROM emp2 WHERE ename LIKE '张%'; SELECT job,COUNT(*) AS '人数' FROM emp2 GROUP BY job; SELECT job,COUNT(*) AS '人数' FROM emp2 GROUP BY job HAVING COUNT(*)>3;