2018年3月13日学习总结

时间:2022-05-16 01:58:02

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;

 

/*要合并的这两个数据类型必须都是数值类型*/

 

效果图

2018年3月13日学习总结

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;

练习题案例:

2018年3月13日学习总结

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;