您的位置:首页 > 数据库

什么是数据库?数据库的作用想学数据库必看 (3)数据库操作 排序, 聚合函数 ,分组查询,分页查询,模糊查询,数据完整性

2018-03-20 22:24 1076 查看
排序 order by 列名 asc (默认) desc
5.1 查询所有学生记录, 按年龄升序排序
SELECT * FROM stu ORDER BY sage;

或者 SELECT * FROM stu ORDER BY sage;

5.2查询所有学生记录,按照年龄降序排序
SELECT * FROM stu ORDER BY age DESC;

5.3 查询所有雇员 , 按月薪降序排序 , 如果月薪相同时,按编码升序排序

SELECT *FROM emp ORDER BY sal DESC,empno ASC ;

聚合函数 sum avg max min  count

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

COUNT(); 统计指定列不为NULL的记录行数;
MAX(); 计算指定列的最大值, 如果指定列是字符串类型,那么使用字符串排序运算;

MIN();计算指定列的最小值 如果指定 列式字符串类型 那么使用字符串排序运算;

SUM(); 计算指定列的数值和, 如果指定列类型不是数值类型, 那么计算结果为0;
AVG();计算指定里的平均值,如果指定列类型不是数值类型,那么计算结果为0;

6.1 COUNT
当需要纵向统计时可以使用COUNT()
查询emp表中记录数:
SELECT COUNT (*) AS CNOT FROM emp;

查询emp表中佣金的人数
SELECT COUNT (com) cnot FROM emp;
注意: 因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数

查询emp表中月薪大于2500的人数;
SELECT COUNT (*) FROM emp WHERE sal > 2500;

统计月薪与佣金之和大于2500元的人数:
SELECT SOUNT (*) AS cont FROM emp WHERE sal +IFNULL (com,0)>2500;

查询有佣金的人数 有领导的人数;
SELECT COUNT (comm),COUNT(mgr)
FROM emp;

6.2 sum 和 AV
4000
G (自动过滤器)
当需要纵向求和使用sum()函数.
查询所有雇员月薪和:
SELECT SUM(sal) FROM emp;

查询所有雇员月薪和 以及所有雇员佣金和;
SELECT SUM (sal), SUM(comm)FROM emp;

统计所有员工平均工资;
SELECT AVG(sal) FROM emp;

6.3 MAX和 MIN
查询最高工资 和最低工资:
SELECT MAX(sal), MIN(sal)FROM emp;

7 分组查询

当需要分组查询时需要使用GROUP BY 子句 例如查询每个部门的工资和 , 这说明要使用部门来分组.
注意: 饭盒聚合函数同时出现的列名 一定要写在 group BY 之后

7.1 分组查询

查询每个部门的部门编号和每个部门的工资和;.
SELECT deptno , SUM(sal)
FROM emp
GROUP BY depyno;

查询每个部门的部门编号以及每个部门的人数;
SELECT deptno , COUNT(*) FROM emp GROUP BY deptno;

查询每个部门的部门编号以及每个部门工资大于1500的人数;

SELECT deptno , COUNT(*) FROM emp WHRE sal >1500 GRUP BY deptno;

7.2 HAVING 子句 (分组后使用的条件)
查询工资总和大于9000的部门编号以及工资和
SELECT deptno , SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;

注: having 与 where 的区别:
1.having是在分组后对数据进行过滤.
where是在分组钱对数据进行过滤

2.having 后面可以使用聚合函数(统计函数)
where后面不可以使用聚合函数.
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件, 那么这行记录不会参加分组, HAVING 是对分组后数据的约束

8. LIMIT

LIMIT 用来限定查询结果的起始行,以及总行数

8.1查询5行记录,起始行从0开始SELECT * FROM emp LIMIT 0,5;

注意起始行从0 开始,即第一行开始;

8.2 查询10行记录, 起始行从3开始
SELECT *FROM emp LIMIT 3,10;

8.3分页查询
如果一页记录起始行为0 , 一共查询10行;
第二页记录起始行为10,一共查询10行
第三页记录起始行为20,一共查询10行

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

通佩符:
任意一个字符
%:任意0~n个字符
'%张%' '张_'

数据的完整性
作用: 保证用户输入的数据保存到数据库中是正确的.

确保数据的完整性 = 再创建表时给表中添加约束
Insert into student (id ,name,gender) values(null,'bbb','x');

student
id name gender
1  wang   m
2  Aaa    x

完整性的分类:
实体完整性;
域完整性;
引用完整性;

1. 实体完整性
实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用: 标识每一行数据不重复.

约束类型 : 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment)
---------------------------

1.1主键约束 (primary key)
注:每个表中要有一个主键

特点 : 数据唯一 , 且不能为null
例:
第一种添加方式:
CREATE TABLE student(
in int,
name varchar(50),
primary key(id)
);

联合主键是一个主键 只要两个字段不完全一样 就可以
CREATE TABLE student(
classid int ,
stuid int,
name varchar(50),
primary key (classid,stuid)
);

第三种添加方式

CREATE TABLE student(
id int,
name varchar(50)
);
ADD  CONSTRATNT (添加约束)
ALTER TABLE student ADD CONSTRAINT  PRIMARY KEY (id);

-----------------------------

1.2唯一约束(unique);
特点:数据不能重复.(可以有空值)
CREATE TABLE student(
Id int  primary key,
Name varchar(50) unique
);
-----------------------------
1.3 自动增长列(auto_increment
给主键添加自动增长的数值,列只能是整数类型
(注意数据被删除了 也会 按照原来的数进行增长  不是主键也能添加自动增长列)

CREATE TABLE student(
Id int primary key           auto_increment,
Name varchar(50)
);

INSERT INTO student(name) values ('tom');

-----------------------------

域完整性

域完整性的作用: 限制此单元格的数据正确, 不对照此列的其他单元格比较
域代表当前单元格
域完整性约束:非空约束(not null ) 默认值约束(default)

1.1非空约束: not null
CREATE TABLE student(
Id int primary key,
Name varchar(50)not null,
Sex varchar(10)
);

INSERT INTO student values (1,'tom',null)

1.2 默认值约束 default

CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null
Sex varchar(10)default'男'

);

默认约束 插入的时候 给null 可以 会把 null 插入进去 自动增长的主键给 null 可以 会自动增长

insert into  student1 values(1,'tom','女');

insert into student1 values(2,'jerry',default);

Student

sid name

1 wl
2 dp
score

id  score  sid
1     15    1
2     20    2
3     25    3
4     60    4
5     45    5
6     36    6

引用完整性 (参照完整性)
外键约束: FOREIGN KEY
例 :
CREATE TABLE student(
sid int pirmary key,
name varchar(50) not null,
sum varchar(10) default'man'
);

CREATE TABLE SCORE (
Id int ,
score int,
sid int,
外键的数据类型一定要与主
键的类型一致

CONSTRAINT fk_score_sid foreign key (sid) references student (sid)
);
第二种添加外键方式.
ALTER TABLE score ADD CONSTRAINT fk stu score FOREIGN KEY(sid) REFERENCES stu(id);


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐