mysql修改关联查询语句_MySQL基础操作之数据约束与关联查询

1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值。

默认值的字段允许为空。

对默认值字段也可以插入null。

1 CREATE TABLESTUDENT(2 ID INT,3 NAME VARCHAR(20),4 ADDRESS VARCHAR(20) DEFAULT '京口区'

5 );6 INSERT INTO STUDENT (ID, NAME ) VALUES (1,'张三');7 INSERT INTO STUDENT (ID , NAME,ADDRESS ) VALUES (2,'李四' ,NULL);

d1f292ecb2946a6b247ea79dadb26c4b.png

2.非空约束

1 CREATE TABLESTUDENT(2 ID INT,3 NAME VARCHAR(20),4 GENDER VARCHAR(2) NOT NULL

5 );

2.1非空字段必须赋值(错误显示)

INSERT INTO STUDENT (ID , NAME) VALUES(1, '李四');

6451037b59272fd4bfbd0294cc690372.png

2.2不能插入null(错误显示)

INSERT INTO STUDENT (ID , NAME) VALUES (1, '张三' ,NULL);

bf31262755e492e27994f869de8c05a6.png

3.唯一约束

1 CREATE TABLESTUDENT (2 ID INT UNIQUE,3 NAME VARCHAR(20)4 );5 INSERT INTO STUDENT (ID , NAME) VALUES (1, '张三');

下面语句执行发生错误

INSERT INTO STUDENT (ID , NAME) VALUES (1, '李四');

错误提示

1d93fdfc18a4c1232d9d64b0fc52dcea.png

4.主键约束(非空+唯一),通常每张表都会设置一个主键字段。用于标注表记录的唯一性。

主键一般都是没有业务含义的。

1 CREATE TABLESTUDENT(2 ID INT PRIMARY KEY,3 NAME VARCHAR(20)4 );5

6 INSERT INTO STUDENT (ID , NAME) VALUES (1, '张三');

下面语句执行显示错误

INSERT INTO STUDENT (ID , NAME ) VALUES (NULL , '李四');

错误提示

02f24a550ea8814f27f589013fde466d.png

下面错误也是一种错误

INSERT INTO STUDENT (ID ,NAME ) VALUES (1, '李四');

53dc46486b19f2b595a53d16ee46cef7.png

5.自增长约束

可以自动的递增

CREATE TABLESTUDENT(

IDINT PRIMARY KEYAUTO_INCREMENT,

NAMEVARCHAR(20)

);INSERT INTO STUDENT (NAME) VALUES ('张三');INSERT INTO STUDENT (NAME) VALUES ('李四');

ea71381fc32999650ed1fdc8d81acf36.png

整表数据删除,不影响自增的删除语句

DELETE FROM STUDENT;

删除表之后再次(不用再创建表),添加插入语句如图所示

4dfe9644a9b87f636ea60d49ac880f37.png

删除表中所有数据,删除外键也是用这个语句。

DELETE FROM STUDENT;

再次插入数据

065261a0d2441d175e94c106e42f5345.png

6.外键约束

被约束的表为副表,外键设置在副表上

eg:创建员工表(副表),创建部门表(主表),先创建主表,再创建副表

CREATE TABLEDEPT(

IDINT PRIMARY KEY,

DEPTIDVARCHAR(20)

);INSERT INTO DEPT (ID , DEPTNAME) VALUES (1, '软件设计部门');INSERT INTO DEPT (ID , DEPTNAME) VALUES (2, '人事部');INSERT INTO DEPT (ID , DEPTNAME) VALUES (3, '财务部');INSERT INTO DEPT (ID , DEPTNAME) VALUES (4, '运营部');CREATE TABLEEMPLOYEE(

IDINT PRIMARY KEYAUTO_INCREMENT,

EMPNAMEVARCHAR(20),

DEPTIDINT,CONSTRAINT EMPLOYEE_DEPT_FK FOREIGN KEY (DEPTID) REFERENCESDEPT(ID)

);INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('张三' , 1);INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('李四' , 2);INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('王五' , 3);INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('赵六' , 4);

查询两张表

b80c99e6679b199911904c8d935a4908.png

0418fd7ea9bc5601091fef5a3bc67400.png

7.下面进行级联关联,意味着,当主表修改时,副表也修改

修改以上表的创建语句,并重新插入新的语句

732bbc9adabec87b414638cf8a981ca7.gif

1 DROP TABLEEMPLOYEE;2

3 CREATE TABLEEMPLOYEE(4 ID INT PRIMARY KEYAUTO_INCREMENT,5 EMPNAME VARCHAR(20),6 DEPTID INT,7 CONSTRAINT EMPLOYEE_DEPT_FK FOREIGN KEY (DEPTID) REFERENCES DEPT(ID) ON UPDATE CASCADE ON DELETE CASCADE

8 );9

10 INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('张三' , 1);11 INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('李四' , 2);12 INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('王五' , 3);13 INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('赵六' , 4);

732bbc9adabec87b414638cf8a981ca7.gif

查询如图所示

628de94f9a92174502ccdb0ddf87a300.png

修改主表的一条记录

UPDATE DEPT SET ID=5 WHERE ID=4;

主表的运行结果

f8f1c9fd26d9afae09c56cfe197d74ed.png

副表的运行结果

f64fd50a35afa9fd8baee52e18bd6962.png

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

二、关联查询

1.交叉查询

SELECT * FROM EMPLOYEE,DEPT;

9f3ac13ab9c13432bd77aab5ad59b22d.png

2.内连接查询

多表查询规则:1)查询哪些表    2)确定哪些字段    3)表与表之间的查询条件(连接表的数量-1)

1 SELECTEMPNAME , dept.DEPTNAME2 FROMEMPLOYEE3 INNER JOINDEPT4 ON EMPLOYEE.DEPTID = DEPT.ID;

537b3bb1b0a70f24e0e1a0b706b72018.png

3.使用别名

1 SELECT EMPNAME AS '员工姓名', D.DEPTNAME AS '部门' --注意这里的D

2 FROM EMPLOYEE ASE3 INNER JOIN DEPT ASD4 ON E.DEPTID = D.ID;

b5eb795368737a0a03b52106d4981ad4.png

4.左外连接查询,左边的数据一定会完全显示。查询时先写左表

首先我们改造一下副表

UPDATE EMPLOYEE SET DEPTID = NULL WHERE ID= 4;

9dd4d5aaee73d7fbfeb7c97cee40b10b.png

如果是内连接查询则显示

c8018a9020a25bd1a5cf35002b6224bb.png

如果左连接查询

1 SELECTD.DEPTNAME, E.EMPNAME2 FROM DEPT AS D --左表

3 LEFT OUTER JOIN EMPLOYEE AS E --右表

4 ON D.ID = E.DEPTID;

334e4bcea040704952f8f2b17b07ae4c.png

右连接其实和左连接一样,只是查询表的位置不同,下面是右连接,显示的和左连接的相同

1 SELECTD.DEPTNAME,E.EMPNAME2 FROM EMPLOYEE AS E--左表

3 RIGHT JOIN DEPT AS D --右表

4 ON E.ID = D.ID;

43f69141b518ce20ca5124c12dada8e9.png

5.自连接查询,自连接查询一般应用于表数据为树状结构。

首先我们创建表并查询

1 CREATE TABLEPERSON(2 ID INT PRIMARY KEYAUTO_INCREMENT,3 NAME VARCHAR(20),4 BOSSID INT

5 );6

7 INSERT INTO PERSON (NAME,BOSSID) VALUES ('张三',NULL);8 INSERT INTO PERSON (NAME,BOSSID) VALUES ('李四',1);9 INSERT INTO PERSON (NAME,BOSSID) VALUES ('王五',2);10 INSERT INTO PERSON (NAME,BOSSID) VALUES ('赵六',3);11 INSERT INTO PERSON (NAME,BOSSID) VALUES ('李七',3);12

13 SELECT P.NAME AS '老板' ,B.NAME AS '员工'

14 FROM PERSON ASP15 RIGHT JOIN PERSON ASB16 ON P.ID = B.BOSSID;

显示结果

ebd59fb060352d52fd72fbecbaf9852e.png

注意上面创建表的BOSSID的结构。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值