插入
insert into:向表中插入新纪录
一次性对全部列插入一行:
insert into tablename values(value1,value2,value3,……);
一次对部分列插入一行
insert into tablename (列1,列2,列3,……) values (value1, value2, value3,……);
一次性插入多行
insert into tablename values(……),(……);
insert into tablename (列1,列2,列3,……) values (value1, value2, value3,……),(value1, value2, value3,……);
更新
update:更新表中记录
update tablename set 列1=value1, 列2=value2,……, where ……;
删除记录
delete from tablename where ……;
连接join
把来自两个表或者多个表的列结合起来,条件语句使用on,不使用where
内连接:inner join
在表中存在至少一个匹配时返回,一般Inner可以省略,直接用Join
例:假设有一张表1
id | age |
---|---|
1 | 20 |
2 | 21 |
3 | 22 |
4 | 23 |
5 | 24 |
表2:
name | age |
---|---|
aa | 20 |
bb | 26 |
cc | 22 |
dd | 24 |
ee | 20 |
select 表1.id,表2.name from 表1 join 表2 on 表1.age=表2.age
这结果只会返回两个表中age匹配的记录
id | name |
---|---|
1 | aa |
1 | ee |
3 | cc |
5 | dd |
左外连接:left join
从表1返回所有的行,即使表2中没有匹配,用Null替代
select 表1.id,表2.name from 表1 left join 表2 on 表1.age=表2.age;
返回结果
id | name |
---|---|
1 | aa |
1 | ee |
2 | null |
3 | cc |
4 | null |
5 | dd |
此时id为2和4的age,没有表二中的age与之匹配,则用Null替代。
右外连接:right join
返回右表中所有的行,即使左表没有与之对应的,用Null替代
select 表1.id,表2.name from 表1 right join 表2 on 表1.age=表2.age
id | name |
---|---|
1 | aa |
1 | ee |
null | bb |
3 | cc |
5 | dd |
null | ee |
全连接:full join
select 表1.id,表2.name from 表1 cross join 表2 on 表1.age=表2.age
id | name |
---|---|
1 | aa |
1 | ee |
2 | null |
3 | cc |
4 | null |
5 | dd |
null | bb |
null | ee |
笛卡尔积:cross join
……
on 和where的区别
on:on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
where:where条件是在临时表生成好后,再对临时表进行过滤的条件。条件不为真的就全部过滤掉。
以left join为例:
表1:
id | age |
---|---|
1 | 10 |
2 | 20 |
3 | 30 |
表2:
name | age |
---|---|
10 | aa |
20 | bb |
20 | cc |
select tab1.id, tab2.name form tab1 left join tab2 on tab1.age = tab2.age where tab2.name='aa'
此时tab1 left join tab2 on tab1.age = tab2.age会生成一张中间表,之后再用where条件过滤
中间表
id | name |
---|---|
1 | aa |
2 | bb |
2 | cc |
3 | null |
where对中间表进行过滤
id | name |
---|---|
1 | aa |
再看第二条SQL
select tab1.id, tab2.name form tab1 left join tab2 on tab1.age = tab2.age and tab2.name='aa'
id | name |
---|---|
1 | aa |
2 | null |
3 | null |