mysql数据库基础下

mysql> use GYS

第一种设主键方式
mysql> create table s
-> (sno varchar(2),
-> sname varchar(6),
-> status int,
-> city varchar(4),
-> primary key(sno));

第二种设主键方式

mysql> create table p
-> (pno varchar(2) primary key,
-> pname varchar(6),
-> color varchar(2),
-> weight int);


mysql> create table j
-> (jno varchar(2) primary key,
-> jname varchar(6) ,
-> city varchar(4));

设外键方式
mysql> create table spj
-> (sno varchar(2),
-> pno varchar(2),
-> jno varchar(2),
-> qty int,
-> foreign key(sno) references s(sno),
-> foreign key(pno) references p(pno),
-> foreign key(jno) references j(jno));

insert into s values('s1','精益',20,'天津'),
('s2','盛锡',10,'北京'),
('s3','东方红',30,'北京'),
('s4','丰泰盛',20,'天津'),
('s5','为民',30,'上海');
insert into p values('p1','螺母','红',12),
('p2','螺栓','绿',17),
('p3','螺丝刀','蓝',14),
('p4','螺丝刀','红',14),
('p5','凸轮','蓝',40),
('p6','齿轮','红',30);
insert into j values('j1','三建','北京'),
('j2','一汽','长春'),
('j3','弹簧厂','天津'),
('j4','造船厂','天津'),
('j5','机车厂','唐山'),
('j6','无线电厂','常州'),
('j7','半导体厂','南京');
insert into spj values('s1','p1','j1',200),
('s1','p1','j3',100),
('s1','p1','j4',700),
('s1','p2','j2',100),
('s2','p3','j1',400),
('s2','p3','j2',200),
('s2','p3','j4',500),
('s2','p3','j5',400),
('s2','p5','j1',100),
('s2','p5','j2',200),
('s3','p1','j1',200),
('s3','p3','j1',100),
('s4','p5','j1',300),
('s4','p6','j3',200),
('s5','p6','j4',100),
('s5','p2','j4',100),
('s5','p3','j1',200),
('s5','p6','j2',200),
('s5','p6','j4',500);

select sno from spj where jno='j1';
select sno from spj where jno='j1' and pno='p1';
select distinct(spj.sno) from spj inner join p on spj.pno=p.pno and p.color ='红';
select distinct(j.jno) from spj,p,j where spj.pno=p.pno and spj.jno=j.jno and p.color='红' and j.city='天津';

select sname,city from s
select pname,color,weight from p;
select jno from spj where sno='s1' ;
select pname,qty from p,spj where p.pno=spj.pno and spj.jno='j2';
select spj.jno from spj,s where spj.sno=s.sno and s.city='上海';
select j.jname from s,j,spj where s.sno=spj.sno and j.jno=spj.jno and s.city='上海';
select distinct(spj.jno) from spj,s,j where s.sno=spj.sno and j.jno =spj.jno and s.city <> '天津';这里可以是not in('天津')
update p set color='蓝' where color=0;
delete from spj where sno='s2';

insert into s values('s2','盛锡',10,'北京');insert into spj values('s2','p4','j6',200);

视图和表一样使用,创建语句如下

create view v_sj as select sno,pno,qty from spj where jno='j1';
select pno,qty from v_sj;
select * from v_sj where sno='s1';
select * from v_sj inner join p on p.pno=v_sj.pno where sno='s1';

添加外键(外键的作用:主表的数据决定外表的数据,录入数据内容必须要是主表有的,防止录错,删除的时候,可以set 关外键,可以先级联删除,)

mysql> ALTER TABLE tb_emp2
    -> ADD CONSTRAINT fk_tb_dept1
    -> FOREIGN KEY(deptId)
    -> REFERENCES tb_dept1(id);

数据库的连接关系与区别

内连接(inner join):输入join on默认内连接,逗号分开是隐式内连接效率较前种低(符号优先级低)(以左右表内匹配的记录为主)

    表示只包含匹配的记录。只返回两张表匹配的记录。


外连接(outer join):表示还包含不匹配的记录。

左连接(left join):(以左表所有的记录为主)又称左外连接,两表匹配记录+左表未匹配记录。
右连接(right join):(以右表所有的记录为主)又称右外连接,两表匹配记录+右表未匹配记录。
全连接(full join):(以两个表所有的记录为主)又称全外连接,两表匹配记录+两表各自的多余记录。

 

 

交叉连接 (笛卡尔积)一一映射,排列所有元素
SELECT * FROM student CROSS JOIN teacher

等值连接(相等连接)
SELECT student.* , teacher.*
FROM student , teacher
WHERE student.class = teacher.class

 

自然连接:去掉重复项的等值连接

SELECT * FROM student NATURAL JOIN teacher

 

数据库字段

char固定长度,最长n个字符。

varchar 最大长度为n的可变字符串。  varchar必char节省空间,但在效率上比char稍微差一些。

nvarchar(6),最多能存储6个字符/中文数据,比如:"哈哈哈哈哈哈",“abcdef”,而varchar只能存3个哈

nvarchar存储英文字符,会浪费一半以上的存储空间

 

posted @ 2022-03-28 15:38  困到很想醒  阅读(80)  评论(0编辑  收藏  举报