数据库 表之间的联系

来源:互联网 发布:短信验证码软件 编辑:程序博客网 时间:2024/05/18 09:03
  1. 通过外键进行关联,外键中的元素必须全部来自对应的主键,且如果删除主键,那么必须先删除相应的外键,这样的设计使数据保证了一致性。但性能下降了很多,当性能比安全性更重要的时候,不要用外键,自己做好相关的权衡。
CREATE TABLE Orders(Id_O int NOT NULL,OrderNo int NOT NULL,Id_P int,PRIMARY KEY (Id_O),FOREIGN KEY (Id_P) REFERENCES Persons(Id_P))
  1. 一对多体现在JAVA中利用数组。
  2. domian的JavaBean有时也称为实体类,对应相应的表结构。
  3. 多对多的关系通过第三方的表来体现,通过两个外键互相约束。
create table TEACHERS(ID int primary key,NAME varchar(100),SALARY float(10,2));create table STUDENTS(ID int primary key,NAME varchar(100),GRADE char(1));create table TEACHERS_STUDENTS(T_ID int,S_ID int,primary key(T_ID,S_ID),constraint T_ID_FK foreign key (T_ID) references TEACHERS(id),constraint S_ID_FK foreign key (S_ID) references STUDENTS(id));

5 . 交叉连接:
两个表的笛卡尔积。

select * from CUSTOMER,ORDERS;select c.ID,c.NAME,o.NUM,O.NUMBER from CUSTOMER c, ORDDERS o;
  1. 内连接:
    在交叉连接的情况下筛选出来满足的某个条件。
隐式:select * from CUSTOMER c,ORDERS o where c.ID=o.CUSTOMER_id;显示:select * from CUSTOMER c inner join ORDERS o on c.ID=o.CUSTOMER_id;

7 . 外连接:

左外:返回左表中的所有记录和满足连接的所有记录。select * from CUSTOMER c left outer join ORDERS o on c.ID=o.CUSTOMER_ID;右外:返回满足连接条件的记录,同时返回右表中的所有记录。select * from CUSTOMER c right outer join ORDERS o on c.ID=o.CUSTOMER_ID;

8 . 子查询:
嵌套查询,利用查询的返回值当做一个条件。

select * from CUSTOMER where ID in (select CUSTOMER_ID from ORDERS ehere PRICE>100);

9 . MySQL常用函数:
SUM():求和
select sum(*) from STUDENT;
COUNT():计数
select count(*) from STUDENT where MATH>=90;
AVG():求平均,字段为NULL,不算值。
select avg(*) from STUDENT where MATH>=90;
MAX():求最大
MIN():求最小
还有一些关于时间和数学的函数。
10 . 分组查询:
按照PRODUCT分组,输出每组的名称和 和。
having用于分组后过滤,可以使用函数,where不可以。
select PRODUCT,sum(PRICE) from PRODUCTS group by PRODUCT having sum(PRICE)>100;

1 0
原创粉丝点击