Java学习路程之数据库表查询和主键,外键

一.表格查询
1.表格查询
去除重复数据 distinct 注意:需要查询的所有数据完全相同才能去除重复的
查询emp表中所有的工资
SELECT DISTINCT ename, sal FROM emp;
查看雇员的月薪与佣金之和
sal+comm两列值相加并且组成一个新的字段,值和null相加只能返回null
给查询的字段起别名 关键词as 可以省略
SELECT ename, sal+IFNULL (comm,0) total FROM emp;
查询所有学生记录,按年龄升序排序
ASC 默认升序排序 DESC 降序排序
SELECT * FROM stu ORDER BY age;
查询所有学生记录,按年龄降序排序
SELECT * FROM stu ORDER BY age DESC;
查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
排序 关键词 order by
SELECT * FROM emp ORDER BY sal DESC, empno ASC;

2.聚合函数 sum avg max min count
查询emp表中记录数:
SELECT COUNT(*) FROM emp;
查询emp表中月薪大于2500的人数:
SELECT COUNT(8) FROM emp WHERE sal > 2500;
查询有佣金的人数,有领导的人数:
SELECT COUNT(comm), COUNT(mgr)FROM emp;
查询所有雇员月薪和:
SELECT SUM(sal) FROM emp;
查询所有雇员月薪和,以及所有雇员佣金和:
SELECT SUM(sal), SUM(IFNULL(comm,0)) FROM emp;
查询所有雇员月薪+佣金和:
SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
统计所有员工平均工资:
SELECT AVG(sal) FROM emp;
查询最高工资和最低工资:
SELECT MAX(sal), MIN(sal) FROM emp;

3.分组查询 关键词grope by
按什么分组前面查询的字段就是什么,保证查询结果数量对等
查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门的人数:
SELECT deptno, COUNT() FROM emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数:
SELECT deptno, COUNT(
) FROM emp WHERE sal>1500 GROUP BY deptno;
查询工资总和大于9000的部门编号以及工资和:
WHERE后面不能使用聚合函数,分组之后如果要添加筛选条件需要使用having关键词,
having后面可以使用聚合函数,写在分组后
where条件是在分组之前进行筛选而having是在分组之后进行筛选
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)

4.分页查询 关键词limit(mysql的方言)
limit 起始显示数据,一共显示多少条数据,从0开始
limit在所有的筛选条件之后
SELECT * FROM stu LIMIT 0, 3;

5.模糊查询 关键词 like
使用占位符 %(代表多个字符) _(一个下划线表示一个字符)
SELECT * FROM emp WHERE ename LIKE ‘%s%’;
SELECT * FROM emp WHERE ename LIKE ‘____s’;
二.主键设置
1.数据完整性
1).引用完整性(多张表依赖的关系)
2). 域完整性(一个单元格的完整性)
3).实体完整性(一条数据的完整性)
主键(唯一且不能为空) 用于精准删除
唯一键: 唯一的可以为空

2.设置主键方式一 使用primary key
设置主键方式一 primary key
CREATE TABLE person1(
pid INT PRIMARY KEY,
pname VARCHAR(20)
);

3.设置主键方式二
CREATE TABLE person2(
pid INT,
pname VARCHAR(20),
PRIMARY KEY (pid)
);
方式二可以创建联合主键,两个字段同时当主键
CREATE TABLE person3(
pid INT,
oid INT,
pname VARCHAR(20),
PRIMARY KEY (pid, oid)
);

4.设置主键方式三 先创建出表,再添加主键约束
CREATE TABLE person4(
pid INT,
pname VARCHAR(20)
);
添加主键约束
ALTER TABLE person4 ADD CONSTRAINT PRIMARY KEY (pid);
删除主键约束,直接删除主键不用约束
ALTER TABLE person4 DROP PRIMARY KEY;

5.唯一键约束 关键词 UNIQUE
CREATE TABLE person5(
pid INT,
pname VARCHAR(20) UNIQUE
);
INSERT INTO person5 (id, name) VALUES (3, ‘王伟’);
INSERT INTO person5 (id, name) VALUES (4, NULL);

6, id 自增
CREATE TABLE person6(
pid INT PRIMARY KEY auto_increment,
pname VARCHAR(20)
);
注意:主键只能自增不能退回,即使删除
INSERT INTO person6 (name) VALUES (‘王伟’);
INSERT INTO person6 (name) VALUES (‘李四’);
给空值自增,ID自增
INSERT INTO person6 (id, name) VALUES (NULL, ‘嘿嘿’);

7.域完整性: not null(非空) default(默认值)
CREATE TABLE person7(
id INT PRIMARY KEY auto_increment,
name VARCHAR(10) NOT NULL,
gender VARCHAR(10) DEFAULT ‘男’
);
有默认值约束时直接插入null 可以用,要插入默认的值,不插入该字段即可
INSERT INTO stu7 (name) VALUES (‘李四’);

三.建立外键
1 建立外键的方式一
首先明确外键是在主表还是从表中(在从表中)
外键在从表 规范: fk_主表名_从表名_字段名
CONSTRAINT 外键别名 FOREIGN KEY (从表中的字段) REFERENCES 主表名 (主表中关联字段)

CREATE TABLE stud(
sid INT PRIMARY KEY,
sname VARCHAR(20)
);

CREATE TABLE scor(
sid INT,
score INT,
CONSTRAINT fk_stud_scor_sid
FOREIGN KEY (sid) REFERENCES stud (sid)
);
2.建立外键方式二

CREATE TABLE stud1(
sid INT PRIMARY KEY,
sname VARCHAR(20)
);

CREATE TABLE scor1(
sid INT,
score INT,
);
添加外键约束
ALTER TABLE scor1 ADD CONSTRAINT fk_stud1_scoe1_sid
FOREIGN KEY (sid) REFERENCES stud (sid)
3. 删除外键
ALTER TABLE scor1 DROP FOREIGN KEY fk_stud1_scoe1_sid;

4.表和表关系多对多时 外键
CREATE TABLE teach(
tid INT PRIMARY KEY,
tname VARCHAR(20)
);

CREATE TABLE studd(
sid INT PRIMARY KEY,
sname VARCHAR(20)
);

CREATE TABLE foreign_mid(
tid INT,
sid INT
);
依次在外键表中建立外键
ALTER TABLE foreign_mid ADD CONSTRAINT fk_teach_studd_tid
FOREIGN KEY (tid) REFERENCES teach (tid)

ALTER TABLE foreign_mid ADD CONSTRAINT fk_teach_studd_sid
FOREIGN KEY (sid) REFERENCES studd (sid)

猜你喜欢

转载自blog.csdn.net/l710820742/article/details/82873317