MySQL約束,多表查詢和子查詢

2021-09-26 06:12:25 字數 3050 閱讀 2990

多表查詢

子查詢

主鍵特性

非空唯一

被引用

當表的某一列被指定為主鍵後,該列就不能為空,不能有重複值出現

建立表時指定主鍵

方法一:

create table emp( empno int primary key, ename varchar(20) );

方法二:

create table emp( empno int, ename varchar(20) primary key(empno) );

指定empno列為主鍵列,就是為empno列新增主鍵約束

通常,我們會指定主鍵列為整型,然後設定自增長,以保證在插入資料時主鍵列的唯一和非空。

建立表時指定主鍵自增長

create table emp( empno int primary key auto_increment, ename varchar(20) );

修改表時設定主鍵自增長

alter table emp change empno empno int auto_increment;

修改表時刪除主鍵自增長

alter table emp change empno empno int;

如果某些列不能設定null值,那麼就可以對該列新增非空約束。

create table emp( empno int primary key auto_increment, ename varchar(20) not null );

對 ename 列進行了設定

如果某些列不能設定重複的值,那麼就可以對該列新增唯一約束。

create table emp( empno int primary key auto_increment, ename varchar(20) not null unique, age int );

對 ename 列進行了設定

外來鍵必須是另乙個表的主鍵的值

外來鍵可以重複

外來鍵可以為空

修改表時新增外來鍵約束

alter table emp add constraint fk_emp_dept foreign key(deptno) references dept(deptno);

修改表時刪除外來鍵約束

alter table emp drop foreign fk_emp_dept;/*約束名稱*/

要求被合併的表中,列的型別和數目相同

union 去除重複行

union all 不去除重複行

select * from 表1 union all select * from 表2;

select * from 表1 union select * from 表2;

左外連線

select * from 表1 別名1 left outer join 表2 別名2 on 別名1.xx=別名2.xx;

左表記錄無論是否滿足條件都會查詢出來,而右表只有滿足條件才能出來。左表中不滿足條件的記錄,右表部分都為null值。

左外自然連線

select * from 表1 別名1 natural left outer join 表2 別名2 on 別名1.xx=別名2.xx;

右表記錄無論是否滿足條件都會查詢出來,而左表只有滿足條件才能出來。右表中不滿足條件的記錄,左表部分都為null值。

右外連線

select * from 表1 別名1 right outer join 表2 別名2 on 別名1.xx=別名2.xx;

右外自然連線

select * from 表1 別名1 natural right outer join 表2 別名2 on 別名1.xx=別名2.xx;

mysql不支援,但是可以使用 union

查詢中有查詢

where 後作為條件存在

from 後作為表存在

單行單列

select * from 表1 別名1 where 列1 [=,<,>,<=,>=,!=] (select 列 from 表2 別名2 where 條件);

多行單列

select * from 表1 別名1 where 列1 [in,all,any] (select 列 from 表2 別名2 where 條件);

單行多列

select * from 表1 別名1 where (列1,列2) in (select 列1,列2 from 表2 別名2 where 條件);

多行多列

select * from 表1 別名1,(select ......) 別名2 where 條件;

MySQL子查詢,多表查詢

為了便於介紹我們建立以下表 create table user info id int 2 primary key,user name varchar 12 unique password varchar 15 not null real name varchar 8 not null age in...

多表查詢和子查詢

簡要記錄一下自己學習的歷程 1 3張簡單的表 1 student表 2 class表 3 soccer表 2 多表查詢 1 連線查詢 1 inner join inner join 把兩個表連線在一起,返回兩個表中相匹配的記錄,是2和3的交集。2 left outer join left outer...

MySQL子查詢與多表查詢

1 什麼是子查詢 查詢中的查詢即為子查詢,一般使用括號將子查詢sql括起來,如下sql語句 select from select from user info users2 什麼時候用子查詢 當在查詢過程中需要知道乙個已知量的不確定資料時使用子查詢。select from address where...