/*
回顾:
DDL create drop
DML insert update delete
DQL select
a,基本查询
b,条件查询 where
c,排序 order by
d,分组 group by
e,分组后的过滤 having
f,字段的控制 distinct 别名...
*/
-- 分页查询
/*
在实际的Web开发中有可能一页的数据太多,不能够
在一页展示,如果展示也可能造成性能的丢失,所以为
了提高用户的体验,我们可以数据分页的显示在web
页面上。实际开发中分页分为2种 一种为
真分页 数据库采用了分页查询
假分页 数据库没有采用分页查询,而是在服务端对数据
进行处理。
limit 注意 这个不是SQL标准,只能在mysql中使用。
limit 参数1,参数2
1-- 从第几条开始 从0开始
2-- 改页的条数
*/
USE java1711;
-- 每页4条记录 第一页
SELECT *
FROM emp
LIMIT 0,4;
-- 每页4条记录 第二页
SELECT *
FROM emp
LIMIT 4,4;
-- 当前页-1 * 每页的条数
-- 每页4条记录 第三页
SELECT *
FROM emp
LIMIT 8,4;
-- 每页4条记录 第四页
SELECT *
FROM emp
LIMIT 12,4;
SELECT *
FROM emp
WHERE deptno='30'
SELECT *
FROM emp
WHERE comm>sal;
/*4. 找出奖金高于工资60%的员工。*/
SELECT *
FROM emp
WHERE comm>sal*0.6;
/*5. 找出部门编号为10中所有经理,和部门编号为20中所有
销售员的详细资料。*/
SELECT *
FROM emp
WHERE deptno=10 AND job='经理' OR deptno=20 AND job='销售员';
/*6. 找出部门编号为10中所有经理,部门编号为20中所有销
售员,还有即不是经理又不是销售员但其工资大或等于
20000的所有员工详细资料。*/
SELECT *
FROM emp
WHERE deptno=10 AND job='经理' OR
deptno=20 AND job='销售员' OR
job!='经理' AND job!='销售员' AND sal>=20000;
/*7. 有奖金的工种。*/
SELECT *
FROM emp
WHERE comm IS NOT NULL;
/*8. 无奖金或奖金低于10000的员工。*/
SELECT ename
FROM emp
WHERE comm IS NULL OR comm<10000;
/*9. 查询名字由三个字组成的员工。*/
SELECT * FROM emp
WHERE ename LIKE '___';
/*10.查询2000年入职的员工。*/
SELECT ename
FROM emp
WHERE hiredate LIKE '2000%';
/*11. 查询所有员工详细信息,用编号升序排序*/
SELECT *
FROM emp
ORDER BY empno ASC;
/*12. 查询所有员工详细信息,用工资降序排序,如果工资
相同使用入职日期升序排序*/
SELECT *
FROM emp
ORDER BY sal DESC ,hiredate ASC;
/*13. 查询每个部门的平均工资*/
SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno;
/*14. 求出每个部门的雇员数量。*/
SELECT DEPTNO, COUNT(EMPNO)FROM emp GROUP BY deptno;
/*15. 查询每种工作的最高工资、最低工资、人数*/
SELECT job, MAX(sal),MIN(sal),COUNT(*)
FROM emp
GROUP BY job
/*16. 显示非销售人员工作名称以及从事同一工作雇员的月
工资的总和,并且要满足从事同一工作的雇员的月工资合
计大于50000,输出结果按月工资的合计升序排列*/
SELECT job '工种',SUM(sal) '月工资'
FROM emp
WHERE job!='销售员'
GROUP BY job
HAVING SUM(sal)>50000
ORDER BY SUM(sal) ASC;
/*
select
from
where
group by
having
order by
limit
*/
/*
数据库的约束
和Java中的 泛型有些类似,目的是为了让程序报错。
为了数据库中记录的数据有意义。保证数据的完整性。
对于MySql来说有下面常见的约束
a,主键约束
单列 PK
联合 了解
b,唯一约束
c,非空约束
d,外键约束
e,检查约束 MySql不支持
*/
CREATE DATABASE java1711_1;
USE java1711_1;
DROP TABLE t_student;
CREATE TABLE t_student(
sno INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
cardID VARCHAR(18) UNIQUE
);
INSERT INTO t_student(NAME,cardID) VALUES('张三',NULL);
INSERT INTO t_student(NAME,cardID) VALUES('李四','123');
INSERT INTO t_student(NAME,cardID) VALUES('王五','456');
SELECT * FROM t_student;
DROP TABLE t_user;
CREATE TABLE t_user(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键 并且自增长
username VARCHAR(30) BINARY UNIQUE NOT NULL, -- 唯一 非空
PASSWORD VARCHAR(30) NOT NULL -- 非空
);
/*
BINARY
MySql 默认情况下 在Windows系统下字段是不区分大小写
在Linux 会区分大小写。
*/
INSERT INTO t_user(username,PASSWORD) VALUES('root','123456');
INSERT INTO t_user(username,PASSWORD) VALUES('system','6666');
INSERT INTO t_user(username,PASSWORD) VALUES('Root','123456');
SELECT * FROM t_user;
/*
外键 必须要先有班级才能有学生
学生表
班级表
*/
DROP TABLE t_student;
CREATE TABLE t_student(
sno INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) NOT NULL,
age INT,
address VARCHAR(50),
c_id INT,
CONSTRAINT t_666 FOREIGN KEY (c_id)
REFERENCES t_class(c_id)
);
DROP TABLE t_class;
CREATE TABLE t_class(
c_id INT PRIMARY KEY,
c_name VARCHAR(30)
);
INSERT INTO t_class(c_id,c_name) VALUES(1,'Java1711');
INSERT INTO t_class(c_id,c_name) VALUES(2,'Java1710');
INSERT INTO t_class(c_id,c_name) VALUES(3,'Java1712');
SELECT * FROM t_class;
INSERT INTO t_student(NAME,age,address,c_id) VALUES('张三',10,'合肥',4);
SELECT * FROM t_student;
回顾:
DDL create drop
DML insert update delete
DQL select
a,基本查询
b,条件查询 where
c,排序 order by
d,分组 group by
e,分组后的过滤 having
f,字段的控制 distinct 别名...
*/
-- 分页查询
/*
在实际的Web开发中有可能一页的数据太多,不能够
在一页展示,如果展示也可能造成性能的丢失,所以为
了提高用户的体验,我们可以数据分页的显示在web
页面上。实际开发中分页分为2种 一种为
真分页 数据库采用了分页查询
假分页 数据库没有采用分页查询,而是在服务端对数据
进行处理。
limit 注意 这个不是SQL标准,只能在mysql中使用。
limit 参数1,参数2
1-- 从第几条开始 从0开始
2-- 改页的条数
*/
USE java1711;
-- 每页4条记录 第一页
SELECT *
FROM emp
LIMIT 0,4;
-- 每页4条记录 第二页
SELECT *
FROM emp
LIMIT 4,4;
-- 当前页-1 * 每页的条数
-- 每页4条记录 第三页
SELECT *
FROM emp
LIMIT 8,4;
-- 每页4条记录 第四页
SELECT *
FROM emp
LIMIT 12,4;
SELECT *
FROM emp
WHERE deptno='30'
SELECT *
FROM emp
WHERE comm>sal;
/*4. 找出奖金高于工资60%的员工。*/
SELECT *
FROM emp
WHERE comm>sal*0.6;
/*5. 找出部门编号为10中所有经理,和部门编号为20中所有
销售员的详细资料。*/
SELECT *
FROM emp
WHERE deptno=10 AND job='经理' OR deptno=20 AND job='销售员';
/*6. 找出部门编号为10中所有经理,部门编号为20中所有销
售员,还有即不是经理又不是销售员但其工资大或等于
20000的所有员工详细资料。*/
SELECT *
FROM emp
WHERE deptno=10 AND job='经理' OR
deptno=20 AND job='销售员' OR
job!='经理' AND job!='销售员' AND sal>=20000;
/*7. 有奖金的工种。*/
SELECT *
FROM emp
WHERE comm IS NOT NULL;
/*8. 无奖金或奖金低于10000的员工。*/
SELECT ename
FROM emp
WHERE comm IS NULL OR comm<10000;
/*9. 查询名字由三个字组成的员工。*/
SELECT * FROM emp
WHERE ename LIKE '___';
/*10.查询2000年入职的员工。*/
SELECT ename
FROM emp
WHERE hiredate LIKE '2000%';
/*11. 查询所有员工详细信息,用编号升序排序*/
SELECT *
FROM emp
ORDER BY empno ASC;
/*12. 查询所有员工详细信息,用工资降序排序,如果工资
相同使用入职日期升序排序*/
SELECT *
FROM emp
ORDER BY sal DESC ,hiredate ASC;
/*13. 查询每个部门的平均工资*/
SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno;
/*14. 求出每个部门的雇员数量。*/
SELECT DEPTNO, COUNT(EMPNO)FROM emp GROUP BY deptno;
/*15. 查询每种工作的最高工资、最低工资、人数*/
SELECT job, MAX(sal),MIN(sal),COUNT(*)
FROM emp
GROUP BY job
/*16. 显示非销售人员工作名称以及从事同一工作雇员的月
工资的总和,并且要满足从事同一工作的雇员的月工资合
计大于50000,输出结果按月工资的合计升序排列*/
SELECT job '工种',SUM(sal) '月工资'
FROM emp
WHERE job!='销售员'
GROUP BY job
HAVING SUM(sal)>50000
ORDER BY SUM(sal) ASC;
/*
select
from
where
group by
having
order by
limit
*/
/*
数据库的约束
和Java中的 泛型有些类似,目的是为了让程序报错。
为了数据库中记录的数据有意义。保证数据的完整性。
对于MySql来说有下面常见的约束
a,主键约束
单列 PK
联合 了解
b,唯一约束
c,非空约束
d,外键约束
e,检查约束 MySql不支持
*/
CREATE DATABASE java1711_1;
USE java1711_1;
DROP TABLE t_student;
CREATE TABLE t_student(
sno INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
cardID VARCHAR(18) UNIQUE
);
INSERT INTO t_student(NAME,cardID) VALUES('张三',NULL);
INSERT INTO t_student(NAME,cardID) VALUES('李四','123');
INSERT INTO t_student(NAME,cardID) VALUES('王五','456');
SELECT * FROM t_student;
DROP TABLE t_user;
CREATE TABLE t_user(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键 并且自增长
username VARCHAR(30) BINARY UNIQUE NOT NULL, -- 唯一 非空
PASSWORD VARCHAR(30) NOT NULL -- 非空
);
/*
BINARY
MySql 默认情况下 在Windows系统下字段是不区分大小写
在Linux 会区分大小写。
*/
INSERT INTO t_user(username,PASSWORD) VALUES('root','123456');
INSERT INTO t_user(username,PASSWORD) VALUES('system','6666');
INSERT INTO t_user(username,PASSWORD) VALUES('Root','123456');
SELECT * FROM t_user;
/*
外键 必须要先有班级才能有学生
学生表
班级表
*/
DROP TABLE t_student;
CREATE TABLE t_student(
sno INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) NOT NULL,
age INT,
address VARCHAR(50),
c_id INT,
CONSTRAINT t_666 FOREIGN KEY (c_id)
REFERENCES t_class(c_id)
);
DROP TABLE t_class;
CREATE TABLE t_class(
c_id INT PRIMARY KEY,
c_name VARCHAR(30)
);
INSERT INTO t_class(c_id,c_name) VALUES(1,'Java1711');
INSERT INTO t_class(c_id,c_name) VALUES(2,'Java1710');
INSERT INTO t_class(c_id,c_name) VALUES(3,'Java1712');
SELECT * FROM t_class;
INSERT INTO t_student(NAME,age,address,c_id) VALUES('张三',10,'合肥',4);
SELECT * FROM t_student;